Furkan KapukayaYazılım geliştirme
Sunucu, Bulut ve DevOps3 dk okuma

Docker Compose ile Çok Servisli Uygulama: Pratik Rehber

Docker Compose'un ne işe yaradığı, compose.yaml yapısı, uygulama ve veritabanını birlikte çalıştırma, volume, ağ, ortam değişkenleri, sağlık kontrolü ve sık kullanılan komutlar.

Gerçek bir uygulama nadiren tek başına çalışır: bir web API, bir veritabanı, belki bir önbellek ve arka plan işleri. Her birini ayrı komutlarla başlatmak hem zahmetli hem hataya açıktır. Docker Compose, tüm bu parçaları tek bir dosyada tanımlayıp tek komutla ayağa kaldırmayı sağlar. Docker'a yeniyseniz önce Docker nedir yazısını okuyabilirsiniz.

Temel yapı

Projenin kök dizinindeki compose.yaml dosyası:

services:
  api:
    build: .
    ports:
      - "8080:8080"
    environment:
      ConnectionStrings__Default: "Host=db;Database=app;Username=app;Password=${DB_PASSWORD}"
    depends_on:
      db:
        condition: service_healthy

  db:
    image: postgres:17
    environment:
      POSTGRES_DB: app
      POSTGRES_USER: app
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - dbdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app"]
      interval: 5s
      retries: 10

volumes:
  dbdata:

Dikkat: Eski rehberlerde görülen en üstteki version: satırı artık gerekmez; güncel Compose bu alanı yok sayar.

Önemli kavramlar

  • Servis: Çalışacak her konteyner (api, db).
  • Ağ: Compose, servisleri ortak bir ağa bağlar; api servisi veritabanına db adıyla ulaşır.
  • Volume: Konteyner silinse bile verinin kalıcı olmasını sağlar. Veritabanı için olmazsa olmazdır.
  • Ortam değişkenleri: Parolalar .env dosyasından okunur; bu dosya kesinlikle Git'e eklenmez.
  • Sağlık kontrolü: depends_on ile birlikte kullanıldığında API, veritabanı gerçekten hazır olmadan başlamaz.

Sık kullanılan komutlar

docker compose up -d          # arka planda başlat
docker compose ps             # durum
docker compose logs -f api    # api loglarını izle
docker compose build          # imajları yeniden oluştur
docker compose down           # durdur ve kaldır (volume kalır)
docker compose exec db psql -U app   # konteyner içinde komut

docker compose down -v komutu volume'ları da siler; canlı ortamda veri kaybı demektir.

Geliştirme ve canlı ortam

Compose özellikle geliştirme ortamında parlar: yeni katılan bir geliştirici tek komutla tüm sistemi çalıştırır. Tek sunuculu küçük canlı ortamlarda da güvenle kullanılabilir. Ortamlar arası farklar için ayrı dosyalar (compose.override.yaml) kullanılabilir. Ortam ayrımının ilkeleri için bkz. dev, test ve prod ayrımı.

Canlı ortam için kontrol listesi

  1. Veritabanı portunu dışarı açmayın; yalnızca iç ağda kalsın.
  2. restart: unless-stopped ile sunucu yeniden başladığında servisler otomatik açılsın.
  3. Volume'ların düzenli yedeğini alın. Bkz. yedekleme stratejisi.
  4. İmaj sürümlerini sabitleyin (postgres:17 gibi); latest etiketine güvenmeyin.
  5. Logların disk doldurmaması için log boyutu sınırı tanımlayın.

Sık sorulan sorular

Compose ile Kubernetes arasındaki fark nedir?

Compose tek bir makinede çoklu konteyner yönetir. Kubernetes ise birden çok sunucudan oluşan kümelerde ölçeklenme ve kendini onarma sağlar. Bkz. Kubernetes ne zaman gerekir.

Windows'ta çalışır mı?

Docker Desktop ile Windows ve macOS'ta da kullanılabilir.

Sonuç

Docker Compose, çok parçalı uygulamaları tekrarlanabilir ve belgelenmiş bir şekilde çalıştırmanın en kolay yoludur. Tek bir dosya, hem geliştirici bilgisayarında hem sunucuda aynı ortamı garanti eder.