Поиск по сайту:

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