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

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

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

Введение

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL 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/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555092{{"Как использовать команду docker compose start для запуска сервисов"}} docker/ps -.-> lab-555092{{"Как использовать команду docker compose start для запуска сервисов"}} docker/start -.-> lab-555092{{"Как использовать команду docker compose start для запуска сервисов"}} docker/stop -.-> lab-555092{{"Как использовать команду docker compose start для запуска сервисов"}} docker/create -.-> lab-555092{{"Как использовать команду docker compose start для запуска сервисов"}} docker/pull -.-> lab-555092{{"Как использовать команду docker compose start для запуска сервисов"}} end

Создание простого файла 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-файле.