Yan yana
Docker ComposevsKubernetes
Docker Compose ile Kubernetes arasındaki fark nedir?
Güncellendi 2 dk okuma7 fark
Kısaca
Docker Compose çok container'lı bir uygulamayı tek makinede çalıştırır; Kubernetes ise container'ları bir kümede ölçekleme ve otomatik onarımla yönetir.
Docker Compose
Docker Compose, web sunucusu ve veritabanı gibi birkaç container'dan oluşan uygulamaları tek bir YAML dosyası ve tek komutla tanımlayıp çalıştıran araçtır.
Docker Compose sayfasını okuKubernetes
Kubernetes, konteynerli uygulamaların bir makine kümesi üzerinde dağıtılmasını, ölçeklenmesini ve yönetilmesini otomatikleştiren açık kaynaklı bir sistemdir.
Kubernetes sayfasını okuDocker Compose ve Kubernetes karşılaştırması
| Özellik | Docker Compose | Kubernetes |
|---|---|---|
| Nerede çalışır | Tek bir makinede | Çok sayıda makineden oluşan bir kümede |
| Yapılandırma | Tek bir compose.yaml | Çok sayıda manifest ya da Helm chart'ı |
| Kendi kendini iyileştirme | Tek host'ta yeniden başlatma politikaları | Pod'ları düğümler arasında otomatik yeniden zamanlar |
| Ölçekleme | Tek host'ta elle | Küme genelinde otomatik |
| Kademeli güncellemeler | Temel düzeyde | Geri almayla birlikte yerleşik |
| Öğrenme eğrisi | Yumuşak | Dik |
| En uygun olduğu | Yerel geliştirme ve küçük dağıtımlar | Ölçekli production sistemleri |
Fark, açıklamalı
İkisi de birkaç container'dan oluşan uygulamaları YAML ile tarif eder. Docker Compose basit seçenektir: bir compose.yaml bir web uygulaması, bir veritabanı ve bir önbellek gibi servisleri listeler; docker compose up da onları tek bir host'ta ortak bir ağ ve volume'larla birlikte başlatır. Yerel geliştirme, test ve küçük tek sunuculu dağıtımlar için idealdir.
Kubernetes ise birçok makine üzerindeki production için yapılmıştır. Deployment'ları, Service'leri ve diğer nesneleri tanımlarsınız; kontrol düzlemi de kümeyi o durumda tutar: pod'ları düğümlere zamanlar, çöken container'ları yeniden başlatır, arızalanan makinelerin yerine yenilerini koyar, replikaları yukarı ve aşağı ölçekler, yeni sürümleri kademeli olarak yayar ve trafiği Service'ler ile Ingress üzerinden yönlendirir.
Bu gücün bedeli karmaşıklıktır: kümelerin, ağın, storage class'ların, secret'ların, rol tabanlı erişimin ve izlemenin hepsinin anlaşılması gerekir; birçok ekibin bir bulut sağlayıcısının yönetilen Kubernetes'ini kullanmasının nedeni budur. Compose ise bir öğleden sonrada öğrenilebilir; sonradan Compose'dan Kubernetes'e geçmek de dosyaları çevirmek için Kompose gibi araçlarla çok denenmiş bir yoldur.
Sık yapılan bir yanlış, her production sisteminin Kubernetes'e ihtiyaç duyduğunu düşünmektir. Tek bir sunucudaki ya da Cloud Run, Fly.io veya bir PaaS gibi bir platformdaki küçük bir uygulama daha basit, daha ucuz ve aynı ölçüde güvenilir olabilir. Kubernetes; çok sayıda servis çalıştırdığınızda, makineler arasında yüksek erişilebilirliğe ihtiyaç duyduğunuzda ya da yoğun ölçekleme ihtiyaçlarınız olduğunda karşılığını verir.
Hangisini kullanmalısınız?
Docker Compose şu durumlarda doğru seçim:
- Her geliştiricinin makinesinde aynı çok container'lı kurulumu istiyorsunuz.
- Küçük bir uygulamayı tek bir sunucuya dağıtıyorsunuz.
- CI'daki entegrasyon testleri için veritabanları gibi bağımlılıklara ihtiyacınız var.
Kubernetes şu durumlarda doğru seçim:
- Makineler arasında erişilebilir kalması gereken çok sayıda servis çalıştırıyorsunuz.
- Otomatik ölçeklemeye, kendi kendini iyileştirmeye ve kademeli dağıtımlara ihtiyacınız var.
- Kuruluşunuzun becerileri ya da yönetilen bir Kubernetes servisi var.
Sık sorulan sorular
Docker Compose'u production'da kullanabilir miyim?
Evet, tek sunucudaki küçük uygulamalar için. Çok makineli yedeğe geçiş ve otomatik ölçeklemesi yoktur; bu yüzden büyük sistemler genellikle bir orkestratöre ya da yönetilen bir platforma geçer.
Kubernetes kullanıyorsam Docker Compose'a ihtiyacım var mı?
Birçok ekip hızlı ve hafif olduğu için yerel geliştirmede hâlâ Compose'u, staging ve production için de Kubernetes'i kullanır.
Compose'dan Kubernetes'e nasıl geçerim?
Her servisi bir Deployment'a ve bir Service'e çevirin, yapılandırmayı ConfigMap'lere ve Secret'lara taşıyın, veri için volume'lar kullanın. Kompose otomatik olarak bir başlangıç noktası üretebilir.