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

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

Введение

В этой лабораторной работе (lab) вы научитесь использовать команду docker-compose start для управления многоконтейнерными Docker-приложениями. Мы начнём с создания простого файла docker-compose.yml для определения наших сервисов.

После создания файла compose вы попрактикуетесь в запуске всех сервисов, определённых в нём, с помощью одной команды. Наконец, вы узнаете, как выборочно запускать конкретный сервис из вашей конфигурации compose. Этот практический опыт даст вам фундаментальные навыки для эффективного управления проектами Docker Compose.

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

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

Перед созданием файла docker-compose.yml необходимо установить Docker Compose. Поскольку он не предустановлен в среде LabEx, мы установим его с помощью pip.

Сначала обновим список пакетов и установим pip, если он ещё не установлен.

sudo apt update
sudo apt install -y python3-pip

Теперь можно установить Docker Compose через pip.

pip install docker-compose

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

docker-compose --version

Вы должны увидеть вывод, похожий на docker-compose version 1.29.2, build 5becea4c.

Теперь, когда Docker Compose установлен, создадим директорию для нашего проекта и перейдём в неё. Внутри этой директории мы создадим файл docker-compose.yml.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

Далее создадим файл docker-compose.yml с помощью редактора nano.

nano docker-compose.yml

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

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

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

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

Сохраните файл, нажав Ctrl + X, затем Y и Enter.

Проверить содержимое файла можно с помощью команды cat.

cat docker-compose.yml

Вы должны увидеть вставленный YAML-код.

Запуск всех сервисов, определенных в compose-файле

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

Сначала убедитесь, что находитесь в директории, где создавали файл docker-compose.yml.

cd ~/project/my-compose-app

Теперь выполните команду docker-compose up. Флаг -d запускает контейнеры в detached mode (фоновом режиме), что означает их работу в фоне без блокировки терминала.

docker-compose up -d

При первом выполнении этой команды Docker Compose:

  1. Найдёт файл docker-compose.yml в текущей директории
  2. Прочитает определения сервисов
  3. Для каждого сервиса проверит наличие указанного образа локально. Если образ отсутствует - загрузит его из Docker Hub. В нашем случае будет загружен образ nginx:latest
  4. Создаст и запустит контейнеры для каждого сервиса

Вы увидите вывод, показывающий процесс загрузки образа и создания контейнера:

Pulling web (nginx:latest)...
latest: Pulling from library/nginx
... (вывод с загрузкой слоёв образа)
Status: Downloaded newer image for nginx:latest
Creating my-compose-app_web_1 ... done

После завершения команды можно проверить статус контейнера с помощью docker ps:

docker ps

Вы должны увидеть запись о контейнере web с образом nginx:latest и статусом Up. Имя контейнера будет вида my-compose-app_web_1.

Для дополнительной проверки работоспособности Nginx-сервера используйте команду curl для обращения к веб-серверу на 8080 порту хоста:

curl http://localhost:8080

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

Запуск конкретного сервиса из compose-файла

В предыдущем шаге мы запустили все сервисы из файла docker-compose.yml с помощью команды docker-compose up. В этом шаге мы научимся запускать конкретный сервис, если в вашем Compose-файле определено несколько сервисов.

Хотя в нашем текущем docker-compose.yml есть только один сервис (web), команда для запуска конкретного сервиса полезна при работе с более сложными приложениями, содержащими несколько сервисов (например, веб-сервер, базу данных и backend API).

Сначала остановим текущий работающий сервис. Для этого используем команду docker-compose down. Эта команда останавливает и удаляет контейнеры, сети и тома, созданные командой up.

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

cd ~/project/my-compose-app

Теперь выполните команду docker-compose down.

docker-compose down

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

Stopping my-compose-app_web_1 ... done
Removing my-compose-app_web_1 ... done
Removing network my-compose-app_default

Проверить остановку контейнера можно командой docker ps. В списке не должно быть контейнеров из нашего compose-файла.

docker ps

Теперь продемонстрируем, как запустить конкретный сервис. Команда имеет вид docker-compose up <имя_сервиса>. В нашем случае имя сервиса — web. Снова используем флаг -d для запуска в фоновом режиме.

docker-compose up -d web

Эта команда запустит только сервис web, определённый в файле docker-compose.yml. Так как образ уже был загружен на предыдущем шаге, контейнер будет создан и запущен сразу.

Вы увидите примерно такой вывод:

Creating my-compose-app_web_1 ... done

Снова можно проверить статус контейнера web с помощью docker ps.

docker ps

В списке должен появиться контейнер my-compose-app_web_1 со статусом Up.

Таким образом мы показали, как выборочно запускать сервисы из файла docker-compose.yml, что полезно при управлении сложными приложениями с несколькими сервисами.

Резюме

В этой лабораторной работе мы изучили, как использовать команду docker-compose start. Мы начали с создания простого файла docker-compose.yml. Этот процесс включал установку Docker Compose с помощью pip, проверку установки, создание директории проекта и непосредственно создание самого файла docker-compose.yml. Созданный файл определял один сервис с именем web, использующий образ nginx с пробросом портов.

Последующие шаги (которые не были полностью детализированы в предоставленном содержании) предполагали использование команды docker-compose start для запуска либо всех сервисов, определённых в compose-файле, либо конкретного сервиса. Это демонстрирует основную функциональность команды docker-compose start для управления жизненным циклом многоконтейнерных приложений, определённых в Compose-файле.