Docker Compose Tam Kılavuzu

Her servis için manuel Docker komutları çalıştırmayı bırakın.

Modern bir uygulama çalıştırıyorsanız, muhtemelen bir frontend, bir backend, bir veritabanı ve bir cache'e sahipsinizdir. Bunları tek tek çalıştırmak yavaştır ve hatalara açıktır.

Docker Compose bunu çözer. Tüm yığınınızı (stack) tek bir YAML dosyasında tanımlarsınız ve her şeyi tek bir komutla başlatırsınız.

Temeller

  • Compose olmadan: Dört konteyner için dört ayrı komut çalıştırırsınız.
  • Compose ile: "docker compose up" komutunu çalıştırırsınız ve her şey başlar.

Önemli Kavramlar

• Services (Servisler): Her servis bir konteyneri temsil eder. Kendi kodunuz için "build" kullanabilir veya PostgreSQL veya Redis gibi önceden oluşturulmuş araçlar için "image" kullanabilirsiniz. • Port Mapping (Port Eşleme): HOST:CONTAINER formatını kullanın. Bu, bilgisayarınızdaki portu konteyner portuna eşler. • Environment Variables (Ortam Değişkenleri): Basit değerler için "environment" veya gizli bilgileri ayrı bir .env dosyasında tutmak için "env_file" kullanın. • Volumes (Birimler): Verilerinizi güvende tutmak için volume kullanın. Volume kullanmazsanız, konteyner durduğunda veritabanı verileriniz kaybolur. • Networks (Ağlar): Compose otomatik olarak bir ağ oluşturur. Konteynerler, localhost yerine servis isimlerini kullanarak birbirleriyle iletişim kurarlar. • Depends_on: Bu, başlatma sırasını belirler. Docker'a backend'den önce veritabanını başlatmasını söyler. Veritabanının tamamen hazır olmasını beklemediğini unutmayın.

Mülakat İpuçları

  • build vs image ne zaman kullanılır? Özel uygulamanız için "build" kullanın. Docker Hub'daki mevcut araçlar için "image" kullanın.
  • Konteynerler nasıl iletişim kurar? Docker ağı içinde servis isimlerini hostname olarak kullanırlar.
  • Veri kaybı nasıl önlenir? Veritabanları için her zaman isimlendirilmiş (named) volume'lar kullanın.
  • Gizli bilgiler (secrets) nasıl yönetilir? Onları asla kodun içine doğrudan yazmayın (hardcode). Bir .env dosyası kullanın.

Kaçınılması Gereken Yaygın Hatalar

  • "latest" etiketini kullanmak: Bu, beklenmedik güncellemelere neden olur. "postgres:16" gibi belirli sürümler kullanın.
  • localhost kullanmak: Konteynerler birbirlerini localhost üzerinden göremezler. Servis ismini kullanın.
  • Healthcheck eksikliği: Servisinizin gerçekten çalışmaya hazır olup olmadığını izlemek için healthcheck kullanın.

Kaynak: https://dev.to/adityaguptareal/docker-compose-complete-guide-1gac