Ana içeriğe geç

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ı oku

Kubernetes

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ı oku

Docker ve Kubernetes karşılaştırması

ÖzellikDockerKubernetes
Nedirİmaj oluşturmak ve konteyner çalıştırmak için bir araçKonteynerleri makineler arasında orkestre eden bir platform
KapsamTek bir ana makineÇok düğümlü bir küme
Ana birimBir konteyner ya da Compose ile çok konteynerli bir uygulamaDeployment ve Service'ler aracılığıyla yönetilen bir pod
ÖlçeklemeElle: daha fazla konteyneri kendiniz başlatırsınızYüke göre otomatik yatay ölçekleme
Kendini onarmaTek bir makinede yeniden başlatma politikalarıBaşarısız pod'ları sağlıklı düğümlere yeniden zamanlar
YapılandırmaBir Dockerfile ve bir compose.yaml dosyasıİstenen durumu tarif eden YAML manifestleri
Öğrenme eğrisiYumuşak; bir gün içinde üretken olunurDik; birçok kavram ve hareketli parça
En uygun olduğu yerYerel 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

Dockerbash
# 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
Kubernetesbash
# 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=10

Sı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.

Daha fazla

Ayarlar