[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 df
docker 디스크 사용량을 표시 하는 새로운 명령 이 포함되어 있습니다.
$ 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
얻는 데 사용 합니다 :
- CPU 사용량
- 컨테이너에 할당 된 Mem 사용량 / 총 Mem (docker run 명령으로 할당 가능)
- 막 %
- 블록 I / O
- 넷 I / O
답변
당신이 사용할 수있는
docker history IMAGE_ID
다양한 하위 구성 요소간에 이미지 크기가 어떻게 분배되는지 확인합니다.