[docker] Docker 컨테이너의 디스크 사용량을 분석하는 방법

Docker가 12GB의 파일 시스템을 사용한다는 것을 알 수 있습니다.

2.7G    /var/lib/docker/vfs/dir
2.7G    /var/lib/docker/vfs
2.8G    /var/lib/docker/devicemapper/mnt
6.3G    /var/lib/docker/devicemapper/devicemapper
9.1G    /var/lib/docker/devicemapper
12G     /var/lib/docker

그러나 이것이 어떻게 컨테이너에 배포되는지 어떻게 알 수 있습니까?

(새로운 v1.3 명령)을 실행하여 컨테이너에 연결하려고했습니다.

docker exec -it <container_name> bash

그런 다음 ‘df -h’를 실행하여 디스크 사용량을 분석하십시오. ‘볼륨에서’를 사용하는 컨테이너에서는 작동하지 않는 것 같습니다.

예를 들어, MongoDB에는 ‘mongo-data’라는 데이터 전용 컨테이너를 사용합니다.

을 실행 docker run -it --volumes-from mongo-data busybox한 다음 df -h컨테이너 내부에서 /data/db(내 ‘mongo-data’데이터 전용 컨테이너) 에 마운트 된 파일 시스템 은 11.3G를 사용 du -h /data/db한다고 말하지만 그렇게하면 2.1G 만 사용한다고 말합니다.

그렇다면 컨테이너 / 볼륨 디스크 사용량을 어떻게 분석합니까? 또는 제 경우에는 ‘mongo-data’컨테이너 크기를 어떻게 알 수 있습니까?



답변

컨테이너의 파일 크기를 보려면 다음 --size인수를 사용할 수 있습니다 docker ps.

docker ps --size


답변

1.13.0 이후 Docker 에는 docker system dfdocker 디스크 사용량을 표시 하는 새로운 명령 이 포함되어 있습니다.

$ docker system df
TYPE            TOTAL        ACTIVE     SIZE        RECLAIMABLE
Images          5            1          2.777 GB    2.647 GB (95%)
Containers      1            1          0 B         0B
Local Volumes   4            1          3.207 GB    2.261 (70%)

공간 사용량에 대한 자세한 정보를 표시하려면 다음을 수행하십시오.

$ docker system df --verbose


답변

위의 의견이 숨겨져 답변으로 게시하십시오.

컨테이너의 크기를 나열하십시오.

du -d 2 -h /var/lib/docker/devicemapper | grep `docker inspect -f "{{.Id}}" <container_name>`

컨테이너 볼륨의 크기를 나열하십시오.

docker inspect -f "{{.Volumes}}" <container_name> | sed 's/map\[//' | sed 's/]//' | tr ' ' '\n' | sed 's/.*://' | xargs sudo du -d 1 -h

편집 : 실행중인 모든 컨테이너의 크기와 볼륨을 나열하십시오.

for d in `docker ps -q`; do
    d_name=`docker inspect -f {{.Name}} $d`
    echo "========================================================="
    echo "$d_name ($d) container size:"
    sudo du -d 2 -h /var/lib/docker/devicemapper | grep `docker inspect -f "{{.Id}}" $d`
    echo "$d_name ($d) volumes:"
    docker inspect -f "{{.Volumes}}" $d | sed 's/map\[//' | sed 's/]//' | tr ' ' '\n' | sed 's/.*://' | xargs sudo du -d 1 -h
done

참고 : Docker 파일 시스템에 따라 ‘devicemapper’를 변경하십시오 (예 : ‘aufs’)


답변

볼륨 부분이 더 이상 작동하지 않았으므로 누군가 관심이 있다면 위의 스크립트를 약간 변경하면됩니다.

for d in `docker ps | awk '{print $1}' | tail -n +2`; do
    d_name=`docker inspect -f {{.Name}} $d`
    echo "========================================================="
    echo "$d_name ($d) container size:"
    sudo du -d 2 -h /var/lib/docker/aufs | grep `docker inspect -f "{{.Id}}" $d`
    echo "$d_name ($d) volumes:"
    for mount in `docker inspect -f "{{range .Mounts}} {{.Source}}:{{.Destination}}
    {{end}}" $d`; do
        size=`echo $mount | cut -d':' -f1 | sudo xargs du -d 0 -h`
        mnt=`echo $mount | cut -d':' -f2`
        echo "$size mounted on $mnt"
    done
done


답변

(이 답변은 유용하지 않지만 일부 의견이있을 수 있으므로 여기에 남겨 두십시오)

docker images‘가상 크기’, 즉 모든 하위 레이어를 포함하여 총계가 얼마인지 표시합니다. 따라서 동일한 기본 이미지를 공유하는 컨테이너가있는 경우 일부 이중 계산.

선적 서류 비치


답변

나는 docker stats $(docker ps --format={{.Names}}) --no-stream얻는 데 사용 합니다 :

  1. CPU 사용량
  2. 컨테이너에 할당 된 Mem 사용량 / 총 Mem (docker run 명령으로 할당 가능)
  3. 막 %
  4. 블록 I / O
  5. 넷 I / O

답변

당신이 사용할 수있는

docker history IMAGE_ID

다양한 하위 구성 요소간에 이미지 크기가 어떻게 분배되는지 확인합니다.