Использование Docker Compose Down с расширенными параметрами
Базовая команда docker-compose down полезна, но Docker Compose предоставляет дополнительные параметры, чтобы дать вам больше контроля над тем, какие ресурсы удаляются. На этом шаге мы рассмотрим эти параметры.
Удаление томов
Как мы наблюдали на предыдущем шаге, docker-compose down по умолчанию не удаляет тома. Это функция безопасности для предотвращения случайной потери данных. Однако бывают случаи, когда вы хотите удалить и тома, например, при полной очистке или когда вы хотите сбросить данные вашего приложения.
Чтобы удалить тома вместе с контейнерами и сетями, используйте флаг --volumes:
docker-compose down --volumes
Давайте попробуем:
cd ~/project/docker-compose-demo
docker-compose down --volumes
Вы должны увидеть вывод, аналогичный:
Stopping docker-compose-demo_web_1 ... done
Stopping docker-compose-demo_db_1 ... done
Removing docker-compose-demo_web_1 ... done
Removing docker-compose-demo_db_1 ... done
Removing network docker-compose-demo_default
Removing volume docker-compose-demo_web_data
Removing volume docker-compose-demo_db_data
Обратите внимание, что на этот раз тома также удаляются.
Давайте проверим, были ли удалены тома:
docker volume ls | grep docker-compose-demo
Вы не должны увидеть никакого вывода, подтверждающего, что тома были удалены.
Удаление образов
Еще один полезный параметр — удаление образов при выключении вашей среды Docker Compose. Это можно сделать с помощью флага --rmi, который принимает разные значения:
--rmi all: Удалить все образы, используемые любой службой
--rmi local: Удалить только образы, у которых нет пользовательского тега
Давайте снова запустим наши службы, а затем используем флаг --rmi:
docker-compose up -d
Дождитесь запуска служб, затем выключите их с помощью флага --rmi:
docker-compose down --rmi local
Вы должны увидеть вывод, аналогичный:
Stopping docker-compose-demo_web_1 ... done
Stopping docker-compose-demo_db_1 ... done
Removing docker-compose-demo_web_1 ... done
Removing docker-compose-demo_db_1 ... done
Removing network docker-compose-demo_default
Removing image redis:latest
Removing image nginx:latest
На этот раз образы также удаляются.
Удаление контейнеров-сирот
Иногда у вас могут быть контейнеры, которые были созданы Docker Compose, но больше не определены в вашем текущем файле docker-compose.yml. Они называются "контейнерами-сиротами".
Чтобы продемонстрировать это, давайте изменим наш файл Docker Compose, чтобы удалить службу db:
nano docker-compose.yml
Отредактируйте файл, чтобы удалить службу db и ее том:
version: "3"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- web_data:/usr/share/nginx/html
volumes:
web_data:
Сохраните и выйдите из редактора (Ctrl+O, Enter, Ctrl+X).
Теперь давайте снова запустим наши службы с обновленным файлом:
docker-compose up -d
Если у нас был предыдущий контейнер, работающий для службы db, который не был правильно остановлен, он теперь будет считаться сиротой. Мы можем удалить таких сирот, используя флаг --remove-orphans:
docker-compose down --remove-orphans
Это гарантирует, что любые контейнеры, которые были созданы предыдущей версией вашего файла Docker Compose, но больше не определены, также будут удалены.
Комбинирование параметров
Вы также можете комбинировать эти параметры для полной очистки:
docker-compose down --volumes --rmi all --remove-orphans
Эта команда:
- Остановит и удалит все контейнеры
- Удалит все именованные тома
- Удалит все образы, используемые любой службой
- Удалит любые контейнеры-сироты
Это особенно полезно, когда вы хотите полностью сбросить свою среду или когда вы готовитесь внести значительные изменения в конфигурацию Docker Compose.
Изучение дополнительных параметров
Вы можете увидеть все доступные параметры для команды docker-compose down, используя флаг help:
docker-compose down --help
Уделите немного времени, чтобы просмотреть доступные параметры и их описания.
Теперь у вас есть хорошее понимание того, как использовать docker-compose down с различными параметрами для управления тем, какие ресурсы удаляются при выключении вашей среды Docker Compose.