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


258

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'컨테이너 크기를 어떻게 알 수 있습니까?


많은 레이어 이미지의 크기를 줄이려면 Jason Wilder의 docker-squash유틸리티를 추천하십시오 . : 여기 GitHub의에서 가져 오기 github.com/jwilder/docker-squash
mhvelplund

Mac OS X에는 "Docker가 디스크 공간을 공개하지 않습니다 ..."라는 공개 된 문제가 있습니다 : github.com/docker/for-mac/issues/371
asmaier

답변:


460

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

docker ps --size

25
고정 표시기 추신 --size 완료하는 데 몇 분 정도 걸릴 수 있으며, 호스트에 무거운 IO를 생산하는 것을 주 : github.com/axibase/axibase-collector-docs/blob/master/jobs/...
세르게이 라죠 노프

5
또한 실행시 docker ps -s/ var / lib / docker / 내부에 보관 된 로그는 고려되지 않습니다.
deme

17
두 가지 값을 출력합니다. 이와 같은 27.2MB (virtual 173MB)차이점은 무엇입니까?
Mohammed Noureldin

11
@MohammedNoureldin 여기에 설명이 있습니다 : github.com/docker/docker.github.io/issues/…
aleclarson

4
Windows 용 Docker에서는 작동하지 않습니다. 모든 항목에 대해 0 만보고합니다.
Mike Christensen

303

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

구성 요소가 많은 경우 유용한 명령 하나가 있습니다.docker system df --verbose > docker.stats-2019-07-18.log
joseluisq

컨테이너의 SIZE 열은 무엇을 의미합니까? 컨테이너가 꺼져 있는데이 명령은 예를 들어 SIZE = 100MB를 보여줍니다.
danilo

컨테이너 끄기의 경우 SIZE = 100MB
danilo

31

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

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

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')


8
"du -d 2"가 Centos 시스템에서 작동하지 않으므로 대신 "du --max-depth 2"를 사용해야했습니다.
dr-jan

2
Mac에서는이 표시 /var/lib/docker/devicemapper: No such file or directory됩니다. 장치 매퍼가 Mac에서 어디에 저장되어 있는지 알고 있습니까?
Markus

Markus : boot2docker를 사용하는 경우 duboot2docker 호스트 VM 내 에서 명령 을 실행해야합니다 . aufs장치 매퍼 대신 사용 하는 경우 명령이 실패 할 수도 있습니다 .
제임스

awk / tail 대신 컨테이너의 해시를 나열하는 'docker ps -q'는 어떻습니까?
Andrew Wolfe

Ubuntu 14.04 / Docker 1.10.2 설치에서 컨테이너 크기는 항상 비어 있습니다.
mhvelplund

22

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

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

마운트 포인트! = 볼륨
derFunk

Mac Docker 1.12.1은 이미지 파일을 / var / lib / docker / aufs가 아닌 ~ / Library / Containers / com.docker.docker /에 저장합니다. .Id 또는 .Name을 포함하지 않는 파일 이름 :-(
paul_h

10

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

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

선적 서류 비치


3
이미지가 아니라 컨테이너에 대해 이야기하고 있습니다 ( 'docker ps'를 실행하여 표시된 목록).
AlonL

1
컨테이너는 프로세스와 같습니다. 디스크 공간이 없습니다.
Bryan

2
"docker run 명령은 먼저 지정된 이미지 위에 쓰기 가능한 컨테이너 계층을 만듭니다 ..."( docs.docker.com/v1.1/reference/commandline/cli ) 해당 계층은 내가 의미하는 바 또는 다른 볼륨 'volumes-from'등을 통해 컨테이너로
운반


1
고마워요, 그것은 내 요구를 만족시키지 않지만 훌륭한 도구입니다.
AlonL

10

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

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

8

당신이 사용할 수있는

docker history IMAGE_ID

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


4

명심 docker ps --size완료하는 데 몇 분 이상 복용, 비싼 명령 할 수있다. 컨테이너 목록 API 요청에도 동일하게 적용됩니다.size=1 . 너무 자주 실행하지 않는 것이 좋습니다.

도커 영구 볼륨 디렉토리 옵션을 포함하여 컴파일 한 대안 을 살펴보십시오 du -hs.


내 서버의 경우가 아닙니다-밀리 초 안에 실행됩니다. 위의에 YMMV의주의 (테스트, 세르게이가 말한대로 "... 수도 ...")
토드 카레

나는 또한 고정 표시기 PS --size 사용하여 여전히 허용있어, 테스트 해요
andikurnia

3

막심의 대답을 개선 :

docker ps --size

다음과 같은 것을 보게 될 것입니다 :

+---------------+---------------+--------------------+
| CONTAINER ID  | IMAGE         | SIZE               |
+===============+===============+====================+
| 6ca0cef8db8d  | nginx         | 2B (virtual 183MB) |
| 3ab1a4d8dc5a  | nginx         | 5B (virtual 183MB) |
+---------------+---------------+--------------------+

컨테이너를 시작할 때 컨테이너가 시작된 이미지는 읽기 전용 (가상)으로 마운트됩니다 .
또한 쓰기 가능한 레이어가 마운트되어 컨테이너의 변경 사항이 기록됩니다.

따라서 가상 이미지 (예에서 183MB)는 동일한 이미지에서 시작된 컨테이너 수에 관계없이 한 번만 사용됩니다. 컨테이너 1 개 또는 천 개를 시작할 수 있습니다. 추가 디스크 공간이 사용되지 않습니다 .
"크기"(예에서 2B)는 컨테이너마다 고유하므로 디스크에 사용 된 총 공간은 다음과 같습니다.

183MB + 5B + 2B

표시된 크기에 컨테이너에 사용 된 모든 디스크 공간이 포함되지는 않습니다.
현재 포함되지 않은 것들;
-볼륨
-스와핑
-검사 점
-컨테이너가 생성 한 로그 파일에 사용되는 디스크 공간

https://github.com/docker/docker.github.io/issues/1520#issuecomment-305179362

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.