Docker: Чистка мусора

Материал из КРАТКАЯ СПРАВОЧНАЯ DIGITAL-ORGY
Перейти к навигации Перейти к поиску

Руководство по удалению контейнеров и очистке мусора в Docker

Очистка Docker — это безопасная процедура для работающих сервисов, так как встроенные команды очистки (prune) по умолчанию не затрагивают запущенные контейнеры и связанные с ними ресурсы. Перед общей чисткой рекомендуется точечно удалить конкретные ненужные контейнеры.

Шаг 1. Точечное удаление ненужных контейнеров

Для начала необходимо узнать имена или ID контейнеров, которые вы хотите удалить, а затем остановить их и стереть.

1. Найдите имена или ID контейнеров Выведите список всех контейнеров (и запущенных, и остановленных), чтобы найти «жертв»:

docker ps -a

Обратите внимание на первый столбец CONTAINER ID (например, a1b2c3d4e5f6) или последний столбец NAMES (например, old_proxy_1).

2. Быстрое удаление (через force) Самый быстрый способ остановить и сразу удалить контейнер — использовать флаг -f (force). Можно перечислить сразу несколько через пробел:

docker rm -f имя_контейнера_1 имя_контейнера_2 id_контейнера_3

Альтернатива: Мягкая остановка Если в контейнерах работают сервисы, требующие корректного завершения с сохранением данных (например, базы данных), делайте это в два этапа:

docker stop имя_контейнера_1 имя_контейнера_2
docker rm имя_контейнера_1 имя_контейнера_2

Шаг 2. Оценка занимаемого места

Перед массовой очисткой полезно посмотреть, на что именно уходит дисковое пространство:

docker system df

Эта команда покажет сводку по контейнерам, образам, томам (volumes) и кэшу сборки, а также процент пространства, которое можно безопасно освободить (RECLAIMABLE).

Шаг 3. Безопасная комплексная очистка

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

docker system prune

Это самая популярная и безопасная команда для регулярного обслуживания. Она не трогает запущенные контейнеры, используемые ими образы и любые тома с данными.

Шаг 4. Точечная очистка ресурсов (Опционально)

Если вы не хотите использовать комплексную очистку, можно удалять ресурсы по отдельности:

  • Остановленные контейнеры: docker container prune
  • «Висячие» образы: docker image prune (удалит только те образы, которые потеряли связь с тегами. Добавьте флаг -a, чтобы удалить вообще все образы, не привязанные к существующим контейнерам).
  • Неиспользуемые сети: docker network prune

Шаг 5. Очистка томов и генеральная уборка (С осторожностью)

Тома (volumes) хранят персистентные данные контейнеров (например, файлы конфигураций или базы данных). По умолчанию ни одна из вышеперечисленных команд их не удаляет, чтобы защитить вас от потери информации.

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

docker volume prune

Важно: Если вы временно удалили основной контейнер (например, для обновления или пересоздания), но планировали сохранить его данные в томе, эта команда удалит этот том безвозвратно. Применяйте ее только тогда, когда точно знаете, что старые данные больше не нужны.

Генеральная уборка (Все и сразу) Если вам нужно освободить максимум места, и вы уверены, что все нужные контейнеры сейчас запущены, используйте команду с расширенными флагами:

docker system prune -a --volumes

Эта команда удалит:

  • Все остановленные контейнеры.
  • Все образы, не используемые запущенными контейнерами.
  • Все тома, не привязанные к контейнерам.
  • Все неиспользуемые сети.