"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте". (с) Мартин Голдинг
Сколько докер занимает места на машине и как его "почистить"
Получить ссылку
Facebook
X
Pinterest
Электронная почта
Другие приложения
Задумывались ли вы когда-нибудь, сколько места на вашей машине занимают не используемые докер-имиджи, докер-контейнеры и прочие артефакты, которые докер создает? Если вы ни разу их не проверяли и не разу не чистили докер, что можете быть удивлены, так как это запросто могут быть десятки гигабайт на вашем жестком диске.
Да и как обычно, если тексту с картинками вы предпочитаете видео, то вот моя видео-инструкция на YouTube.
После некоторого времени работы с докером в системе накапливаются разные докер-артефакты: images, containers, volumes которые вы не используете, и скорее всего, даже забыли об их существовании. Тем не мене они день за днем продолжают занимают место на вашем жестком диске. Фактически они вам больше не нужны, а если и когда-то понадобятся снова то докер их вам скачает из Docker Hub или создаст этот артефакт из Dockerfile. Если не держать эти артефакты под контролем, то дисковое пространство на вашей машине может исчерпаться довольно быстро.
В этой статье я расскажу о разных способах узнать о том, как расходует дисковое докер и как можно его "почистить".
Шаг 1. Анализ использования докером дискового пространства
Начнем с анализа того как докер использует дисковое пространство на твоей машине. Для этого есть специальная команда docker system df . Результат работы этой команды будет выглядеть где-то так.
Эта команда показывает
1. Колонка TYPE - какие артефакты (образы, контейнеры и пр) есть на твоей машине
2. Колонки TOTAL и ACTIVE- сколько артефактов разных типов на машине.
3. Колонка SIZE - сколько эти артефакты занимают места на машине.
4. Колонка RECLAIMABLE - сколько места, можно было бы освободить, если удалить не используемые артефакты.
Команду docker system df можно запустить с ключом "-v" чтобы увидеть сводную информацию по всем артефактам - сколько занимает места каждый имидж, контейнер, что находится в билд-кэше. В качестве работы этой команды я приведу скриншот с виртуальной машины на qEmu, т.к. мой занимает несколько экранов :).
В общем-то не удивительно, что большую часть места на диске занимают именно докер-имиджи. Поэтому, чтобы освободить значительную часть дискового пространства, как правило, достаточно сфокусироваться именно на них. Получить точечную информацию о том, какие скачаны имиджи и сколько они занимают можно командой docker image ls (или docker images).
Рекомендую также попробовать эту команду с ключом "--all" которая также показывает скрытые промежуточные имиджи, которые остаются после того как команда "docker image build" завершается с какой-то ошибкой.
После того как мы разобрались куда "уходит" место, надо докер "почистить". Основная команда для освобождения места на машине это docker system prune. Она удаляет
все "болтающиеся" (dangling) докер-имиджи,
все остановленные докер-контейнеры,
неиспользуемые сетевые соединения
чистит кэш сборки докер-имидже
Вот как выглядит результат использования этой команды
Стоит немного рассказать, что такое "болтающиеся" (dangling) докер-имиджи. Это неиспользуемые имиджи, у которых также нет тэга. Обычно они появляются и остаются при неуспешных попытках сборки докер-имиджа. Посмотреть их можно командой docker images --filter "dangling=true".
У команды docker system prune есть ключ "--all" которая удалит все неиспользуемые имиджи (даже если у них есть тэг). Очевидно, что команда docker system prune --all позволяет освободить значительно больше места. Я как правило пользуюсь именно ей, т.к. обычно у меня нет докер-имиджей, которые бы я не мог скачать с Docker Hub или так или иначе собрать из Dockerfile.
Для удаления "болтающихся" и не используемых только докер-имиджей есть так же специальная команда docker image prune и у нее также есть флаг "--all".
Шаг 3. Чтобы еще такого удалить? Лайфхаки
В заключение хочу поделиться парой команд, которыми я так же пользуюсь когда мне надо что-то выборочно "почистить" в докере.
Удаление докер-имиджей по шаблону
Команда docker image ls (docker images) может принимать фильтр согласно которому она показывает имиджи. Этот фильтр можно так же использовать чтобы удалить докер-имиджи, которые соответствуют какому-либо критерию. Вот здесь можно прочитать подробнее про использование фильтров и есть много примеров. Используя этот фильтр и команду удаления докер-имиджей можно организовать удаление докер-имиджей по определенному условию. Так, например, можно удалить "болтающиеся" имиджи при помощи фильтра в docker image ls/docker images
Иногда надо, например, удалить все контейнеры. В таком случае удобно воспользоваться вот такой командой
$ docker rm $(docker ps -aq)
В этой статье я поделился всем, чем пользуюсь сам при "чистке" докера. Если вы привыкли пользоваться какими-то другими командами/способами, буду рад, если вы поделитесь ими в комментариях к этой статье.
В этой статье я хочу рассказать про пары команды docker save/load и docker export/import, показать примеры их использования и рассказать чем они отличаются. Да и как обычно, если тексту с картинками вы предпочитаете видео, то вот моя видео-инструкция на YouTube. Команды docker save и docker load Начнем с пары docker save/load. Эта пара команд работает с докер-имиджами. Команда docker save сохраняет имидж с локальной машины в tar-архив. Этот архив содержит всю необходимую информацию, чтобы потом восстановить докер-имидж. Восстановление докер-имиджа из tar-архива производится командой docker load. Теперь посмотрим на примере как это делается. У меня локально есть докер-имидж “alpine”. Чтобы сохранить его как tar-архив воспользуемся командой docker save alpine -o alpine-image.tar Обратите внимание, на ключ “-o“. Он позволяет указать имя файла, в который надо сохранить докер-имидж. Теперь я удалю этот имидж из системы командой docker image rm alpine Как в...
Я регулярно пользуюсь утилитами Sysinternals и хочу поделиться одним из cпособов как при помощи Process Explorer выяснить какой процесс заблокировал доступ к файлу или папке. Использовать утилиты очень удобно – они бесплатны, не требуют инсталляции и могут быть запущены без предварительного скачивания из интернета (см http://live.sysinternals.com/ ). Последние 2 пункта делают их очень удобными при анализе и устранении проблем на серверах. Я недавно завел Ютуб-канал, где выкладываю видео по теме блога. Приглашаю Вас посмотреть и подписаться что бы не пропустить новые выпуски. Итак, как же узнать, кто держит тот или иной файл или папку. Для скриншотов я смоделировал такую ситуацию нарочно, открыв в Word файл "D:\temp\Doc1.docx" и пытаясь его в это же время удалить в проводнике. При попытке удалить файл получаю следующее сообщение Поищем этот документ в Process Explorer: Find->Find Handle or DLL… В появившемся окне вводим имя заблокированного файла и жмем Search Двойной к...
Зачастую разработчики воспринимают докер-контейнер как некий «черный ящик». Они знают как его запустить и минимально, как с ним работать. Но порой возникает необходимость посмотреть на файлы внутри докер-контейнера, создать какой-то файл или директорию, что-то поменять. Для этого есть команда “ docker container exec ”/” docker exec ” которая позволяет подключиться к запущенному контейнеру и выполнить некую команду. Вот как можно подключиться к контейнеру и запустить, скажем, bash docker container exec -it <container_ID> bash Команды “ it ” знакомы нам по предыдущему посту . “ container_ID ” – это ID контейнера, который возвращает команда " docker container run "/" docker run ". Причем нет необходимости вводить весь ID, достаточно и пары первых символов. Картинка стоит тысячи слов 😊. Для примера, посмотрите на скриншот окна, где я запускаю докер-контейнер. Команда “ docker run -d nginx ” вернула мне вот какой ID “ e7fce43aec7ae04e081656f8350008e0f97fd4829...
Комментарии