2014-11-05 7 views
118

Я искал какое-то время, но не смог найти способ проанализировать использование дискового контейнера/тома Docker.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 

, а затем запустив «ДФ -h», чтобы проанализировать использование дискового пространства. Кажется, что он работает, но не с контейнерами, которые используют «объемы-от».

Например, я использую контейнер для данных MongoDB, называемый «mongo-data».

Когда я запускаю «docker run -it --volumes-from mongo-data busybox», а затем «df -h» внутри контейнера, он говорит, что файловая система, установленная на '/ data/db' (my ' mono-data ') используется только 11.3G, но когда я делаю «du -h/data/db», он говорит, что использует только 2.1G.

Итак, как я могу анализировать использование контейнера/объема диска? Или, в моем случае, как узнать размер контейнера «mongo-data»?

Большое спасибо,

+0

В Mac OS X есть открытая проблема «Docker не освобождает место на диске ...»: https://github.com/docker/for-mac/issues/371 – asmaier

ответ

222

Чтобы увидеть размер файла ваших контейнеров, вы можете использовать -s аргумент docker ps:

docker ps -s 
+10

Обратите внимание, что докер ps --size может занять несколько минут и будет производить тяжелую IO на хосте: https://github.com/axibase/axibase-collector-docs/blob/master/jobs/docker /volume-size.md –

+2

Я заметил также, что запуск 'docker ps -s' не берет журналы, хранящиеся внутри/var/lib/docker /, в учетную запись. – demee

+4

Он выводит два значения, например, это' 27.2MB (virtual 173MB) ' в чем разница между ними? –

7

(этот ответ не полезно, но оставить его здесь, так как некоторые комментарии могут быть)

docker images покажет «виртуальный размер», то есть, сколько в общей сложности, включая все нижние слои. Таким образом, некоторый двойной подсчет, если у вас есть контейнеры, которые используют одно и то же базовое изображение.

documentation

+3

Я не говорю о изображения, но и о контейнерах (список показан при запуске «docker ps»). – AlonL

+0

Контейнеры похожи на процессы; у них нет дискового пространства. – Bryan

+2

«Команда запуска докера сначала создает слой с возможностью записи по указанному изображению ...» (https://docs.docker.com/v1.1/reference/commandline/cli/) Этот уровень - это то, что я имею в виду , или любые другие тома, которые монтируются в контейнер через «объемы-из» и т. д. – AlonL

25

Проводка это как ответ, потому что мои комментарии выше был скрыт:

Список размером контейнера:

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 

Редактировать: Lis т размеры и объемы:

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“ в соответствии с вашей Докер файловой системы (например, „AUFS“)

+8

«du -d 2» не работает в моей системе Centos, вместо этого мне пришлось использовать «du -max-depth 2». –

+2

На Mac это показывает '/ var/lib/docker/devicemapper: нет такого файла или каталога'. Любая идея, где devicemapper хранится на Mac? – Markus

+0

Markus: если вы используете boot2docker, вам нужно запустить команду 'du' внутри вашей виртуальной машины хоста boot2docker. Команда также может выйти из строя, если вы используете 'aufs' вместо устройства mapper. – James

18

Объем часть не будет работать больше, так что если кто-то insterested I просто изменить указанный выше сценарий немного:

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 
+0

Mount Points! = Volumes – derFunk

+0

Mac Docker 1.12.1 помещает файлы изображений в ~/Library/Containers/com.docker.docker/not/var/lib/docker/aufs. Имена файлов, для которых не содержат .Id или.Имя :-( –

3

Если вы хотите уменьшить размер многослойных изображений, я могу порекомендовать утилиту Jason Wilder's docker-squash.Получите это от GitHub здесь: https://github.com/jwilder/docker-squash

1

Имейте в виду, что докер ps --size может быть дорогой командой, для чего требуется более нескольких минут. То же самое относится к запросам API-адресов контейнера с size=1. Лучше не запускать его слишком часто.

Взгляните на alternatives, который мы скомпилировали, включая опцию du -hs для каталога точной постоянной докеры.

+0

Не тот случай на моем сервере - работает в миллисекундах. YMMV предостережение перед этим (тест, так как Сергей говорит «... может ...») –

+0

Я также тестирую, это все еще приемлемо с помощью docker ps --size – andikurnia

124

После 1.13.0, Docker включает в себя новую команду 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 -v 
+0

Может ли 'docker system df' предоставлять более подробные данные? использование диска для подмножества контейнеров или показать использование диска для томов, установленных контейнером? –

+2

@ Stefan Lasiewski, используйте 'docker system df -v' для получения более подробной информации –

1

Вы можете использовать

docker history IMAGE_ID 

, чтобы увидеть, как размер изображения ditributed между его различными субкомпонентами.

 Смежные вопросы

  • Нет связанных вопросов^_^