Проверка и очистка использования диска Docker

Быстрые ссылки
- Быстрая проверка
- Очистка образов Docker
- Проверка использования контейнеров в работе
- Отладка точек монтирования (bind и volume)
- Очистка (prune) контейнеров и томов
- Ручная отладка внутри контейнера
О чём эта инструкция
Коротко: руководство помогает быстро найти, что именно занимает место на диске в окружении с Docker, и как это безопасно освободить. Подходит для администраторов, DevOps и разработчиков, которым нужно управлять дисковым пространством на хосте с контейнерами.
Важно: никогда не удаляйте контейнеры/тома, если они содержат критичные данные, без резервного копирования.
Быстрая проверка
Если нужно получить общий объём, который использует Docker, есть встроенная команда:
docker system dfЭта команда показывает:
- объём, занимаемый образами (images);
- объём, занимаемый контейнерами (containers) с учётом их изменений;
- объём, занимаемый томами (volumes);
- объём, занимаемый билд-кешем (build cache).
Для проверки конкретной директории на хосте используйте стандартную команду du:
duПример получения размера каталога Docker на Linux:
sudo du -sh /var/lib/docker/Пояснение: docker system df не отображает данные, находящиеся в bind-монтах напрямую на хосте. Если контейнеры пишут в директории хоста через bind, их размер будет виден только через du на соответствующей директории.
Очистка образов Docker
Образы отличаются от работающих контейнеров: образ — это набор файлов, служащий основой для запуска контейнера. Они часто занимают много места, так как включают базовую ОС и зависимости.
Посмотреть все образы:
docker image ls
Советы:
- Не удаляйте образы, которые используются запущенными контейнерами, если вы не уверены.
- Старые и неиспользуемые теги можно удалять: образы будут скачаны снова при необходимости.
Удалить все неиспользуемые образы:
docker image prune -aУдалить конкретный образ по ID:
docker image rm 3a8d8f76e7f8fКогда использовать: регулярно удаляйте старые образы на CI/CD-агентах и промежуточные образы после сборки.
Проверка использования запущенных контейнеров
Контейнеры могут занимать место несколькими способами:
- подлежащий образ (shared image): общая часть, переиспользуется;
- слой изменений контейнера: если контейнер пишет файлы в свою файловую систему (например, логи), это уникально для контейнера;
- тома (volumes): данные хранятся отдельно и не относятся к UnionFS контейнера;
- bind‑маунты: директории хоста, доступные контейнеру напрямую.
Команда, показывающая размер для каждого контейнера:
docker ps --size
Пояснение по колонкам:
- SIZE: объём, занятный изменениями контейнера (включает уникальные слои);
- VIRTUAL SIZE: включая общий образ и слои — показывает «виртуальный» объём.
Если контейнеры используют только bind‑маунты на хосте, то в SIZE может быть 0 B — потому что данные хранятся вне Docker storage.
Отладка точек монтирования (bind и volumes)
Для определения, где именно находятся тома или bind‑маунты контейнера, используйте docker inspect и смотрите поле Mounts.
Получить информацию о монтировании конкретного контейнера:
docker container lsЗатем для выбранного ID:
docker inspect a1c904020044 -f '{{json .Mounts}}'Пример вывода (JSON):
[{"Type":"bind","Source":"/home/daemon-data/921ff235-5075-4d64-b977-8d02cc3dacc9","Destination":"/home/container","Mode":"","RW":true,"Propagation":"rprivate"}]После того как вы узнали путь (Source), проверьте размер уже на хосте:
sudo du -sh /path/to/mount/Полезно: если том — это docker-managed volume, его физическое расположение обычно внутри /var/lib/docker/volumes/NAME/_data.
Очистка (prune) контейнеров и томов
Docker по умолчанию не удаляет контейнеры и тома автоматически (за исключением контейнеров с флагом –rm). Чтобы убрать неиспользуемые объекты, используйте команды prune:
docker container prunedocker volume pruneЭти команды запросят подтверждение перед удалением. Для автоматизации можно добавить флаг -f.
Важное замечание: prune удаляет только неиспользуемые объекты. Если том всё ещё подключён к контейнеру, он не будет удалён.
Ручная отладка внутри контейнера
Если у вас есть доступ к хосту, вы можете войти в контейнер и сравнить размеры внутри и на хосте:
Открыть оболочку контейнера:
sudo docker exec -it containerID /bin/bashВнутри контейнера выполнить:
sudo du -sh /Этот du покажет совокупный размер данных, видимых внутри контейнера (включая слои и смонтированные точки). Для сравнения с хостом используйте du на тех же путях, которые были получены через docker inspect.
Методология быстрого расследования (шаги)
- Запустите docker system df для быстрого обзора.
- Посмотрите docker ps –size, чтобы увидеть контейнеры с изменениями.
- Для подозрительных контейнеров выполните docker inspect и найдите Mounts.
- На хосте проверьте du -sh для каждого bind/volume.
- Если нужно освободить место — удалите ненужные образы и выполните docker image prune -a и docker volume prune.
- Перед удалением томов убедитесь в наличии резервных копий.
Чек-листы по ролям
DevOps / SRE:
- Выполнить docker system df; сохранить вывод в лог.
- Проверить старые образы: docker image ls и image prune -a при необходимости.
- Проверить тома: docker volume ls и docker volume prune.
- Настроить регулярный процесс очистки на CI/CD агентах.
Разработчик:
- Убедиться, что dev-контейнеры не оставляют большие логи.
- Использовать bind mounts для данных, которые не должны храниться в образе.
- Очищать локальные образы после тестов.
Системный админ:
- Мониторить заполнение /var/lib/docker и корневого раздела.
- Настроить алерты на свободное место.
- Понять, какие тома содержат важные данные и обеспечить бэкап.
Решающее дерево (как выбрать действие)
flowchart TD
A[Высокая загрузка диска?] -->|Да| B[Проверить docker system df]
A -->|Нет| Z[Наблюдать]
B --> C{Что занимает?}
C -->|Образы| D[Посмотреть docker image ls]
C -->|Контейнеры/слои| E[Посмотреть docker ps --size]
C -->|Тома/Bind| F[docker inspect -> du на хосте]
D --> G[Удалить старые образы или image prune -a]
E --> H[Inspect контейнеров, убрать ненужные]
F --> I[Очистить тома или освободить место в bind директориях]
G --> End[Проверка и мониторинг]
H --> End
I --> EndКритерии приёмки
- Выяснена основная причина использования диска (образ/контейнер/том/bind).
- Освобождено пространство без потери нужных данных.
- Выполнено резервное копирование/экспорт критичных томов перед удалением.
- Настроен мониторинг/процедура для предотвращения повторения.
Частые ошибки и когда этот подход не сработает
- Если данные находятся на удалённом NAS, du на локальном хосте покажет только точку монтирования, но причину может скрывать сам NAS — проверяйте сторону хранения.
- Принудительное удаление томов может вызвать потерю данных приложений. Всегда убеждайтесь, что том не используется.
- На системах с нестандартной директорией Docker (не /var/lib/docker) команды du следует выполнять для реального пути хранения.
Сводка
- docker system df — ваш быстрый обзор использования диска Docker.
- du на хосте показывает фактический размер bind и volume путей.
- docker image prune -a и docker volume prune безопасно удаляют неиспользуемые артефакты.
- Всегда делайте бэкапы критичных томов и настраивайте мониторинг свободного места.
Важно: используйте описанные команды по порядку и проверяйте, что вы удаляете — это позволит избежать потери данных.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone