Введение
В этой лабораторной работе вы научитесь эффективно использовать команду docker compose down для остановки и удаления ресурсов, определённых в файле Docker Compose. Мы начнём с подготовки простого файла Compose с двумя сервисами и сетью.
После настройки вы попрактикуетесь в запуске этих сервисов с помощью команды docker compose up. Основная часть лабораторной работы будет посвящена использованию docker compose down для остановки и удаления ресурсов по умолчанию, а затем изучению опций -v (для удаления томов) и --rmi all (для удаления образов), демонстрируя различные уровни очистки ресурсов.
Подготовка простого Compose-файла с сервисами и сетью
На этом шаге мы подготовим простой файл Compose для определения двух сервисов и сети. Перед началом необходимо установить Docker Compose, так как он не предустановлен в среде.
Сначала загрузим бинарный файл Docker Compose. Мы скачаем версию 1.29.2, которая совместима с предустановленной версией Docker.
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Эта команда загружает бинарный файл Docker Compose со страницы релизов GitHub и сохраняет его в /usr/local/bin/docker-compose. Части $(uname -s) и $(uname -m) автоматически определяют вашу операционную систему и архитектуру для загрузки правильного бинарного файла.
Далее необходимо установить права на выполнение для загруженного бинарного файла, чтобы его можно было запускать как команду.
sudo chmod +x /usr/local/bin/docker-compose
Теперь проверим установку, посмотрев версию Docker Compose.
docker-compose --version
Вы должны увидеть информацию о версии, что подтвердит корректную установку Docker Compose.
Теперь, когда Docker Compose установлен, создадим директорию для нашего проекта и перейдём в неё. Мы создадим директорию my-compose-app в каталоге ~/project.
mkdir ~/project/my-compose-app
cd ~/project/my-compose-app
В этой директории создадим файл docker-compose.yml, который будет определять наши сервисы и сеть. Для создания и редактирования файла воспользуемся редактором nano.
nano docker-compose.yml
Теперь вставим следующее содержимое в файл docker-compose.yml. Этот файл определяет два сервиса: web и redis, а также сеть с именем app-network.
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
networks:
- app-network
redis:
image: redis:latest
networks:
- app-network
networks:
app-network:
driver: bridge
Разберём этот файл docker-compose.yml:
version: '3.8'указывает версию формата файла Docker Compose.services:определяет различные сервисы, из которых состоит ваше приложение.web:определяет сервис с именемweb.image: nginx:latestуказывает, что этот сервис будет использовать последний образnginx. Мы загрузим этот образ позже.ports: - "80:80"сопоставляет порт 80 на хосте с портом 80 в контейнереweb.networks: - app-networkподключает сервисwebк сетиapp-network.
redis:определяет сервис с именемredis.image: redis:latestуказывает, что этот сервис будет использовать последний образredis. Мы загрузим этот образ позже.networks: - app-networkподключает сервисredisк сетиapp-network.
networks:определяет сети, используемые сервисами.app-network:определяет сеть с именемapp-network.driver: bridgeуказывает, что эта сеть будет использовать драйвер bridge по умолчанию.
Сохраните файл, нажав Ctrl + X, затем Y и Enter.
Перед запуском сервисов необходимо загрузить необходимые образы Docker. Мы загрузим образы nginx:latest и redis:latest.
docker pull nginx:latest
docker pull redis:latest
Эти команды загружают указанные образы с Docker Hub на ваш локальный компьютер.
Запуск сервисов с помощью команды docker compose up
На этом шаге мы запустим сервисы, определённые в файле docker-compose.yml, используя команду docker compose up. Эта команда собирает, (пере)создаёт, запускает и подключается к контейнерам сервиса.
Убедитесь, что вы находитесь в директории ~/project/my-compose-app, где был создан файл docker-compose.yml.
cd ~/project/my-compose-app
Теперь выполните следующую команду для запуска сервисов. Мы используем флаг -d для запуска контейнеров в detached mode (фоновом режиме), что означает их работу в фоне без блокировки терминала.
docker-compose up -d
При первом запуске этой команды Docker Compose выполнит:
- Создаст сеть
app-network, как определено в файлеdocker-compose.yml. - Создаст контейнер для сервиса
webс использованием образаnginx:latest. - Создаст контейнер для сервиса
redisс использованием образаredis:latest. - Подключит оба контейнера к сети
app-network. - Запустит оба контейнера.
Вы увидите вывод, показывающий создание и запуск сети и контейнеров.
Для проверки работы контейнеров используйте команду docker ps.
docker ps
Эта команда выводит список всех запущенных контейнеров. Вы должны увидеть два контейнера: для сервиса web (на основе образа nginx) и для сервиса redis (на основе образа redis). Имена контейнеров обычно содержат префикс с именем директории (my-compose-app в данном случае) и именем сервиса (например, my-compose-app_web_1, my-compose-app_redis_1).
Также можно проверить созданные Docker Compose сети с помощью команды docker network ls.
docker network ls
Вы должны увидеть сеть с именем my-compose-app_app-network, которая была создана на основе определения app-network в вашем файле docker-compose.yml.
Наконец, поскольку мы сопоставили порт 80 сервиса web с портом 80 хоста, вы можете получить доступ к стандартной странице приветствия Nginx, открыв веб-браузер и перейдя по IP-адресу вашей LabEx VM. Альтернативно можно использовать curl из терминала.
curl localhost
В выводе вы должны увидеть HTML-содержимое стандартной страницы приветствия Nginx. Это подтверждает, что сервис web работает и доступен.
Остановка и удаление стандартных ресурсов с помощью docker compose down
На этом шаге мы остановим и удалим контейнеры и сети, созданные командой docker compose up, используя команду docker compose down. По умолчанию docker compose down удаляет контейнеры и сеть, созданные командой up.
Убедитесь, что вы находитесь в директории ~/project/my-compose-app.
cd ~/project/my-compose-app
Теперь выполните следующую команду для остановки и удаления сервисов.
docker-compose down
При выполнении этой команды Docker Compose выполнит:
- Остановит работающие контейнеры (
webиredis). - Удалит остановленные контейнеры.
- Удалит сеть (
my-compose-app_app-network), созданную командойdocker compose up.
Вы увидите вывод, показывающий остановку и удаление контейнеров и сети.
Для проверки удаления контейнеров используйте команду docker ps -a. Флаг -a показывает все контейнеры, включая остановленные.
docker ps -a
В выводе больше не должно быть контейнеров my-compose-app_web_1 и my-compose-app_redis_1.
Также можно проверить удаление сети с помощью команды docker network ls.
docker network ls
Сеть my-compose-app_app-network больше не должна отображаться в списке.
Обратите внимание, что по умолчанию docker compose down не удаляет тома (volumes) и образы. Мы рассмотрим их удаление в следующих шагах.
Остановка и удаление томов с помощью docker compose down -v
В предыдущем шаге мы увидели, что docker compose down удаляет контейнеры и сети, но не тома. В этом шаге мы научимся удалять тома вместе с другими ресурсами, используя флаг -v с командой docker compose down.
Сначала давайте снова запустим сервисы, чтобы у нас были ресурсы для удаления. Убедитесь, что вы находитесь в директории ~/project/my-compose-app.
cd ~/project/my-compose-app
Выполните команду docker compose up -d для запуска сервисов в фоновом режиме.
docker-compose up -d
Это воссоздаст контейнеры и сеть.
Теперь проверим, были ли созданы какие-либо тома. В нашем docker-compose.yml мы явно не определяли тома. Однако некоторые образы, такие как redis, могут создавать анонимные тома по умолчанию для сохранения данных. Мы можем проверить тома с помощью команды docker volume ls.
docker volume ls
Вы можете увидеть том с именем типа my-compose-app_redisdata (точное имя может немного отличаться в зависимости от версии Docker Compose и конфигурации, но оно, скорее всего, будет содержать префикс с именем проекта и сервиса). Это анонимный том, созданный контейнером redis.
Теперь остановим и удалим сервисы, сеть, а также тома с помощью docker compose down -v.
docker-compose down -v
Флаг -v указывает Docker Compose удалить все тома, объявленные в разделе volumes файла docker-compose.yml, а также любые анонимные тома, подключенные к контейнерам.
Вы увидите вывод, показывающий остановку и удаление контейнеров, сети и тома.
Для проверки удаления контейнеров используйте docker ps -a.
docker ps -a
Контейнеры web и redis не должны отображаться в списке.
Для проверки удаления сети используйте docker network ls.
docker network ls
Сеть my-compose-app_app-network не должна быть в списке.
Наконец, для проверки удаления тома используйте docker volume ls.
docker volume ls
Том, который был ранее в списке (например, my-compose-app_redisdata), больше не должен отображаться в выводе.
Остановка и удаление образов с помощью docker compose down --rmi all
В предыдущих шагах мы научились останавливать и удалять контейнеры, сети и тома с помощью docker compose down. По умолчанию docker compose down не удаляет Docker-образы, которые использовались для создания контейнеров. В этом шаге мы узнаем, как удалять образы с помощью флага --rmi all в команде docker compose down.
Сначала давайте снова запустим сервисы. Убедитесь, что вы находитесь в директории ~/project/my-compose-app.
cd ~/project/my-compose-app
Выполните команду docker compose up -d для запуска сервисов в фоновом режиме.
docker-compose up -d
Это воссоздаст контейнеры и сеть.
Теперь проверим Docker-образы в вашей системе с помощью команды docker images.
docker images
Вы должны увидеть образы nginx и redis, а также любые другие образы, которые могут быть в вашей системе.
Теперь остановим и удалим сервисы, сеть, тома, а также образы с помощью docker compose down --rmi all.
docker-compose down --rmi all -v
Мы снова используем флаг -v, чтобы гарантировать удаление томов. Флаг --rmi all указывает Docker Compose удалить все образы, используемые любым сервисом в файле docker-compose.yml, даже если они не имеют тегов.
Вы увидите вывод, показывающий остановку и удаление контейнеров, сети, томов и образов.
Для проверки удаления контейнеров используйте docker ps -a.
docker ps -a
Контейнеры web и redis не должны отображаться в списке.
Для проверки удаления сети используйте docker network ls.
docker network ls
Сеть my-compose-app_app-network не должна быть в списке.
Для проверки удаления томов используйте docker volume ls.
docker volume ls
Любые тома, связанные с этим проектом, не должны отображаться.
Наконец, для проверки удаления образов используйте docker images.
docker images
Образы nginx и redis, которые использовались сервисами, больше не должны отображаться в выводе, если они не используются другими контейнерами или не имеют других тегов. docker compose down --rmi all удаляет только те образы, которые не используются другими контейнерами.
Резюме
В этой лабораторной работе мы изучили, как использовать команду docker compose down для остановки и удаления ресурсов, определённых в файле Docker Compose. Мы начали с подготовки простого Compose-файла с двумя сервисами и сетью, что включало установку Docker Compose и создание файла docker-compose.yml.
После запуска сервисов с помощью docker compose up мы исследовали различные способы использования docker compose down. Сначала мы применили базовую команду для остановки и удаления стандартных ресурсов (контейнеров и сетей). Затем мы узнали, как удалять тома с помощью флага -v и как удалять образы с помощью флага --rmi all, продемонстрировав гибкость команды docker compose down в управлении жизненным циклом наших Docker Compose-приложений.



