Loading...

CONTAINER APPS · VAKA ETÜDÜ

docker-compose.yml'den canlı uygulamaya — panelde ve cdnctl ile

Platformu hızla denemek isteyen geliştiriciler için eksiksiz, kopyala-yapıştır bir anlatım. Küçük ama gerçekçi çok servisli bir projeyi — bir web API, bir arka plan worker'ı ve yönetilen Postgres + Redis — tek bir docker-compose.yml'den doğrudan CDN.com.tr Managed Containers üzerinde çalıştırıyoruz. Aynı senaryo iki yolla gösteriliyor: yönetim panelinden tıkla-ve-yap, ve uçtan uca cdnctl CLI ile. Hangisini isterseniz onu seçin.

Sonunda elinizde ne olacak

Her biri yönetilen Postgres ve Redis eklentisine bağlı iki yönetilen uygulama (web, worker) ve kendi https://<uid>.cdn.com.tr alt alan adında canlı web uygulaması — hepsi compose dosyasından oluşturulmuş; Dockerfile ya da Kubernetes YAML'ı yok.

Örnek proje

web servisi ziyaretleri Postgres'te sayar ve son sayıyı Redis'te cache'ler; worker, aynı yönetilen eklentileri paylaşan portsuz bir arka plan döngüsüdür. İki imaj da önceden derlenmiş ve platformun çekebileceği bir registry'ye gönderilmiştir (linux/amd64 için derlenmiş). Platform bağlantı bilgilerini otomatik enjekte eder — kodunuz yalnızca DATABASE_URL ve REDIS_URL okur.

# docker-compose.yml
services:
  web:
    image: mediatriple/compose-demo-web:1.0.0
    ports:
      - "8080:8080"          # container port 8080 is exposed; the host side is ignored
    environment:
      APP_NAME: "Compose Demo"
    healthcheck:
      test: ["CMD", "wget", "-qO-", "http://localhost:8080/health"]
    depends_on: [db, cache]

  worker:
    image: mediatriple/compose-demo-worker:1.0.0   # no port -> stays private
    depends_on: [db, cache]

  db:
    image: postgres:16     # -> managed Postgres add-on (DATABASE_URL injected)

  cache:
    image: redis:7         # -> managed Redis add-on (REDIS_URL injected)

Servisler nasıl eşlenir. Önceden derlenmiş imajı olan her servis bir yönetilen uygulama olur. İmajı postgres, mysql/mariadb, redis ya da nats olan servisler yönetilen eklentiye dönüşür ve onlara depends_on ile bağlı her uygulamaya iliştirilir — tüketen her uygulama kendi eklenti örneğini alır; kimlik bilgileri env (DATABASE_HOST/PORT/NAME/USER, REDIS_URL) ve secret (DATABASE_PASSWORD, DATABASE_URL) olarak enjekte edilir. build: içeren (önceden derlenmiş imajı olmayan) bir servis reddedilir — önce bir imaj yayınlayın. En fazla 20 servis.

A · Panelden

1 · Container Apps'i açın

Giriş yapın, CDN Hesaplarını açın, hesabınızın ayarlar simgesine tıklayın ve Platformlar sekmesini, ardından Container Apps'i seçin (ilk seferde Activate'e basın). Genel bakış, paket limitlerinizi ve boş uygulama listesini gösterir.

Uygulanan paket limitleriyle Container Apps genel bakışı
Genel bakış: uygulanan limitler (uygulama / object-storage / Redis / DB), eklenti sayaçları ve Create App.

2 · (Private imajlar) registry kimlik bilgisi ekleyin

İmajlarınız private ise Create App'i açın ve Private registry credential satırına bir ad, registry URL'i (Docker Hub için https://index.docker.io/v1/), kullanıcı adınızı ve salt-okunur bir erişim token'ı girip kaydedin. Token şifreli saklanır ve bir daha gösterilmez. Public imajlar için kimlik bilgisi gerekmez.

Registry kimlik satırıyla container app oluşturma formu
Create-App paneli. Import From Docker Compose sekmesi Create'in yanındadır; registry kimliği hemen üstündedir.

3 · Import From Docker Compose

Import From Docker Compose'a geçin ve docker-compose.yml'inizi yükleyin ya da yapıştırın (en fazla 256 KB).

Docker Compose içe aktarma penceresi
Compose dosyasını yapıştırın. Kayıtlı registry kimliği private imajlar için eklenir.
İçe aktarma kutusuna yapıştırılmış compose dosyası
Compose dosyası yerinde — önizlemeye hazır.

4 · Planı önizleyin

Preview'a tıklayın. Platform dosyayı çözümler ve tahribatsız bir plan gösterir: oluşturacağı her uygulama, imaj/port/replika, bağlanan eklentiler ve uyarılar — henüz hiçbir şeye dokunmadan.

Compose içe aktarma önizleme planı
Plan: her biri Redis + Postgres eklentili web (port 8080) ve worker. Uyarı, host-port eşlemelerinin yok sayıldığını belirtir — uygulamaları platformun expose/domain akışıyla yayınlarsınız.

5 · Uygulayın, deploy'u izleyin

I have reviewed this plan kutusunu işaretleyip Apply Import'a tıklayın. Uygulama ya-hep-ya-hiç çalışır; uygulamalar ve eklentiler oluşturulur, deploy'lar kuyruğa alınır. Bir dakika içinde uygulamalar Your apps listesinde running'e döner.

İçe aktarma sonrası çalışan iki container app
Her iki uygulama da (web ve worker) Your apps listesinde çalışıyor. Eklentilerine ve Expose on cdn.com.tr eylemine ulaşmak için bir uygulamayı açın (Manage →).

6 · Web uygulamasını yayınlayın

web uygulamasını açın (Manage →) ve anında bir <uid>.cdn.com.tr alt alan adı üretmek için Expose on cdn.com.tr'ye tıklayın (HTTPS sizin için halledilir). worker'ı özel bırakın. Bu kadar — compose projeniz canlıda. Sonuca bakın ↓

B · Terminalden (cdnctl)

Yukarıdaki her adımın bir CLI karşılığı var. cdnctl'i kurun, sonra:

1 · Giriş yapın ve hesabınızı bulun

cdnctl login --email you@example.com --password '••••••'
cdnctl accounts list                 # copy your account <uuid>

2 · Planı önizleyin

Panelle aynı tahribatsız plan — uygulamaları, eklentileri ve uyarıları JSON olarak döndürür. Önizleme yalnızca env/secret anahtarlarını döndürür, asla değerleri değil.

cdnctl container compose preview --account <uuid> --file docker-compose.yml

3 · Uygulayın

Sunucu tarafında yeniden planlar (istemci planına asla güvenilmez), paket haklarınızı uygular, sonra uygulamaları bağımlılık sırasına göre oluşturur.

cdnctl container compose apply --account <uuid> --file docker-compose.yml --yes

Private imajlar. Registry kimliğini bir kez oluşturun (panel → Private registry credential ya da API) ve platformun imajı çekebilmesi için uygulamalara ekleyin — public imajlar için hiçbir şey gerekmez.

4 · İzleyin, yayınlayın, inceleyin

cdnctl container apps list   --account <uuid>
cdnctl container apps wait   --account <uuid> --app <app_uuid> --status running --timeout 300
cdnctl container apps expose --account <uuid> --app <app_uuid>   # -> <uid>.cdn.com.tr
cdnctl container apps logs   --account <uuid> --app <app_uuid> --tail 100
cdnctl container apps status --account <uuid> --app <app_uuid>

Sonuç

Web uygulaması cdn.com.tr alt alan adında canlı — ziyaret sayacı yönetilen Postgres eklentisinde kalıcı, yönetilen Redis eklentisinde cache'li; ikisi de connected raporluyor, yönetilen bir replika sunuyor.

cdn.com.tr alt alan adında çalışan demo uygulaması
docker-compose.yml'den içe aktarılmış ve <uid>.cdn.com.tr'de sunulan çalışan uygulama.

Paylaşılan durum hakkında bilinmesi gereken. Her uygulama kendi yönetilen Postgres/Redis'ini aldığı için worker, web'in okuduğundan farklı bir veritabanına yazar. Bir SQL veritabanını gerçekten paylaşmak için tek uygulamanın ona sahip olmasına izin verin ve diğerleri ona özel ağ üzerinden uygulama adıyla erişsin (http://<uygulama-adı>:<port>) — tıpkı bir compose servisi gibi. Parolasız arka uçlar (Redis, NATS) URL'leri her tüketicide env olarak ayarlanarak paylaşılabilir.