Docker Compose ve Kubernetes çoğu zaman birbirinin yerine geçebilirmiş gibi konuşulur, ama aslında farklı ölçekler için tasarlanmış iki farklı araçtır. Compose, tek bir makinede birden fazla container’ı tanımlayıp ayağa kaldırmak için bir “tarif dosyası”dır; Kubernetes ise onlarca sunucuya yayılmış container’ları otomatik olarak yönetmek için bir orkestrasyon platformudur.

En büyük fark: tek makine vs. küme

Compose, docker-compose.yml dosyasındaki servisleri tek bir Docker host’unda ayağa kaldırır. Bir sunucu çökerse, o sunucudaki tüm container’lar da durur — başka bir sunucuya otomatik taşınmaz. Kubernetes ise birden fazla sunucudan (node) oluşan bir küme üzerinde çalışır; bir node çökerse, üzerindeki pod’ları otomatik olarak sağlıklı bir node’a taşır (self-healing).

Karşılaştırma tablosu

Özellik Docker Compose Kubernetes
Çalışma ortamı Tek makine (tek Docker host) Çok node’lu küme
Otomatik ölçekleme Yok (manuel --scale) Var (HPA — Horizontal Pod Autoscaler)
Kendi kendini onarma Yok, container çökerse restart policy’ye bağlı Var — sağlıksız pod otomatik yeniden başlatılır/taşınır
Servis keşfi Basit, container adı üzerinden DNS tabanlı, dahili Service kaynağıyla
Öğrenme eğrisi Düşük, birkaç saatte öğrenilir Yüksek, kavram sayısı fazla (Pod, Deployment, Service, Ingress…)
Tipik kullanım Yerel geliştirme, küçük tek sunucu production Production, yüksek erişilebilirlik gereken sistemler
Yapılandırma formatı YAML (docker-compose.yml) YAML (manifest’ler: Deployment, Service, vb.)

Neden ikisi bir arada kullanılır?

Pek çok ekip, geliştirme ortamında Compose kullanıp production’da Kubernetes’e geçer. Bunun sebebi basit: Compose dosyası saniyeler içinde ayağa kalkar, hata ayıklaması kolaydır; Kubernetes’in kurulum ve öğrenme maliyeti geliştirme aşamasında gereksiz bir yük olur. Compose’da doğrulanan servis tanımları, production’a geçerken Kubernetes manifest’lerine çevrilir (bazı araçlar — örneğin kompose — bu dönüşümü otomatikleştirebilir).

⇄

Kubernetes’i “büyütülmüş Compose” olarak düşünmek yanıltıcıdır. Compose bir çalıştırma tarifiyken, Kubernetes bir istenen durum (desired state) yöneticisidir — siz “3 kopya çalışsın” dersiniz, Kubernetes bunu sürekli olarak doğru tutar.

Hangisini seçmeli?

  • Docker Compose: Yerel geliştirme ortamı kurmak, küçük bir projeyi tek sunucuda yayınlamak veya ekibinizin operasyon kapasitesi sınırlıysa.
  • Kubernetes: Yüksek erişilebilirlik, otomatik ölçekleme, çoklu sunucuya dayanıklılık gerekiyorsa veya zaten bir bulut sağlayıcının yönetilen Kubernetes hizmetini (EKS, GKE, AKS) kullanıyorsanız.

İkisi de aynı temel birimi (container) yönetir, bu yüzden bir teknolojiden diğerine geçiş kavramsal olarak zor değildir — asıl fark, ölçek büyüdükçe elle yapılan işlerin ne kadarının otomatikleşmesini istediğinizdir.