Loading...

Обучение / Развёртывание

Разверните многосервисное приложение с помощью Docker Compose

Есть docker-compose.yml с веб-сервисом, воркером и базой данных? cdn.com.tr превращает его в управляемые container apps и дополнения — просмотрите план, а затем примените его одной командой. Ни кластера, который нужно запускать, ни базы данных, за которой нужно следить.

8 мин чтения Средний Updated

Разверните многосервисное приложение с помощью Docker Compose

Что вам понадобится

Вам нужно приложение, описанное в docker-compose.yml — обычно это веб-сервис, возможно фоновый воркер, и вспомогательные сервисы вроде базы данных и Redis — и аккаунт cdn.com.tr. Вам не придётся запускать кластер Kubernetes, администрировать сервер базы данных или вручную настраивать TLS. cdn.com.tr читает ваш compose-файл и сопоставляет каждую часть с управляемым компонентом: сервисы приложения становятся container apps, а сервисы с состоянием вроде Postgres, MySQL или Redis становятся управляемыми дополнениями, которые резервируются и подключаются к вашим приложениям как переменные окружения.

Как сопоставляется ваш compose-файл

Идея проста: всё, что обслуживает трафик или выполняет код, становится container app, а всё, что хранит данные, становится управляемым дополнением. Сервис 'web' становится приложением с доменом; 'worker' — приложением без публичного порта; 'db' на образе Postgres или MySQL становится управляемой базой данных; сервис 'redis' становится управляемым Redis. Ваши сервисы по-прежнему обращаются друг к другу по имени, а данные для подключения к управляемым дополнениям автоматически передаются вашим приложениям — так вы удаляете рискованный самостоятельно хостящийся контейнер базы данных и позволяете платформе запускать его.

Пример compose-файла

Вот небольшое многосервисное приложение: веб-API, фоновый воркер, база данных Postgres и Redis. Закоммитьте его в репозиторий как docker-compose.yml.

docker-compose.yml

services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      DATABASE_URL: postgres://app:secret@db:5432/app
      REDIS_URL: redis://redis:6379
    depends_on: [db, redis]

  worker:
    build: .
    command: ["python", "worker.py"]
    depends_on: [db, redis]

  db:
    image: postgres:16
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: app

  redis:
    image: redis:7

Сначала просмотрите план

Прежде чем что-либо менять, спросите cdn.com.tr, что он собирается создать. Предпросмотр читает ваш compose-файл и показывает план: какие сервисы станут container apps, какие — управляемыми дополнениями, и как они соединяются. Пока ничего не создаётся — вы просто видите, что произойдёт.

cdnctl — предпросмотр
cdnctl login
cdnctl accounts use <account_uuid>

cdnctl container compose preview --file docker-compose.yml
# web, worker  -> container apps
# db           -> managed database (postgres)
# redis        -> managed redis

Примените план

План устраивает? Примените его. cdn.com.tr создаёт container apps и дополнения, подключает строки соединения к вашим приложениям и запускает всё. Это же можно сделать из панели — импортировать compose-файл, просмотреть план и подтвердить, — но одна команда позволяет держать это в вашем CI или скрипте.

cdnctl — применение
cdnctl container compose apply --file docker-compose.yml --yes

# then, anytime:
cdnctl container apps list
cdnctl container apps logs --app <web_app_uuid> --tail 100

Домен, HTTPS и edge

Направьте домен на веб-приложение, и cdn.com.tr автоматически выпустит и продлит SSL. Ваши сервисы теперь работают как управляемые приложения за CDN edge, с WAF на входе и поглощением всплесков трафика на edge; база данных и Redis управляются и резервируются. Чтобы выпустить обновление, пересоберите образ и снова примените план — при неудачной сборке продолжает работать предыдущая версия. Вы получаете многосервисный production-деплой без необходимости управлять кластером или базой данных под ним.

Кому подходит

Веб + воркер + очередь

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

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

Уже есть рабочий docker-compose.yml? Импортируйте его как есть, вместо того чтобы пересобирать деплой с нуля.

Изменения по схеме «просмотр → применение»

Предпросмотр точно показывает, что изменится, прежде чем что-либо запустится, — безопасно использовать из CI или скрипта.

Вопросы и ответы о деплое через Docker Compose

Запускает ли это docker-compose как есть на виртуальной машине?

Нет — он превращает ваш compose-файл в управляемые ресурсы: сервисы становятся container apps, а сервисы с состоянием — управляемыми дополнениями. Это значит, что не нужно патчить VM, а база данных резервируется и обслуживается за вас, при этом форма вашего приложения не меняется.

Что происходит с моими сервисами базы данных и Redis?

Сервис Postgres, MySQL или Redis превращается в управляемое дополнение. Контейнер из вашего compose-файла не запускается как есть; вместо этого управляемое дополнение передаёт данные для подключения вашим приложениям как переменные окружения.

Могу ли я увидеть, что произойдёт, прежде чем применять план?

Да. Команда 'cdnctl container compose preview' показывает полный план — какие сервисы станут приложениями, какие — дополнениями, и как они соединяются, — ничего не создавая. Применяйте план, только когда он выглядит правильно.