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;
apiservisi veritabanınadbadı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
.envdosyasından okunur; bu dosya kesinlikle Git'e eklenmez. - Sağlık kontrolü:
depends_onile 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
- Veritabanı portunu dışarı açmayın; yalnızca iç ağda kalsın.
restart: unless-stoppedile sunucu yeniden başladığında servisler otomatik açılsın.- Volume'ların düzenli yedeğini alın. Bkz. yedekleme stratejisi.
- İmaj sürümlerini sabitleyin (
postgres:17gibi);latestetiketine güvenmeyin. - 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.