Что вам понадобится
Вам нужно приложение, описанное в 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 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 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' показывает полный план — какие сервисы станут приложениями, какие — дополнениями, и как они соединяются, — ничего не создавая. Применяйте план, только когда он выглядит правильно.