Гид по технологиям

Очистка Docker: удаление неиспользуемых образов и томов

7 min read Docker Обновлено 18 Dec 2025
Очистка Docker: удаление неиспользуемых образов и томов
Очистка Docker: удаление неиспользуемых образов и томов

Иллюстрация Docker: синий контейнер и значок платформы

Docker не удаляет ресурсы по умолчанию. Используйте docker system prune и специализированные prune-команды, чтобы освободить диск и упростить работу с CLI. Для критичных данных проверяйте тома и используйте фильтры и плановую очистку.

Быстрые ссылки

  • Очистка ненужных ресурсов
  • Фильтры при очистке
  • Очистка отдельных типов ресурсов
  • Как не допустить накопления в будущем
  • Выводы и рекомендации

Коротко о проблеме

Docker упрощает упаковку приложений в контейнеры. Но при активной работе на машине быстро накапливаются остановленные контейнеры, старые образы, тома и сети. По умолчанию Docker ничего не удаляет сам — всё остаётся на диске до явной команды. Это ведёт к росту используемого пространства и усложнению поиска нужных ресурсов через CLI.

Важно: тома содержат постоянные данные. Удаление тома означает возможную потерю данных.

Что такое “висящие” ресурсы

Определение: висящий ресурс — объект Docker, который не связан с работающим контейнером. К таким относятся неиспользуемые образы, сети, тома и остановленные контейнеры. Для образов термин “висящий” часто означает, что у образа нет тегов и на него нет ссылок.

Краткое объяснение терминов:

  • Образ: шаблон, из которого создают контейнеры.
  • Контейнер: запущенный экземпляр образа.
  • Том: постоянный диск для контейнера.
  • Сеть: виртуальный мост и правила маршрутизации.

Быстрая очистка всех ненужных ресурсов

Docker предоставляет универсальную команду для быстрой уборки ненужных объектов. Команда удалит всё, что не используется запущенным контейнером.

docker system prune

По умолчанию команда запрашивает подтверждение. Добавьте флаг -f или –force, чтобы пропустить подтверждение:

docker system prune -f

По умолчанию тома не удаляются. Чтобы включить тома в операцию, используйте флаг –volumes:

docker system prune --volumes

Чтобы удалить не только висящие образы, но и все неиспользуемые образы, добавьте флаг -a:

docker system prune -a

Скриншот вывода команды docker system prune

Примечание: удаление томов без проверки может привести к потере важной информации. Всегда проверяйте, какие тома используются.

Использование фильтров для точечной очистки

Команда prune поддерживает фильтры. Фильтры дают контроль над тем, что именно будет удалено. Чаще всего применяют фильтры по времени и по меткам.

Поддерживаемые фильтры:

  • until — не удаляет ресурсы, созданные позже указанного времени. Форматы: Unix timestamp (например 1614890000) или строка времени (например 2021-03-04T20:30:00).
  • 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, созданные до 2021-03-04 20:30:00. Всё, что не совпадает с условиями, останется.

Совет: используйте метки для управления сроком жизни ресурсов в автоматизации и CI.

Очистка конкретных типов ресурсов

Если не нужно удалять всё сразу, применяйте более точечные prune-команды. Они поддерживают те же флаги –filter и –force.

Очистка контейнеров

Остановленные контейнеры быстро накапливаются. Для их удаления используйте:

docker container prune

Для удаления конкретного контейнера примените docker rm с ID контейнера. Если контейнер работает, добавьте –force:

docker rm 
docker rm --force 

Чтобы увидеть все контейнеры (включая остановленные), используйте:

docker ps -a

Очистка образов

По умолчанию docker image prune удаляет висящие (untagged) образы:

docker image prune

Для удаления всех неиспользуемых образов (включая помеченные), добавьте -a:

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

Важно: перед удалением тома убедитесь, что в нём нет ценных данных или что данные надежно сохранены в другом месте.

Как не допустить повторного накопления

Ниже — набор практик, которые помогают удерживать систему в чистоте и сокращают риск потери данных.

  • Используйте –rm при запуске одноразовых контейнеров:
docker run --rm my-image

Такой контейнер будет автоматически удалён после завершения команды.

  • Используйте –rm при локальных сборках образов, если вам не нужны промежуточные слои:
docker build --rm -t my-image:latest .
  • Добавляйте метки к ресурсам, чтобы пометить их владельцев, окружение и период хранения:
docker run --label project=website --label owner=alice my-image
  • Планируйте регулярную очистку через cron или системный задачник. Пример ежемесячного cron-задания, которое удаляет ресурсы старше 30 дней:
# /etc/cron.monthly/docker-prune
#!/bin/sh
# Удаляем ресурсы старше 30 дней
docker system prune --filter "until=$(date -d '30 days ago' --iso-8601=seconds)" --force --volumes
  • В CI/CD очищайте временные образа и контейнеры после билда. Включайте явную очистку в шаги pipeline.

Критерии приёмки

Перед выполнением массовой очистки проверьте следующее:

  • Тома с данными резервированы или привязаны к бэкап-процессу.
  • Критичные образы отмечены метками exclude или имеют понятную схему тегов.
  • План отката на случай непредвиденной потери данных.
  • Уведомления для команды об автоматических задачах очистки.

SOP: пошаговая инструкция для безопасной очистки

  1. Просмотрите текущие ресурсы:
docker ps -a
docker images -a
docker volume ls
docker network ls
  1. Пометьте ресурсы, которые нужно сохранить, метками owner/retain/backup.
  2. Удалите стоп-контейнеры, если они не нужны:
docker container prune --filter until=$(date -d '7 days ago' --iso-8601=seconds)
  1. Проверьте тома, затем удалите неиспользуемые:
docker volume ls --filter dangling=true
docker volume prune
  1. Для образов используйте фильтры по времени и меткам:
docker image prune -a --filter until=168h --filter label=retain!=true
  1. Проверьте журналы и мониторинг после очистки.
  2. Обновите документацию и уведомите команду.

Критерий успеха: освобождено место без потери критичных данных и без прерывания сервисов.

План отката и аварийный сценарий

Если обнаружили, что удалили нужный ресурс:

  • Если был удалён том с данными и нет бэкапа — восстановление невозможно. Это причина иметь резервные копии.
  • Если удалён образ, его можно заново скачать из реестра (Docker Hub, приватный registry) при условии, что он там есть:
docker pull my-registry.example.com/my-image:tag
  • Для быстрой проверки до очистки используйте dry-run-подобные подходы: метьте объекты и применяйте фильтры сначала в режиме отчёта.

Частые ошибки и как их избежать

  • Ошибка: запуск docker system prune –volumes без проверки томов. Последствие: потеря данных. Решение: сначала перечислите тома и убедитесь в их ненужности.

  • Ошибка: удаление образов, которые требуются остановленным контейнерам. Решение: проверьте docker ps -a и зависимые контейнеры.

  • Ошибка: доверять только возрасту ресурса. Решение: комбинируйте фильтры времени и метки.

Шаблон короткого скрипта для ежедневной проверки

#!/bin/bash
# Проверка использованного места Docker и уведомление при превышении порога
THRESHOLD=80
USAGE=$(df -h /var/lib/docker | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$USAGE" -ge "$THRESHOLD" ]; then
  echo "Disk usage for /var/lib/docker is ${USAGE}% - consider pruning" | mail -s "Docker disk alert" devops@example.com
fi

Чек-листы по ролям

Для разработчика:

  • Запускать одноразовые контейнеры с –rm.
  • Метить образы и контейнеры в CI.
  • Удалять временные локальные образы после тестов.

Для оператора:

  • Планировать регулярную очистку и бэкапы томов.
  • Контролировать использование диска и настраивать оповещения.
  • Проводить dry-run и проверять список удаляемых объектов.

Тесты и критерии приёмки после очистки

Тестовые шаги:

  1. Запустить систему мониторинга и снять снимок использования диска.
  2. Выполнить запланированную очистку в тестовом окружении.
  3. Убедиться, что критичные контейнеры работают.
  4. Проверить доступность сервисов и целостность данных.

Критерии приёмки:

  • Нет падений сервисов, которые не планировались.
  • Данные в томах, помеченных как важные, доступны.
  • Освободилось место, соответствующее ожиданиям оператора.

Советы по безопасности и соответствию

  • Ограничивайте доступ к docker daemon через unix-сокет и управление правами sudo.
  • Бэкапьте тома с пользовательскими данными перед массовой очисткой.
  • Если в томах хранятся персональные данные, убедитесь в соответствии с юридическими требованиями (например, политикой хранения данных).

Совместимость и миграция

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

Ментальные модели и когда не стоит очищать

Модель “не хранить мусор“: если ресурс не нужен более 30 дней и не помечен как retain, его можно удалить. Но для томов применяйте модель “данных нельзя восстановить” — проверяйте резервные копии.

Когда не стоит очищать:

  • В production, если вы не уверены, что данные бэкапятся.
  • Если образ служит базой для ручных отладок и требуется срочный доступ.

Короткая шпаргалка команд

  • docker system prune — удалить все неиспользуемые ресурсы (без томов).
  • docker system prune –volumes — то же, включая тома.
  • docker image prune -a — удалить все неиспользуемые образы.
  • docker container prune — удалить остановленные контейнеры.
  • docker volume prune — удалить неиспользуемые тома.
  • docker network prune — удалить неиспользуемые сети.

Итог

Регулярная очистка Docker помогает контролировать использование диска и упрощает работу с CLI. Всегда проверяйте тома и применяйте фильтры и метки для безопасной автоматизации. Планируйте бэкапы и включайте шаги очистки в процессы CI/CD.

Important: выполняйте массовые удаления только после проверки и уведомления команды.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

CRT‑шейдеры RetroArch: настройка и советы
Эмуляция

CRT‑шейдеры RetroArch: настройка и советы

Как снять защиту с Excel: лист и книга
Office

Как снять защиту с Excel: лист и книга

Голосовые заметки на iPhone и iPad — запись и отправка
Руководство

Голосовые заметки на iPhone и iPad — запись и отправка

Secure Boot серый в BIOS — как исправить
Windows

Secure Boot серый в BIOS — как исправить

Как сделать фонарик телефона ярче
Мобильные советы

Как сделать фонарик телефона ярче

Ошибка «Параметр неверен» при копировании файлов
Windows

Ошибка «Параметр неверен» при копировании файлов