Docker-как анализировать использование диска контейнера?
Я искал некоторое время, но не смог найти способ проанализировать использование диска контейнера / Тома 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' для анализа использования диска. Кажется, это работает, но не с помощью контейнеры, которые используют 'volumes-from'.
например, я использую контейнер только для данных для MongoDB, называемый "mongo-data".
когда я запускаю docker run -it --volumes-from mongo-data busybox, а потом df -h внутри контейнера, он говорит, что файловая система смонтирована на /data/db (мой контейнер только для данных "mongo-data") использует 11.3 G, но когда я делаю du -h /data/db, Он говорит, что он использует только 2.1 г.
Итак, как я могу проанализировать использование контейнера/Тома диска? Или, в моем случае, как мне узнать контейнер " mongo-data размер?
большое спасибо,
8 ответов:
после 1.13.0, Докер включает новую команду
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 -v
размещение этого в качестве ответа, потому что мои комментарии выше были скрыты:
перечислите размер контейнера:
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')
часть Тома больше не работает, так что если кто-то insterested я просто изменить выше скрипт немного:
for d in `docker ps | awk '{print }' | 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-squashутилиты. Получить его из GitHub здесь:https://github.com/jwilder/docker-squash
имейте в виду, что докер
ps --sizeможет быть дорогостоящей командой, требующей более нескольких минут для завершения. То же самое относится к запросам API списка контейнеров сsize=1. Лучше не запускать его слишком часто.посмотри варианты мы составили, в том числе
du -hsопция для каталога постоянных томов docker.
можно использовать
docker history IMAGE_IDчтобы увидеть, как размер изображения распределяется между его различными субкомпонентами.
Comments