Как использовать команду docker compose down для остановки и удаления ресурсов

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы научитесь эффективно использовать команду docker compose down для остановки и удаления ресурсов, определённых в файле Docker Compose. Мы начнём с подготовки простого файла Compose с двумя сервисами и сетью.

После настройки вы попрактикуетесь в запуске этих сервисов с помощью команды docker compose up. Основная часть лабораторной работы будет посвящена использованию docker compose down для остановки и удаления ресурсов по умолчанию, а затем изучению опций -v (для удаления томов) и --rmi all (для удаления образов), демонстрируя различные уровни очистки ресурсов.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/rmi("Remove Image") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/run -.-> lab-555077{{"Как использовать команду docker compose down для остановки и удаления ресурсов"}} docker/ps -.-> lab-555077{{"Как использовать команду docker compose down для остановки и удаления ресурсов"}} docker/stop -.-> lab-555077{{"Как использовать команду docker compose down для остановки и удаления ресурсов"}} docker/rm -.-> lab-555077{{"Как использовать команду docker compose down для остановки и удаления ресурсов"}} docker/pull -.-> lab-555077{{"Как использовать команду docker compose down для остановки и удаления ресурсов"}} docker/rmi -.-> lab-555077{{"Как использовать команду docker compose down для остановки и удаления ресурсов"}} docker/images -.-> lab-555077{{"Как использовать команду docker compose down для остановки и удаления ресурсов"}} docker/volume -.-> lab-555077{{"Как использовать команду docker compose down для остановки и удаления ресурсов"}} docker/network -.-> lab-555077{{"Как использовать команду docker compose down для остановки и удаления ресурсов"}} end

Подготовка простого файла 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 выполнит:

  1. Создаст сеть app-network, как определено в файле docker-compose.yml.
  2. Создаст контейнер для сервиса web с использованием образа nginx:latest.
  3. Создаст контейнер для сервиса redis с использованием образа redis:latest.
  4. Подключит оба контейнера к сети app-network.
  5. Запустит оба контейнера.

Вы увидите вывод, показывающий создание и запуск сети и контейнеров.

Для проверки работы контейнеров используйте команду 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 выполнит:

  1. Остановит работающие контейнеры (web и redis).
  2. Удалит остановленные контейнеры.
  3. Удалит сеть (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-приложений.