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



