Очистка Docker-образов и освобождение места

Быстрые ссылки
- Docker Images vs. Docker Containers
- Pruning Images
Образы Docker vs контейнеры
Образы (images) — это статические, read-only файлы, созданные из Dockerfile и обычно доступные в реестре (Docker Hub, частный реестр). Контейнеры создаются из образов и запускают процессы; у них есть собственная файловая система и подключённые тома (volumes). При остановке контейнера данные, не сохранённые в volume, удаляются вместе с контейнером.
Важно: образы — это слоистые артефакты. При загрузке новой версии Docker сохраняет только отличия (дельты), но старые теги/версии всё ещё отображаются локально, пока вы их не удалите.
Когда нужно чистить образы
- Дисковое пространство заканчивается на сервере CI/CD или разработческой машине.
- Накопилось много старых тегированных образов, которых никто не использует.
- Переход на новый механизм сборки (например BuildKit) или смена реестра.
Когда не стоит: если у вас медленное/ограниченное соединение с реестром и регулярная повторная загрузка образов не приемлема.
Важно: удаление образа не удаляет тома. Если нужно освободить место, проверьте также volumes и build cache.
Просмотр образов
Чтобы увидеть все локальные образы:
docker image ls
Несмотря на видимость множества тегов, фактическое израсходованное место хранится инкрементально — общие слои разделяются между образами.
Удаление образа вручную
Если вы точно знаете ID образа:
docker image rm 3a8d8f76e7f8fЭто безопасно при условии, что образ не используется активными контейнерами. В противном случае Docker вернёт ошибку и не позволит удалить образ.
Безопасная массовая очистка: prune
Рекомендуемый способ — использовать встроенный garbage collection:
docker image prune -a- Без флага
-aкоманда удалит только dangling images (образы без тегов). - С
-aостанутся только образы, на которые есть активные ссылки (используемые контейнерами) или явно помеченные для сохранения.
Команда покажет объём освобождённого пространства. Для проверки до/после используйте:
sudo du -sh /var/lib/docker/Локальные пути по ОС (пример):
- Linux: /var/lib/docker/
- Windows Desktop: C:\ProgramData\DockerDesktop
- macOS (Docker Desktop): ~/Library/Containers/com.docker.docker/Data/vms/0/
Локализация путей: на Windows обратите внимание на обратные слэши (\).
Дополнительные полезные команды
- Удаление всех неиспользуемых ресурсов (контейнеры, сети, образы, кэш):
docker system prune --all --volumes- Очистка builder cache:
docker builder prune- Просмотр размера занимаемого каждым объектом:
docker system dfМини‑методология: безопасный рабочий процесс очистки
- Оцените текущее использование:
docker system dfиdu -sh. - Найдите активно используемые образы:
docker ps -a --format '{{.Image}}' | sort | uniq. - Снимите резервную копию важных образов в частный реестр (если требуется).
- Запустите
docker image prune -aв среде разработки/локально. - Проверяйте журналы запуска контейнеров и CI на предмет ошибок после очистки.
- Если что-то пошло не так, восстановите образ из реестра и перезапустите контейнеры.
Роль‑ориентированные чек‑листы
Разработчик:
- Убедиться, что локальные изменения сохранены в репозитории.
- Перед очисткой заново собрать локально критичные образы.
Системный администратор / DevOps:
- Проверить политики ретенции в реестре.
- Сделать snapshot диска перед массовой очисткой на проде.
- Выполнить очистку в maintenance window.
CI/CD инженер:
- Настроить автоматическую очистку build cache и старых артефактов.
- Ограничить число сохраняемых успешных артефактов.
Критерии приёмки
- Удалены неиспользуемые образы без влияния на работающие контейнеры.
- Освобожденное место проверено и задокументировано.
- Восстановление образов возможно из реестра в течение заданного RTO.
Когда очистка может не помочь (контрпримеры)
- Большая часть занимаемого места — это Docker volumes с данными баз данных.
docker image pruneне решит проблему. - На машинах с дефектным файловым хранилищем пространство может оставаться занятым из‑за незавершённых операций.
- Если образы хранятся в другом каталоге (переопределённый daemon.json), надо чистить именно тот путь.
Альтернативные подходы
- Точный таргетинг: удалять по тегам/ретагам вместо
-a. - Использовать cron + скрипт, который логирует и отправляет отчёт о том, что удалено.
- В проде — использовать ретенцию в приватном реестре, а не локальную очистку.
План отката / инцидентный рунбук
- Если после prune упала сборка — проверить
docker system dfи логи. - Восстановить образ из реестра:
docker pull my.registry/repo:tag. - Перезапустить сервис/контейнер:
docker-compose up -dилиdocker run. - Если образ недоступен, восстановить диск из снапшота.
Короткий справочник (cheat sheet)
- Просмотр:
docker image ls - Удалить один образ:
docker image rm - Пробрить неиспользуемые:
docker image prune -a - Очистить всё:
docker system prune --all --volumes - Размеры:
docker system df
Безопасность и конфиденциальность
Изображения могут содержать секреты (ключи, токены) в слоях — проверяйте и удаляйте такие образы. Перед массовой очисткой убедитесь, что никакие критичные образы не единственные источники правды (должен быть реестр как backup).
Тесты и приёмочные критерии
- Запуск
docker image prune -aв тестовом окружении освобождает место и не ломает запуск контейнеров. - После очистки CI‑пайплайн успешно вытягивает образы из реестра и завершает сборку.
Короткое резюме
Очищайте Docker-образы регулярно и по плану: используйте docker image prune -a для автоматической очистки неиспользуемых образов, следите за томами и build cache отдельно, документируйте операции и имейте стратегию восстановления.
Похожие материалы
Удаление дубликатов файлов на Mac — Finder и приложения
Установка Windows 11 на неподдерживаемые ПК
Устранение ошибки Epson 1131: полное руководство
Отключить Bluetooth в Arch Linux быстро и безопасно
Windows netstat: прослушиваемые порты