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

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

Введение

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

После создания файла docker-compose.yml вы узнаете, как запустить сервисы с помощью команды docker compose up, приостановить конкретный работающий сервис с помощью docker compose pause, проверить, что сервис действительно приостановлен, и, наконец, возобновить его работу с помощью docker compose unpause. Это практическое упражнение даст вам опыт управления жизненным циклом сервисов в Docker Compose.

Создание простого файла docker-compose.yml

На этом шаге мы создадим простой файл docker-compose.yml. Перед началом работы необходимо установить Docker Compose. Docker Compose — это инструмент для определения и запуска многоконтейнерных приложений Docker. С помощью Compose вы используете YAML-файл для настройки сервисов вашего приложения. Затем одной командой создаёте и запускаете все сервисы из конфигурации.

Сначала установим Docker Compose. Мы скачаем бинарный файл Docker Compose и сделаем его исполняемым.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

После установки можно проверить её успешность, посмотрев версию Docker Compose.

docker-compose --version

Вы должны увидеть вывод, похожий на Docker Compose version v2.20.2.

Теперь создадим директорию для нашего проекта и перейдём в неё.

mkdir my-docker-app
cd my-docker-app

Внутри директории my-docker-app создадим файл с именем docker-compose.yml. Этот файл будет определять сервисы нашего приложения. Для создания и редактирования файла воспользуемся редактором nano.

nano docker-compose.yml

В редакторе nano вставьте следующее содержимое. Этот файл docker-compose.yml определяет один сервис с именем web, использующий образ nginx:latest.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Разберём этот файл подробнее:

  • version: '3.8' — указывает версию формата файла Docker Compose.
  • services: — определяет сервисы, из которых состоит ваше приложение.
  • web: — имя нашего сервиса.
  • image: nginx:latest — указывает Docker-образ для этого сервиса. В данном случае используется последняя версия образа Nginx.
  • ports: — сопоставляет порты между хостом и контейнером. "80:80" перенаправляет порт 80 на хосте на порт 80 в контейнере.

После вставки содержимого сохраните файл, нажав Ctrl + X, затем Y и, наконец, Enter.

Перед запуском сервиса убедимся, что образ nginx:latest доступен локально. Если его нет, Docker Compose автоматически загрузит его при запуске сервиса. Однако можно также вручную загрузить образ с помощью команды docker pull.

docker pull nginx:latest

Эта команда загружает образ nginx:latest из Docker Hub.

Запуск сервисов, определённых в docker-compose.yml

На этом шаге мы запустим сервисы, определённые в нашем файле docker-compose.yml. Для этого мы воспользуемся командой docker-compose up, которая собирает, создаёт и запускает сервисы.

Убедитесь, что вы находитесь в директории ~/project/my-docker-app, где был создан файл docker-compose.yml на предыдущем шаге.

cd ~/project/my-docker-app

Теперь выполните следующую команду для запуска сервисов. Флаг -d запускает контейнеры в detached mode (фоновом режиме).

docker-compose up -d

Эта команда прочитает файл docker-compose.yml, создаст необходимые контейнеры на основе определений сервисов и запустит их. Если образ nginx:latest отсутствует в вашей системе, Docker Compose автоматически загрузит его перед запуском контейнера.

Вы увидите вывод, указывающий на создание и запуск сети, томов (если есть) и контейнера сервиса. Например:

[+] Running 1/1
 ⠿ Container my-docker-app-web-1  Started

Для проверки работы сервиса используйте команду docker-compose ps. Эта команда выводит список контейнеров, управляемых Docker Compose в текущей директории.

docker-compose ps

Вы должны увидеть вывод, подобный этому, где сервис web имеет статус running:

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       2 minutes ago  running       0.0.0.0:80->80/tcp, :::80->80/tcp

Также можно проверить доступность веб-сервера Nginx с помощью команды curl, обратившись к localhost на порту 80.

curl localhost:80

Вы должны увидеть HTML-код стандартной приветственной страницы Nginx, что подтверждает работу и доступность веб-сервера.

Приостановка работающего сервиса

На этом шаге мы приостановим работу контейнера сервиса web. Приостановка контейнера временно останавливает все его процессы. Это отличается от полной остановки контейнера, которая завершает его процессы. При приостановке состояние контейнера замораживается, и он потребляет минимальные ресурсы CPU.

Убедитесь, что вы находитесь в директории ~/project/my-docker-app.

cd ~/project/my-docker-app

Для приостановки сервиса web используйте команду docker-compose pause с указанием имени сервиса.

docker-compose pause web

Вы должны увидеть вывод, подтверждающий приостановку сервиса:

[+] Paused 1/1
 ⠿ Container my-docker-app-web-1  Paused

Теперь проверим статус сервиса с помощью команды docker-compose ps.

docker-compose ps

В выводе будет указано, что контейнер сервиса web находится в состоянии paused:

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       5 minutes ago  paused        0.0.0.0:80->80/tcp, :::80->80/tcp

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

curl localhost:80

Эта команда может зависнуть или вернуть ошибку, что подтвердит приостановку процессов в контейнере.

Проверка приостановки сервиса

На этом шаге мы явно проверим, что контейнер сервиса web находится в приостановленном состоянии. Хотя мы уже проверяли статус с помощью docker-compose ps на предыдущем шаге, рекомендуется дополнительно подтвердить состояние с использованием команд Docker напрямую.

Сначала убедитесь, что вы находитесь в директории ~/project/my-docker-app.

cd ~/project/my-docker-app

Мы можем использовать команду docker ps для вывода списка всех работающих (включая приостановленные) контейнеров. Отфильтруем вывод, чтобы найти наш контейнер сервиса web и проверить его статус.

docker ps --filter "name=my-docker-app-web-1"

В выводе этой команды в колонке STATUS должно быть указано Paused.

Альтернативно, вы можете использовать команду docker inspect для получения подробной информации о контейнере, включая его состояние. Мы воспользуемся grep для поиска конкретно состояния "Paused" в выводе.

docker inspect my-docker-app-web-1 | grep Paused

Эта команда должна вывести строку вида "Paused": true,, подтверждающую, что контейнер действительно приостановлен.

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

curl localhost:80

Эта команда не должна возвращать приветственную страницу Nginx.

Возобновление работы сервиса

На этом шаге мы возобновим работу контейнера сервиса web, который был приостановлен ранее. Возобновление работы контейнера запускает все процессы, которые были приостановлены.

Убедитесь, что вы находитесь в директории ~/project/my-docker-app.

cd ~/project/my-docker-app

Для возобновления работы сервиса web используйте команду docker-compose unpause с указанием имени сервиса.

docker-compose unpause web

Вы должны увидеть вывод, подтверждающий возобновление работы сервиса:

[+] Unpaused 1/1
 ⠿ Container my-docker-app-web-1  Unpaused

Теперь снова проверим статус сервиса с помощью команды docker-compose ps.

docker-compose ps

Теперь в выводе должно быть указано, что контейнер сервиса web находится в состоянии running:

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       8 minutes ago  running       0.0.0.0:80->80/tcp, :::80->80/tcp

Поскольку контейнер снова работает, он должен отвечать на запросы. Попробуем обратиться к веб-серверу Nginx с помощью curl.

curl localhost:80

Теперь вы должны увидеть HTML-код стандартной приветственной страницы Nginx, что подтверждает работоспособность сервиса.

Для завершения работы и очистки ресурсов, созданных в ходе лабораторной работы, можно остановить и удалить контейнеры, сети и тома, определённые в файле docker-compose.yml, с помощью команды docker-compose down.

docker-compose down

Эта команда остановит работающие контейнеры и удалит контейнеры, сети и тома.

Резюме

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

После настройки мы запустили сервис командой docker compose up -d, приостановили его работу с помощью docker compose pause web, проверили состояние приостановки и в итоге возобновили работу командой docker compose unpause web. Этот практический опыт продемонстрировал применение команд pause и unpause для временной остановки и возобновления работы сервисов Docker Compose.