İçeriğe geç

Rehber

Docker Compose ile çok servisli bir uygulamayı ayağa kaldırmak

Bir web uygulaması genellikle tek bir container'dan ibaret değildir — uygulama, veritabanı ve önbellek gibi birden fazla servisi birlikte yönetmek gerekir. Docker Compose bunu tek bir dosyayla çözer.

2 dk okumaOrta seviye
Docker Compose ile çok servisli bir uygulamayı ayağa kaldırmak — editoryal kapak görseli

Gerçek dünyadaki bir web uygulaması nadiren tek bir container'dan ibarettir — genellikle bir uygulama sunucusu, bir veritabanı ve bir önbellek katmanı birlikte çalışır. Bu servisleri her seferinde ayrı ayrı `docker run` komutlarıyla başlatmak yerine, Docker Compose tüm yapıyı tek bir YAML dosyasında tanımlamayı sağlar.

Örnek bir compose.yaml

Docker Compose ile yönetilen web, veritabanı ve önbellek servislerinin mimari diyagramı
Örnek bir çok servisli uygulamanın mimarisi: web uygulaması, veritabanı ve önbellek servisleri.

Docker'ın resmi dokümantasyonuna göre güncel Compose sürümleri artık ayrı bir `version:` alanı gerektirmez; dosya doğrudan `services:` anahtarıyla başlar. Üç servisli basit bir örnek aşağıdaki gibi görünür.

compose.yaml

Web, veritabanı ve önbellek servislerini tanımlayan örnek compose.yaml içeriği
Web, veritabanı ve önbellek servislerini tanımlayan örnek bir compose.yaml dosyası.

Temel kavramlar

AlanNe işe yarar
servicesHer biri bir container tanımı olan servis listesi
build / imageServisin yerel Dockerfile'dan mı yoksa hazır bir image'dan mı oluşturulacağı
depends_onServisler arası başlatma sırası (yalnızca sıra garantisi verir, servisin 'hazır' olduğunu garanti etmez)
volumesContainer silindiğinde de kalıcı olması gereken verinin (örneğin veritabanı dosyaları) saklandığı yer
environmentServise geçirilen ortam değişkenleri (bağlantı dizesi, parola gibi)
Docker Compose dosyasındaki temel alanlar ve işlevleri

Sık karşılaşılan tuzak: depends_on yeterli mi?

`depends_on`, Docker'a 'db servisini web'den önce başlat' der ama veritabanının bağlantı almaya hazır olduğunu garanti etmez — PostgreSQL container'ı başlamış olabilir ama henüz istekleri kabul etmiyor olabilir. Bu nedenle uygulama kodunun kendi içinde bağlantı yeniden deneme (retry) mantığı bulunması, ya da Compose'un `healthcheck` + `condition: service_healthy` özelliğinin kullanılması gerekir.

Temel komutlar

  • docker compose up -d — tüm servisleri arka planda başlatır
  • docker compose logs -f web — belirli bir servisin loglarını canlı takip eder
  • docker compose down — servisleri durdurur (volume'lar varsayılan olarak korunur)
  • docker compose down -v — servisleri durdurur ve volume'ları da siler (veri kaybı riski, dikkatli kullanılmalı)

Üretime geçerken dikkat edilmesi gerekenler

Geliştirme ortamında kullanılan compose dosyası genellikle doğrudan üretime taşınmamalıdır — sırlar (parolalar, API anahtarları) ortam değişkeni olarak dosyaya gömülmek yerine bir sır yönetim aracından (Docker secrets, Vault, veya bulut sağlayıcının sır yöneticisi) alınmalı; kaynak sınırları (CPU/bellek) üretim yüküne göre tanımlanmalıdır.

Kategoriler

Etiketler

Kaynaklar

  1. Docker Docs — Compose file reference

Paylaş