Как правильно очищать ресурсы Docker
Кратко
Docker помогает упаковывать приложения в контейнеры и запускать их везде. Со временем на машине накапливаются ненужные образы, контейнеры, тома и сети. В статье показаны безопасные команды очистки, фильтры, сценарии автоматизации и контрольные списки для разных ролей.

Изображение: иллюстрация логотипа Docker и контейнеризации окружения разработки.
Быстрые ссылки
- Очистка висящих ресурсов
- Использование фильтров при очистке
- Очистка отдельных типов ресурсов
- Как предотвратить накопление ресурсов
- Практическое руководство и контрольные списки
Введение
Docker позволяет быстро упаковывать приложения в контейнеры. Но он не удаляет ресурсы автоматически. Образы, остановленные контейнеры, неиспользуемые тома и сети остаются на диске, если вы явно не удаляете их. Это приводит к большим затратам дискового пространства и усложняет работу с CLI.
Определение терминов
- Контейнер: изолированный процесс, созданный из образа.
- Образ: шаблон файловой системы и конфигурации, из которого создаются контейнеры.
- Тома: механизм хранения постоянных данных вне контейнера.
- Висящий ресурс: ресурс, не связанный с запущенным контейнером, например untagged образ.
Важно
При удалении томов вы можете потерять данные навсегда. Всегда проверяйте, что том реально не используется и что у вас есть резервная копия нужных данных.
Очистка висящих ресурсов
Висящий ресурс — объект Docker, который сейчас не связан с запущенным контейнером. Это могут быть образы без тегов, остановленные контейнеры, неиспользуемые сети и тома.
Docker предоставляет команду общего масштаба для быстрой уборки:
docker system pruneКоманда покажет список типов ресурсов, которые будут удалены, и запросит подтверждение. Подтвердите вводом y и Enter. Чтобы пропустить подтверждение, используйте флаг -f или –force.

Изображение: пример вывода команды docker system prune в терминале.
По умолчанию тома не удаляются. Чтобы включить тома в очистку, добавьте флаг –volumes:
docker system prune --volumesФлаг -a или –all заставит Docker удалять все неиспользуемые образы, а не только висящие. Это удалит все образы, которые не требуются хотя бы одному запущенному контейнеру.
Ключевые замечания
- Всегда проверяйте список, который показывает команда, прежде чем подтверждать удаление.
- Используйте –volumes с осторожностью.
- –all очищает больше данных, чем стандартный вызов.
Использование фильтров при очистке
Фильтры дают контроль над тем, что именно будет удалено. С prune доступны фильтры until и label.
- until — позволяет удалять ресурсы, созданные до указанного времени. Поддерживаются варианты формата: unix timestamp в секундах, ISO-подобная строка даты и времени.
- label — ограничивает удаление ресурсами с определённой меткой. Поддерживается несколько форматов: label=key=value, label!=key=value, label=key, label!=key.
Пример использования:
docker system prune --filter until=2021-03-04T20:30:00 --filter label=foo=barКоманда удалит ресурсы с меткой foo=bar, созданные до 20:30 4 марта 2021 года. Всё, что не соответствует фильтру, останется.
Когда фильтры полезны
- Хранение свежих артефактов: удалять только старые ресурсы.
- Изоляция проектов: удалять только ресурсы с конкретной меткой.
Очистка отдельных типов ресурсов
Иногда нужна более точечная очистка. Docker предоставляет отдельные команды prune для контейнеров, образов, сетей и томов. Флаги –force и –filter применимы и к ним.
Контейнеры
Остановленные контейнеры быстро накапливаются. Для их удаления:
docker container pruneЧтобы увидеть остановленные контейнеры, выполните:
docker ps -aДля удаления отдельного контейнера используйте docker rm с ID контейнера. Для удаления запущенного контейнера добавьте –force.
Образы
Удалить висящие образы:
docker image pruneУдалить все неиспользуемые образы:
docker image prune -aУдалить конкретный образ:
docker rmi wordpress:latestЕсли у образа несколько тегов, docker rmi удалит только указанный тег. Сам образ будет удалён, когда не останется ни одного тега и он не будет нужен запущенным контейнерам.
Сети
Сети не удаляются автоматически. Для удаления неиспользуемых сетей:
docker network pruneУдаление отдельных сетей:
docker network rm my-networkТома
Docker никогда не удаляет тома автоматически с точки зрения безопасности данных. Чтобы удалить неиспользуемые тома:
docker volume pruneУдаление отдельного тома:
docker volume rm my-volumeВажно
Прежде чем удалять тома, убедитесь, что в них нет нужных данных. Рассмотрите создание резервной копии тома через docker run –rm -v my-volume:/data alpine tar cf /backup.tar /data или аналогичный механизм.
Как предотвратить накопление ресурсов
Несколько простых практик помогут держать систему в порядке:
- Используйте –rm при docker run для одноразовых контейнеров.
- Используйте –rm при docker build (для временных промежуточных слоёв) если это поддерживается вашей командой сборки.
- Тегируйте образы явно и последовательно, чтобы отличать актуальные версии от старых.
- Добавляйте метки к ресурсам, чтобы проще выбирать их при prune.
- Встраивайте очистку в CI/CD пайплайны для изолированных билд-агентов.
Пример команды сборки с –rm:
docker build --rm -t my-app:latest .Пример одноразового запуска:
docker run --rm hello-worldАвтоматизация
Можно создать cron задачу для периодической очистки. Пример для раз в месяц, с сохранением ресурсов младше 30 дней:
0 3 1 * * docker system prune -a --filter until=720h --volumes -fЗдесь until=720h означает 720 часов, то есть 30 дней. Перед применением на продакшне протестируйте команду вручную.
Практическое руководство и контрольные списки
Роли и их задачи
- Разработчик
- Удалять локальные временные контейнеры командой docker run –rm
- Чистить ненужные образы после больших сборок: docker image prune -a
- Инженер CI
- Встраивать очистку в pipeline для агентов сборки
- Использовать метки для изоляции артефактов
- Системный администратор
- Планировать регулярную массовую очистку на хостах
- Проверять тома и бэкапы перед массовым удалением
Контрольный список перед очисткой
- Есть ли запущенные контейнеры, которые используют образ или том?
- Есть ли на томах данные, которые нужно сохранить?
- Правильно ли настроены фильтры и метки?
- Проведено ли тестовое удаление в тестовом окружении?
Шаблон SOP для безопасной очистки
- Проинформировать команду о запланированной очистке.
- Запустить dry-run проверку: перечислить ресурсы, которые будут затронуты.
- Сделать бэкапы критичных томов.
- Запустить команду с –filter и без –volumes, проверить результат.
- При успехе запустить окончательную команду с нужными флагами и метками.
- Проверить состояние системы и логи.
Пример dry-run: перечислить неиспользуемые образы и тома перед удалением
docker images --filter dangling=true
docker volume ls -qf dangling=trueТаблица команд для быстрого доступа
- Очистить всё висящее: docker system prune
- Очистить всё включая тома: docker system prune –volumes
- Очистить все неиспользуемые образы: docker image prune -a
- Очистить остановленные контейнеры: docker container prune
- Очистить тома: docker volume prune
- Удалить конкретный ресурс: docker rm, docker rmi, docker volume rm
Решение проблем и откат
Если вы случайно удалили образ, но у вас есть контейнер, который его использует, восстановить образ можно, запустив контейнер с сохранением слоёв или загрузив образ из регистра.
Откат при удалении тома
- Если том был удалён и у вас нет бэкапа, восстановление невозможно.
- Если у вас есть snapshot диска хоста, можно попытаться восстановить файлы тома с уровня хоста.
Инцидентный план
- Остановить связанные контейнеры.
- Проанализировать логи и командную историю.
- Восстановить данные из резервной копии или snapshot.
- Пересмотреть SOP и добавить дополнительные проверки.
Ментальные модели и эвристики
- Правило одного проекта за раз: помечайте ресурсы метками проекта и чистите по меткам.
- Правило 30 дней: оставляйте ресурсы моложе 30 дней по умолчанию, старые удаляйте.
- Минимизация поверхностей риска: избегайте массового удаления томов без бэкапа.
Факт-бокс: ключевые моменты
- Docker не удаляет ничего автоматически. Решения по очистке принимает пользователь.
- Тома хранят постоянные данные и требуют внимания.
- Фильтр until позволяет задать временной порог для автоматической очистки.
Безопасность и соответствие
Security
- Не храните секреты в образах. При удалении образов вы снижаете риск утечки старых артефактов.
- Ограничьте права на выполнение mass-prune операций только для доверенных аккаунтов.
Конфиденциальность
- При удалении томов проверьте, не содержат ли они персональные данные. При необходимости обеспечьте соответствие требованиям защиты данных.
Примеры, когда очистка не поможет
- Накопление логов внутри контейнера не решается удалением образов. Логи нужно ротировать.
- Утечки памяти в запущенных контейнерах не убираются prune командами.
Альтернативные подходы
- Использовать политики retention на уровне реестра образов.
- Применять инструментальные решения для управления дисковым пространством, например мониторинг и алерты по использованию диска.
Дерево принятия решения
flowchart TD
A[Есть ли запущенные контейнеры?] -->|Да| B[Оставить сейчас]
A -->|Нет| C[Определить тип ресурса]
C --> D{Тип}
D -->|Контейнеры| E[docker container prune]
D -->|Образы| F[docker image prune или docker image prune -a]
D -->|Тома| G[Проверить бэкап -> docker volume prune]
D -->|Сети| H[docker network prune]
E --> I[Проверить метки и until]
F --> I
G --> I
H --> I
I --> J[Выполнить команду с --filter и --force если безопасно]Частые вопросы
Как безопасно автоматизировать очистку на продакшн хостах
Настройте расписание в cron, используйте фильтр until чтобы не трогать недавно созданные ресурсы и включайте только те типы ресурсов, которые вы уверенно можете удалить. Всегда уведомляйте команду.
Можно ли восстановить удалённый том
Если нет бэкапа или snapshot, восстановление почти невозможно. Поэтому делайте бэкапы важных томов заранее.
Что делает docker system prune -a
Эта команда удаляет все неиспользуемые объекты, включая невисящие, но не удаляет тома, если не передан –volumes.
Резюме
- Используйте docker system prune для быстрой уборки, но проверяйте список перед удалением.
- Применяйте фильтры label и until для контролируемой очистки.
- Не удаляйте тома без резервной копии.
- Встраивайте очистку в процессы CI/CD и планируйте регулярные задания.
Ключевые шаги
- Проверить ресурсы: docker ps -a, docker images, docker volume ls
- Запустить dry-run и бэкапнуть тома
- Выполнить prune с нужными флагами
- Мониторить диск и корректировать политику очистки
Важно
Регулярная и контролируемая очистка экономит пространство и ускоряет работу с Docker CLI. Настройте процессы, которые минимизируют риск случайной потери данных.
Похожие материалы
Как устроить идеальную вечеринку для просмотра ТВ
Как распаковать несколько RAR‑файлов сразу
Приватный просмотр в Linux: как и зачем
Windows 11 не видит iPod — способы исправить
PS5: как настроить игровые пресеты