ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Удаление контейнеров и очистка volumes без потери нужных данных

Автор: · Обновлено

Освобождение диска начинается с ответа «какой объект занимает место и кто им пользуется». Команда удаления контейнера и команда удаления тома решают разные задачи. После урока вы сможете очистить конкретный учебный проект и объяснить, почему запрос «удалить все volumes» требует проверки данных, а не одной случайно найденной команды.

Остановить, удалить и стереть данные

docker stop NAME просит процесс завершиться; контейнер остаётся в списке docker ps -a. docker rm NAME удаляет остановленный контейнер и его записываемый слой. Именованные тома при обычном удалении сохраняются. Опция rm -v удаляет связанные анонимные тома, но не именованные; это важное различие описано в справке rm.

Если нужно убрать один сервис, сначала посмотрите docker inspect NAME, затем остановите и удалите именно его. rm -f использует принудительное завершение и не заменяет штатный shutdown базы. Не объединяйте остановку всех контейнеров с обслуживанием одного проекта: соседняя база может принадлежать другой задаче.

Проверить конкретный том

docker system df -v
docker volume ls
docker ps -a --filter volume=yk-unused-demo

Создадим новый пустой объект с понятной меткой и удалим только его:

docker volume create --label lesson=cleanup yk-unused-demo
docker volume inspect yk-unused-demo
docker volume rm yk-unused-demo

Если имя уже занято, выберите новое; создание с существующим именем может вернуть прежний том. Ожидайте, что после удаления docker volume inspect yk-unused-demo сообщит об отсутствии. Сам факт отсутствия запущенного контейнера не означает ненужность данных: том может предназначаться для следующего запуска или восстановления.

Где проходят границы prune

docker volume prune в актуальном Engine по умолчанию удаляет неиспользуемые анонимные локальные тома. docker volume prune --all включает и неиспользуемые именованные. «Неиспользуемый» означает отсутствие ссылок от контейнеров, включая остановленные; это не проверка ценности содержимого. Опция --all требует API 1.42 или новее. Точное поведение prune.

Не запускайте глобальный prune в опыте. В рабочей системе сначала сформируйте инвентаризацию и перечень исключений, проверьте резервные копии, затем выберите явно разрешённые имена либо узкий фильтр метки. Принудительное -f всего лишь убирает подтверждение, но не делает выбор объектов точнее.

У docker system prune шире набор сущностей: остановленные контейнеры, неиспользуемые сети, часть образов и кеш сборки. Volumes туда не входят без отдельного параметра. С --volumes удаляются неиспользуемые анонимные тома; не следует трактовать это как эквивалент удаления всех named volumes. Общая очистка.

Compose: имя проекта важнее текущей папки

Обычный docker compose down удаляет контейнеры и сети проекта, оставляя тома для следующего запуска. docker compose down -v дополнительно удаляет объявленные именованные и присоединённые анонимные тома проекта. Ресурсы external Compose не удаляет. Перед действием проверьте docker compose ls, docker compose config и выбранные -p/-f: одно имя папки не гарантирует нужный проект.

Для приложения с базой нормальный цикл обновления — пересоздание контейнера с сохранённым томом. down -v предназначен для сознательного сброса данных, например одноразового тестового стенда. Он не является обязательной частью устранения ошибки соединения или обновления образа. Справка down.

Задание с проверяемым ответом

Составьте таблицу для трёх объектов: остановленный контейнер без mount, именованный том базы и анонимный том временного теста. Для каждого укажите, что исчезнет после rm, rm -v, down и down -v. Затем повторите сценарий только на собственных учебных данных. Убедитесь, что можете восстановить сохранённый файл до удаления резервной копии. Нужный результат — объяснимая очистка, а не минимальное число объектов в списке Docker.

Источники