Yan yana
DockervsKubernetes
Docker ile Kubernetes arasındaki fark nedir?
Güncellendi 2 dk okuma8 fark
Kısaca
Docker konteyner imajı oluşturur ve konteynerleri tek makinede çalıştırır; Kubernetes ise onları bir kümede yönetir: zamanlama, ölçekleme ve kendini onarma.
Docker
Docker, bir uygulamayı ve ihtiyaç duyduğu her şeyi, her makinede aynı şekilde çalışan bir konteyner içinde paketlemeye yarayan açık kaynaklı bir platformdur.
Docker 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 ve Kubernetes karşılaştırması
| Özellik | Docker | Kubernetes |
|---|---|---|
| Nedir | İmaj oluşturmak ve konteyner çalıştırmak için bir araç | Konteynerleri makineler arasında orkestre eden bir platform |
| Kapsam | Tek bir ana makine | Çok düğümlü bir küme |
| Ana birim | Bir konteyner ya da Compose ile çok konteynerli bir uygulama | Deployment ve Service'ler aracılığıyla yönetilen bir pod |
| Ölçekleme | Elle: daha fazla konteyneri kendiniz başlatırsınız | Yüke göre otomatik yatay ölçekleme |
| Kendini onarma | Tek bir makinede yeniden başlatma politikaları | Başarısız pod'ları sağlıklı düğümlere yeniden zamanlar |
| Yapılandırma | Bir Dockerfile ve bir compose.yaml dosyası | İstenen durumu tarif eden YAML manifestleri |
| Öğrenme eğrisi | Yumuşak; bir gün içinde üretken olunur | Dik; birçok kavram ve hareketli parça |
| En uygun olduğu yer | Yerel geliştirme, CI ve küçük dağıtımlar | Çok sayıda servisi olan büyük canlı sistemler |
Fark, açıklamalı
Docker, bir uygulamayı bir Dockerfile ile konteyner imajı olarak paketlemek ve o imajı tek bir ana makinede konteyner olarak çalıştırmak için bir araçlar bütünüdür. Kubernetes ise açık kaynaklı bir orkestrasyon platformudur: istenen durumu, örneğin 'bu imajın üç kopyasını tek bir adresin arkasında çalıştır' diye tarif edersiniz ve o, bir makine kümesini bu tarife uygun tutar.
Farklı düzeylerde çalışırlar. Docker 'bu uygulamayı nasıl paketler ve çalıştırırım?' sorusuna, Kubernetes ise 'yüzlerce konteyneri birçok sunucuda güvenilir biçimde nasıl çalıştırırım?' sorusuna yanıt verir. Kubernetes başarısız konteynerleri yeniden başlatır, onları düğümlere (node) yayar, yeni sürümleri kademeli olarak devreye alır ve yüke göre ölçekler; tek bir Docker ana makinesi bunu kendi başına yapmaz.
Rakip değil, birbirini tamamlarlar. Yaygın bir iş akışı, imajları Docker ile oluşturmak, bir konteyner kayıt defterine (registry) göndermek ve Kubernetes'in onları çekip canlıda çalıştırmasına izin vermektir. Kubernetes, konteynerleri OCI standardını izleyen containerd gibi çalışma ortamları üzerinden çalıştırır; bu yüzden Docker ile oluşturulan imajlar değişmeden çalışır.
Sık yapılan bir yanlış, Kubernetes'in Docker'dan vazgeçtiği ve Docker imajlarının artık orada çalışmadığı düşüncesidir. 2022'de Kubernetes, Docker Engine için yerleşik bir bağdaştırıcı olan dockershim'i kaldırdı; ama Docker ile oluşturulan imajlar standart OCI imajlarıdır ve her yerde çalışmaya devam eder. Bir diğeri, her projenin Kubernetes'e ihtiyacı olduğu düşüncesidir: küçük bir uygulama için Docker Compose ya da yönetilen bir konteyner servisi çoğu zaman yeterlidir.
Hangisini kullanmalısınız?
Docker şu durumlarda doğru seçim:
- Bir uygulamayı paketliyor ya da yerel geliştirme ortamı kuruyorsunuz.
- Uygulamanız birkaç konteynerle tek bir sunucuda çalışıyor.
- CI'da tutarlı, tekrarlanabilir derlemeler istiyorsunuz.
Kubernetes şu durumlarda doğru seçim:
- Otomatik ölçekleme ve kendini onarma gerektiren birçok servis çalıştırıyorsunuz.
- Uygulamanız tek tek makineler bozulduğunda bile erişilebilir kalmalı.
- Birkaç ekip ortak altyapıya bağımsız olarak dağıtım yapıyor.
- Kademeli güncellemeler (rolling update) ile bildirimsel, sürüm denetimli dağıtımlar istiyorsunuz.
Bir uygulamayı her araçla çalıştırmak
# Docker: build an image and run one container on this machine
docker build -t shop:1.0 .
docker run -d -p 8080:80 shop:1.0
# If this machine goes down, so does the app# Kubernetes: declare what you want; the cluster keeps it true
kubectl create deployment shop --image=registry.example.com/shop:1.0 --replicas=3
kubectl expose deployment shop --port=80 --type=LoadBalancer
# Scale out and let Kubernetes place the new pods on healthy nodes
kubectl scale deployment shop --replicas=10Sık sorulan sorular
Kubernetes kullanmak için Docker'a ihtiyacım var mı?
Hayır. Kubernetes konteynerleri containerd ya da CRI-O gibi çalışma ortamları üzerinden çalıştırır ve Docker dahil, OCI uyumlu herhangi bir aracın oluşturduğu imajları çalıştırabilir.
Kubernetes, Docker'ın yerini mi alıyor?
Hayır. Farklı işler yaparlar: Docker çoğunlukla geliştirme sırasında konteyner oluşturmak ve çalıştırmak için kullanılır, Kubernetes ise onları canlıda ölçekli olarak çalıştırır.
Docker Compose, Kubernetes'ten nasıl farklıdır?
Docker Compose, ilişkili bir konteyner grubunu tek bir dosyadan tek bir makinede çalıştırır; bu geliştirme için harikadır. Kubernetes ise konteynerleri bir küme boyunca yönetir; ölçekleme ve yük devretme (failover) yerleşiktir.