Docker — это мощный инструмент для разработки и развертывания приложений, но со временем он может превратиться в цифрового Плюшкина. Неиспользуемые образы, остановленные контейнеры и промежуточные слои пожирают гигабайты дискового пространства. В этом руководстве мы разберем не только базовые команды очистки, но и продвинутые техники, которые помогут поддерживать вашу Docker-систему в идеальном порядке.
Почему очистка Docker так важна?
Представьте, что каждый эксперимент с новым образом, каждый тестовый контейнер оставляет после себя цифровой след. За месяц активной работы можно незаметно потерять 20-50 ГБ дискового пространства. Но проблема не только в диске — старые образы могут содержать уязвимости, а забытые контейнеры создают путаницу в управлении.
Перед массовым удалением всегда проверяйте, какие контейнеры и образы у вас есть. Команда docker ps -a покажет все контейнеры, а docker images -a — все образы.
Удаление контейнеров: от простого к сложному
Базовые операции с контейнерами
Контейнеры — это работающие экземпляры образов. Удалять их можно по-разному:
- Удаление одного остановленного контейнера:
docker rm [CONTAINER_ID или NAME] - Принудительное удаление работающего контейнера:
docker rm -f [CONTAINER_ID] - Удаление всех остановленных контейнеров:
docker container prune
Продвинутая очистка контейнеров
Для точечной работы с контейнерами используйте фильтры:
- Удаление контейнеров старше 24 часов:
docker container prune --filter "until=24h" - Удаление контейнеров с определенной меткой:
docker container prune --filter "label=environment=test" - Комбинация фильтров для точного таргетирования
Работа с образами: освобождаем гигабайты
Удаление отдельных образов
Образы — это шаблоны для контейнеров. Они могут занимать значительно больше места:
- Удаление по ID или тегу:
docker rmi [IMAGE_ID]илиdocker rmi nginx:latest - Принудительное удаление:
docker rmi -f [IMAGE_ID](используйте осторожно!) - Удаление «висячих» образов:
docker image prune
«Висячие» (dangling) образы — это слои, которые не имеют отношения к какому-либо образу. Они часто образуются при сборке новых образов и безопасны для удаления.
Массовая очистка образов
Когда нужно освободить место кардинально:
- Удаление всех неиспользуемых образов:
docker image prune -a - Удаление с фильтрацией:
docker image prune -a --filter "until=2024-01-01" - Автоматическое подтверждение:
docker image prune -a -f
Комплексная очистка системы Docker
Docker предоставляет одну мощную команду для полной очистки:
docker system prune -a
Эта команда удалит:
- Все остановленные контейнеры
- Все сети, не используемые хотя бы одним контейнером
- Все «висячие» образы
- Все «висячие» сборки кэша
Добавьте флаг -f для автоматического подтверждения, но будьте осторожны — эта операция необратима!
Автоматизация очистки: скрипты и планировщики
Чтобы не делать очистку вручную, можно настроить автоматизацию:
- Cron-задания для регулярной очистки
- Docker-скрипты с фильтрацией по проектам
- Интеграция в CI/CD пайплайны для очистки после сборок
Что удалять, а что оставить: стратегия
Не все нужно удалять немедленно. Разработайте свою стратегию:
- Тестовые контейнеры — удалять сразу после использования
- Образы базовых систем (Ubuntu, Alpine) — можно хранить дольше
- Производственные образы — хранить версии, используемые в работе
- Сетевые настройки — удалять только если уверены
FAQ: Часто задаваемые вопросы
Как удалить ВСЕ контейнеры, включая работающие?
docker rm -f $(docker ps -aq) — но будьте предельно осторожны с этой командой!
Как посмотреть, сколько места занимает Docker?
Используйте docker system df для детального отчета о использовании диска.
Можно ли восстановить удаленный контейнер?
Нет, удаление контейнера необратимо. Все данные внутри контейнера будут потеряны, если не были сохранены в volumes.
Как удалить образ, который используется контейнером?
Сначала удалите контейнеры, использующие этот образ, или используйте docker rmi -f для принудительного удаления.
Что безопаснее удалять в первую очередь?
Начните с «висячих» образов (docker image prune), затем остановленные контейнеры, потом неиспользуемые образы.
Как избежать накопления мусора в Docker?
Используйте теги для образов, удаляйте тестовые контейнеры сразу, настройте автоматическую очистку и регулярно проверяйте docker system df.