Neye ihtiyacın var
Bir docker-compose.yml ile tanımlı bir uygulamaya — genelde bir web servisi, belki bir arka plan worker'ı ve veritabanı ile Redis gibi destek servisleri — ve bir cdn.com.tr hesabına ihtiyacın var. Kubernetes kümesi işletmeyecek, veritabanı sunucusu yönetmeyecek veya TLS'i elle bağlamayacaksın. cdn.com.tr compose dosyanı okur ve her parçayı yönetilen bir bileşene eşler: uygulama servisleri container app olur, Postgres, MySQL veya Redis gibi durumlu servisler ise yedeklenen ve bağlantı bilgileri uygulamalarına ortam değişkeni olarak verilen yönetilen add-on'lar olur.
Compose dosyan nasıl eşlenir
Fikir basit: trafik sunan veya kod çalıştıran her şey container app olur, veri saklayan her şey yönetilen add-on olur. Bir 'web' servisi alan adı olan bir app olur; bir 'worker' public port'u olmayan bir app olur; Postgres veya MySQL imajı kullanan bir 'db' yönetilen veritabanı olur; bir 'redis' servisi yönetilen Redis olur. Servislerin birbirleriyle isimle konuşmaya devam eder ve yönetilen add-on'ların bağlantı bilgileri uygulamalarına otomatik verilir — yani riskli, kendi kendine barındırdığın veritabanı container'ını silip işletmeyi platforma bırakırsın.
Örnek bir compose dosyası
İşte küçük, çok servisli bir uygulama: bir web API, bir arka plan worker'ı, bir Postgres veritabanı ve Redis. Bunu deponuna docker-compose.yml olarak ekle.
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
Önce planı önizle
Bir şeyi değiştirmeden önce cdn.com.tr'ye ne oluşturacağını sor. Önizleme compose dosyanı okur ve planı gösterir: hangi servisler container app olur, hangileri yönetilen add-on olur ve nasıl bağlanırlar. Henüz hiçbir şey oluşturulmaz — sadece ne olacağını görürsün.
cdnctl login
cdnctl accounts use <account_uuid>
cdnctl container compose preview --file docker-compose.yml
# web, worker -> container app
# db -> yonetilen veritabani (postgres)
# redis -> yonetilen redis
Uygula
Plandan memnun musun? Uygula. cdn.com.tr container app'leri ve add-on'ları oluşturur, bağlantı bilgilerini uygulamalarına bağlar ve her şeyi başlatır. Bunu panelden de yapabilirsin — compose dosyasını içe aktar, planı gözden geçir, onayla — ama tek komut onu CI'nda veya bir script'te tutar.
cdnctl container compose apply --file docker-compose.yml --yes
# sonra istedigin zaman:
cdnctl container apps list
cdnctl container apps logs --app <web_app_uuid> --tail 100
Alan adı, HTTPS ve edge
Alan adını web app'ine yönlendir; cdn.com.tr SSL'i otomatik alır ve yeniler. Servislerin artık CDN edge arkasında yönetilen app'ler olarak çalışır, önünde WAF vardır ve ani trafik edge'de karşılanır; veritabanı ve Redis yönetilir ve yedeklenir. Güncelleme yayınlamak için imajını yeniden derle ve tekrar uygula — hatalı bir build önceki sürümü ayakta tutar. Altında bir küme veya veritabanı işletmeden çok servisli, üretim düzeyinde bir deploy'a sahip olursun.
İyi uyan senaryolar
Web katmanı, arka plan worker'ları ve veritabanı olan uygulamalar app'lere artı yönetilen add-on'lara temiz eşlenir.
Çalışan bir docker-compose.yml'in mi var? Deploy'unu sıfırdan kurmak yerine olduğu gibi içe aktar.
Önizleme, hiçbir şey çalışmadan ne değişeceğini tam gösterir — CI'dan veya bir script'ten güvenle kullanılır.
Docker Compose deploy — sık sorulanlar
docker-compose'u bir VM'de olduğu gibi mi çalıştırır?
Hayır — compose dosyanı yönetilen kaynaklara dönüştürür: servisler container app, durumlu servisler yönetilen add-on olur. Yani yamalanacak bir VM ve senin yerine işletilen, yedeklenen bir veritabanı olur; uygulaman aynı şekli korur.
Veritabanı ve Redis servislerime ne olur?
Bir Postgres, MySQL veya Redis servisi yönetilen bir add-on'a dönüşür. Compose dosyandaki container olduğu gibi çalıştırılmaz; bunun yerine yönetilen add-on bağlantı bilgilerini uygulamalarına ortam değişkeni olarak verir.
Uygulamadan önce ne olacağını görebilir miyim?
Evet. 'cdnctl container compose preview' hiçbir şey oluşturmadan tam planı gösterir — hangi servisler app olur, hangileri add-on olur ve nasıl bağlanırlar. Plan doğru göründüğünde uygula.