Как проверить использование дискового пространства для образов и контейнеров Docker
Когда контейнерные приложения работают в изолированных средах, может быть сложнее, чем обычно, отследить проблемы с приложениями, использующими слишком много места для хранения. К счастью, Docker предоставляет команды для управления использованием диска контейнера.
Выполнение быстрой проверки
И если вы хотите проверить, сколько места использует Docker, вы можете использовать встроенную команду docker system df
, а также команду Linux du
, чтобы получить размер весь каталог.
docker system df sudo du -sh /var/lib/docker/
Эта команда показывает статические образы, контейнеры, в файловую систему которых были внесены изменения (например, файлы журналов), и тома, привязанные к контейнерам.
Однако это не совсем точно — здесь у меня запущено много контейнеров, но все они хранят данные в привязных монтированиях на хост-ОС, а не в томах.
Очистка образов Docker
Образы Docker отличаются от запущенных контейнеров; это файлы, которые вы загружаете из Docker Hub для запуска контейнера. Обычно они довольно большие и содержат весь необходимый код для запуска базовой ОС и вашего приложения.
Каждая версия изображения является отдельной, но хранится в слоях, поэтому несколько новых версий не будут занимать в два раза больше места для хранения. Вы можете просмотреть все изображения с помощью image ls
:
docker image ls
Чистить их легко; вы, конечно, не хотите удалять образы запущенных контейнеров, но удалять старые образы можно — они просто будут повторно загружены при необходимости.
Вы можете обрезать все изображения или вручную удалить одно по идентификатору:
docker image prune -a docker image rm 3a8d8f76e7f8f
Проверка использования запущенного контейнера
Контейнеры немного сложнее отследить, поскольку они могут использовать данные разными способами:
- Базовое изображение: каждый контейнер должен хранить свое изображение, но оно повторно используется в разных контейнерах.
- Слой модификации: если контейнер выполняет запись в свою файловую систему, например в файлы журналов, он будет сохранен на новом уровне поверх базового образа. Это уникально для каждого контейнера.
- Тома: к контейнерам могут быть подключены виртуальные диски, которые хранят данные непосредственно на диске вне системы хранения Docker.
- Привязать монтирование: контейнеры могут дополнительно обращаться к каталогам на хосте напрямую.
Все, кроме привязки, будет отображаться в выводе docker system df
. Если вы хотите просмотреть статистику для каждого контейнера, Docker предоставляет флаг для команды ps
, отображающий использование:
docker ps --size
Здесь это показывает размер на диске, а также виртуальный размер (включая общий базовый образ). Поскольку эти контейнеры не используют никакого хранилища за пределами их монтирования привязки, размер равен нулю байтов.
Отладка монтирования (привязки и тома)
Чтобы просмотреть использование монтирования как для монтирования с прямой привязкой, так и для управляемых томов, вам нужно будет получить их размер от операционной системы хоста. Если вы не знаете, где они находятся, вы можете запустить docker container ls
, чтобы получить идентификатор контейнера, а затем запустить docker inspect
, чтобы получить информацию о монтировании:
docker inspect a1c904020044 -f '{{json .Mounts}}' [{"Type":"bind","Source":"/home/daemon-data/921ff235-5075-4d64-b977-8d02cc3dacc9","Destination":"/home/container","Mode":"","RW":true,"Propagation":"rprivate"}]
Затем вы можете проверить общий размер с помощью du -sh
:
sudo du -sh /path/to/mount/
Обрезка контейнеров и томов
Docker никогда не удаляет контейнеры или тома (если вы не запускаете контейнеры с флагом --rm
), так как это может привести к потере ваших данных. Однако у вас могут быть резервные копии старых данных, которые необходимо удалить.
Как и в случае с изображениями, Docker предоставляет команду prune
для контейнеров и томов:
docker container prune docker volume prune
Отладка вручную
Если у вас есть прямой доступ к серверу, на котором работает Docker, вы можете открыть оболочку в контейнере:
sudo docker exec -it containerID /bin/bash
и запустите du -sh
для всего этого, что вернет все данные, включая размер образа, данные о монтировании привязки и данные в томах.
sudo du -sh /