Ответ 1
Чтобы увидеть размер файла ваших контейнеров, вы можете использовать аргумент --size
docker ps
:
docker ps --size
Я вижу, что Docker занимает 12 ГБ моей файловой системы:
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', чтобы проанализировать использование диска. Кажется, что он работает, но не с контейнерами, которые используют "volume-from".
Например, я использую контейнер только для данных для 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 system df
чтобы показать использование диска докером.
$ 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
ПРИМЕЧАНИЕ. Измените "devicemapper" в соответствии с файловой системой Docker (например, "aufs" )
Часть тома больше не работала, поэтому, если кто-то невзрачен, я немного изменил выше script:
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
чтобы получить:
Вы можете использовать
docker history IMAGE_ID
чтобы увидеть, как размер изображения распределяется между его различными субкомпонентами.
Если вы хотите уменьшить размер многослойных изображений, я могу порекомендовать Jason Wilder docker-squash
. Получите его от GitHub здесь: https://github.com/jwilder/docker-squash
Имейте в виду, что docker ps --size
может быть дорогой командой, выполнение которой занимает более нескольких минут. То же самое относится к запросам API списка контейнеров с size=1
. Лучше не запускать его слишком часто.
Взгляните на скомпилированные нами альтернативы, включая параметр du -hs
для каталога постоянных томов docker.