Kubernetes vs Docker: Farkları, İlişkileri ve Ne Zaman Hangisi?
2026-07-20 · 15 dk okuma
İçindekiler
Kubernetes vs Docker — bu ikili, cloud ve DevOps dünyasına yeni adım atan hemen herkesin ilk takıldığı sorulardan biri. Forumlarda, iş ilanlarında ve eğitim başlıklarında sürekli yan yana geçtikleri için çoğu kişi "Kubernetes mi Docker mı öğrenmeliyim?" diye düşünür. Oysa bu sorunun kendisi yanlış kurulmuştur: Kubernetes ve Docker rakip değildir; büyük çoğunlukla birlikte çalışan, farklı katmanlarda farklı problemleri çözen iki araçtır. Bu yazıda ikisi arasındaki gerçek ilişkiyi, hangisinin neyi çözdüğünü, nasıl bir arada kullanıldıklarını ve senin projende hangisine ihtiyacın olduğunu net bir şekilde anlatacağız.
Kısaca özetlemek gerekirse: Docker uygulamanı bir konteyner imajına paketler ve tek bir makinede çalıştırır. Kubernetes ise onlarca, yüzlerce konteyneri birden fazla sunucu üzerinde orkestra eder — ölçekler, dağıtır, çöktüğünde yeniden ayağa kaldırır. Yani biri "paketle ve çalıştır", diğeri "binlerce kopyayı yönet" işini yapar. Doğru soru "hangisi" değil, "ne zaman hangisi ve nasıl birlikte" olmalı.
En yaygın yanlış anlama: Rakip değiller
"Kubernetes vs Docker" ifadesindeki vs aslında yanıltıcı. Docker ile Kubernetes'i karşılaştırmak, bir tuğla üreticisiyle bir şantiye şefini karşılaştırmaya benzer. Tuğla üreticisi (Docker) standart, taşınabilir yapı taşları üretir; şantiye şefi (Kubernetes) bu yapı taşlarından koca bir binayı, doğru yerlere yerleştirerek, çöken duvarları yenileyerek ve iş yükü arttığında yeni katlar ekleyerek inşa eder. İkisi farklı işler yapar ve genellikle aynı projede yan yana bulunurlar.
Kafa karışıklığının bir kısmı, Docker'ın tek bir araç olmamasından kaynaklanır. "Docker" dediğimizde aslında birden fazla şeyi kastediyoruz: imaj formatı, imaj oluşturma aracı (docker build), tek makinede konteyner çalıştıran motor (Docker Engine) ve birden fazla konteyneri lokal olarak yöneten docker compose. Kubernetes ise tek işe odaklanır: konteynerleri bir küme (cluster) üzerinde orkestra etmek. Karşılaştırılması gereken şey "Docker'ın orkestrasyon parçası" (Docker Swarm) ile Kubernetes'tir — Docker'ın kendisiyle değil.
Not
Terminoloji notu: "Konteyner" bir çalıştırma birimidir; "imaj" ise o konteynerin dondurulmuş, dağıtılabilir şablonudur. Docker imaj üretir ve çalıştırır; Kubernetes bu imajlardan üretilen konteynerleri yönetir. İkisinin ortak dili OCI (Open Container Initiative) imaj standardıdır.
Docker ne çözer? Paketleme ve taşınabilirlik
Docker'ın çözdüğü temel problem meşhur "benim makinemde çalışıyordu" sendromudur. Bir uygulama; belirli bir dil sürümü, sistem kütüphaneleri, ortam değişkenleri ve dosya yapısı ister. Bu bağımlılıklar geliştiricinin dizüstünde bir, test sunucusunda başka, prodüksiyonda daha başka olduğunda hatalar kaçınılmazdır. Docker, uygulamayı ve tüm bağımlılıklarını tek bir taşınabilir imaja hapseder. Bu imaj nerede çalışırsa çalışsın aynı davranır.
Konteynerler sanal makinelerden farklıdır: her biri kendi işletim sistemini taşımaz, ana makinenin çekirdeğini (kernel) paylaşır ve yalnızca uygulamayı izole eder. Bu sayede saniyeler içinde başlar, megabaytlarla ölçülen boyutlarda kalır ve tek bir sunucuda onlarca konteyner rahatça yaşar. Docker'ın temellerini ve imaj katmanı mantığını hiç görmediysen, devam etmeden önce Docker nedir? Temelleri yazısını okuman şiddetle önerilir — bu yazının geri kalanı o bilgiyi varsayar.
Docker'ın günlük döngüsü
Bir geliştiricinin Docker ile tipik akışı üç adımdan oluşur: bir Dockerfile yaz, ondan imaj build et, imajı konteyner olarak run et. Aşağıda basit bir örnek görüyorsun.
# Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]$ docker build -t benim-uygulamam:1.0 .✓ imaj oluşturuldu: benim-uygulamam:1.0$ docker run -d -p 3000:3000 benim-uygulamam:1.0✓ konteyner çalışıyor (a1b2c3d4)$ curl localhost:3000/health{"status":"ok"}
Bu akış tek bir uygulamayı tek bir makinede çalıştırmak için mükemmeldir. Birden fazla servisi (örneğin web + veritabanı + önbellek) lokal olarak ayağa kaldırmak istediğinde ise docker compose devreye girer: tek bir docker-compose.yml dosyasıyla tüm servisleri bir komutta başlatırsın. Peki ya bu yığını 50 sunucuya yayıp trafik altında otomatik ölçeklemen, biri çöktüğünde otomatik yeniden başlatman ve sıfır kesintiyle güncellemen gerekirse? İşte tam bu noktada Docker'ın kapsamı biter ve Kubernetes'in kapsamı başlar.
İpucu
Docker imajın ne kadar küçük olursa, hem build hem deploy o kadar hızlı olur. alpine tabanlı imajlar ve çok aşamalı (multi-stage) build'ler, prodüksiyon imajını yüzlerce megabayttan onlarca megabayta indirebilir. Bu optimizasyon Kubernetes'e geçtiğinde de karşılığını misliyle verir.
Kubernetes ne çözer? Orkestrasyon
Bir uygulamayı konteynerleştirmek kolaydır. Zor olan, o uygulamanın prodüksiyonda binlerce kullanıcıya, kesintisiz, ölçeklenebilir şekilde hizmet vermesidir. Tek bir konteyner çöktüğünde onu kim yeniden başlatır? Trafik iki katına çıktığında yeni kopyaları kim ayağa kaldırır? Yeni bir sürüm deploy ederken kullanıcıların hizmet almaya devam etmesini kim garanti eder? Bir sunucu tamamen ölürse üzerindeki iş yüklerini başka sunuculara kim taşır? Bütün bu soruların cevabı orkestrasyondur ve Kubernetes bu işin fiili standardıdır.
Kubernetes, bir cluster (birden fazla sunucudan oluşan havuz) üzerinde konteynerleri yöneten bir platformdur. Sen ona "bu uygulamadan her zaman 5 kopya çalışsın, 80 portundan erişilebilsin ve %70 CPU'yu geçince otomatik büyüsün" dersin; Kubernetes bu arzu edilen durumu (desired state) sağlamak için sürekli çalışır. Bu bildirimsel (declarative) model, Kubernetes'in en güçlü fikridir: sen "nasıl" değil "ne" istediğini söylersin, gerisini kontrol döngüleri (controllers) halleder. Kubernetes'e sıfırdan giriş yapmak istersen Kubernetes: Sıfırdan Başlangıç rehberi tam da bu zihniyeti oturtur.
Kubernetes'in çözdüğü dört temel iş
- Ölçekleme (scaling): Bir komutla ya da otomatik (HPA — Horizontal Pod Autoscaler) olarak kopya sayısını artırıp azaltır.
- Kendini iyileştirme (self-healing): Çöken konteynerleri yeniden başlatır, sağlıksızları trafikten çıkarır, ölen sunuculardaki iş yüklerini yeniden dağıtır.
- Servis keşfi ve yük dengeleme (service discovery): Konteynerlere sabit isimler ve IP'ler verir, gelen trafiği sağlıklı kopyalara dağıtır.
- Yayın yönetimi (rollout/rollback): Yeni sürümleri kademeli (rolling update) yayınlar, bir sorun çıkarsa tek komutla eski sürüme döner.
Kubernetes'in en temel çalıştırma birimi konteyner değil, Pod'dur. Pod, bir ya da birden fazla konteyneri birlikte barındıran en küçük dağıtım birimidir. Pod'lar geçicidir (ephemeral): ölür, yeniden doğar, IP'leri değişir. İşte bu yüzden Pod'lara doğrudan erişmek yerine önlerine bir Service koyarız — Service, arkasındaki değişken Pod'lara sabit bir adres ve yük dengeleme sağlar. Bu katman o kadar kritik ki ayrı bir yazıyı hak ediyor: farklı erişim ihtiyaçları için Kubernetes Service türleri (ClusterIP, NodePort, LoadBalancer) arasındaki farkları mutlaka öğren.
$ kubectl apply -f deployment.yaml✓ deployment.apps/benim-uygulamam oluşturuldu$ kubectl get podsNAME READY STATUS RESTARTSbenim-uygulamam-7d9f-2xk4l 1/1 Running 0benim-uygulamam-7d9f-9plm2 1/1 Running 0benim-uygulamam-7d9f-qz7v8 1/1 Running 0$ kubectl scale deployment benim-uygulamam --replicas=10✓ 10 kopyaya ölçeklendi$ kubectl rollout undo deployment benim-uygulamam✓ önceki sürüme geri alındı
Yukarıdaki terminal çıktısına dikkat et: docker run tek bir konteyner başlatırken, kubectl bir arzu edilen durumu tüm cluster'a uygular. docker run ile başlattığın konteyner çökerse öylece kalır; Kubernetes'te bir Pod çökerse Deployment onu otomatik yeniden ayağa kaldırır. Aradaki felsefe farkı budur.
Kubernetes'in içinde ne var? Control plane ve node'lar
Kubernetes'in "küme" olması, iki tip sunucudan oluşmasından gelir. Control plane (kontrol düzlemi) cluster'ın beynidir: kube-apiserver tüm komutların kapısıdır, etcd cluster'ın durumunu saklayan dağıtık veritabanıdır, scheduler yeni Pod'ları hangi node'a yerleştireceğine karar verir ve controller-manager arzu edilen durumu sürekli gerçek durumla karşılaştırıp aradaki farkı kapatır. Worker node'lar ise gerçek iş yüklerinin — yani senin konteynerlerinin — çalıştığı makinelerdir; her birinde bir kubelet (control plane'den emir alan ajan) ve bir container runtime (containerd) bulunur.
Docker'da böyle bir ayrım yoktur: tek bir makine, tek bir motor ve doğrudan çalıştırdığın konteynerler vardır. Bu mimari fark, iki aracın neden farklı sınıf problemler çözdüğünü de özetler — Docker tek bir kutuyu, Kubernetes ise koca bir veri merkezini yönetmek için tasarlanmıştır. Sen bir Deployment YAML'ı apply ettiğinde arka planda apiserver isteği alır, etcd'ye yazar, scheduler node seçer, kubelet containerd'ye "şu imajı çalıştır" der. Tek satır komutun ardında dönen çark budur.
Docker ve Kubernetes birlikte nasıl çalışır?
Şimdi işin en çok yanlış anlaşılan kısmına geldik. "Kubernetes Docker'ın yerini aldı" diye bir söylenti duymuş olabilirsin. Bu, yarı doğru ama tamamen yanıltıcı bir ifade. Gerçeği anlamak için Kubernetes'in bir Pod'u nasıl çalıştırdığına bakmak gerekir.
Kubernetes konteynerleri kendisi çalıştırmaz; bu iş için bir container runtime (konteyner çalışma zamanı) kullanır. Kubernetes ile runtime arasındaki iletişim CRI (Container Runtime Interface) adı verilen standart bir arayüz üzerinden olur. Yıllarca bu runtime olarak Docker Engine kullanıldı. Ancak Docker Engine, CRI'yi doğrudan konuşmadığı için araya dockershim adında bir çevirmen konuyordu. Kubernetes 1.24 (2022) ile bu çevirmen kaldırıldı ve Kubernetes artık doğrudan CRI uyumlu runtime'larla — özellikle containerd ve CRI-O ile — konuşuyor.
İşte can alıcı nokta: containerd zaten Docker'ın içinden çıkma bir projedir. Docker'ı kurduğunda arka planda konteynerleri çalıştıran motor zaten containerd'dir. Yani Kubernetes "Docker'ı bıraktı" derken kastedilen, yalnızca gereksiz dockershim katmanının kaldırılmasıdır — Docker'ın ürettiği imajlar Kubernetes'te hiçbir değişiklik olmadan çalışmaya devam eder.
Dikkat
Yaygın panik: "Kubernetes Docker'ı kaldırdı, imajlarımı yeniden mi yapmam gerek?" Hayır. Docker imajları OCI standardındadır; containerd, CRI-O ve diğer tüm CRI runtime'ları bu imajları sorunsuz çalıştırır. docker build ile ürettiğin imaj Kubernetes'te olduğu gibi çalışır. Değişen tek şey, cluster'ın iç mutfağındaki runtime katmanıdır — ki bunu bir uygulama geliştirici olarak neredeyse hiç fark etmezsin.
Pratikte tipik bir modern iş akışı şöyledir: geliştirici lokalde Docker ile imaj build eder ve test eder → imaj bir registry'ye (Docker Hub, Artifact Registry, ECR) push edilir → CI/CD hattı bu imajı alıp Kubernetes'e deploy eder → Kubernetes imajı containerd üzerinden konteyner olarak cluster'da çalıştırır. Docker geliştirme ve build tarafında, Kubernetes ise prodüksiyon çalıştırma ve yönetim tarafında yaşar. Bu boru hattının nasıl kurulduğunu merak ediyorsan CI/CD nedir? yazısı zinciri baştan sona anlatır.
Docker vs Kubernetes: Yan yana karşılaştırma
Aşağıdaki tablo, ikisinin farklı katmanlarda yaşadığını net biçimde gösteriyor. Sütunları "rakip özellikler" gibi değil, "tamamlayıcı roller" olarak oku.
| Boyut | Docker | Kubernetes |
|---|---|---|
| Kapsam (scope) | Tek makine; imaj build + tek/az sayıda konteyner çalıştırma | Çok makineli cluster; yüzlerce konteynerin orkestrasyonu |
| Temel birim | Konteyner / imaj | Pod (bir veya daha fazla konteyner) + Deployment/Service |
| Ölçekleme | Manuel (docker run ile elle kopya) | Bildirimsel + otomatik (replicas, HPA) |
| Ağ (networking) | Tek host bridge/port yönlendirme | Cluster-genişliğinde servis keşfi, DNS, yük dengeleme |
| Kendini iyileştirme | Yok (restart policy sınırlı) | Var (çöken Pod otomatik yeniden başlar, node failover) |
| Yayın/geri alma | Manuel | Rolling update + tek komutla rollback |
| Öğrenme eğrisi | Düşük — birkaç günde temel akış | Yüksek — kavram bolluğu, haftalar sürebilir |
| Tipik kullanım | Geliştirme, build, CI, küçük tek-sunucu deploy | Prodüksiyon, mikroservis, yüksek erişilebilirlik |
Güncel Sistemlerle Karşılaştırma
Tek cümlede fark: Docker konteyneri yaratır ve çalıştırır; Kubernetes o konteynerlerin yaşam döngüsünü bir küme üzerinde yönetir. Docker olmadan (ya da başka bir imaj aracı olmadan) çalıştıracak bir şeyin olmaz; Kubernetes olmadan da ölçek ve dayanıklılık elle omuzlarında kalır.
Ne zaman sadece Docker (veya Compose) yeterli?
Kubernetes güçlüdür ama bedava değildir: kavramsal karmaşıklık, operasyonel yük ve altyapı maliyeti getirir. Her projeye Kubernetes koymak, çivi çakmak için ekskavatör kiralamaya benzer. Aşağıdaki durumlarda büyük ihtimalle Kubernetes'e ihtiyacın yok:
- Tek bir uygulama ya da birkaç servisten oluşan küçük/orta ölçekli bir proje çalıştırıyorsun.
- Trafik öngörülebilir ve tek bir (belki iki) sunucu rahatça karşılıyor.
- Ekibin küçük ve adanmış bir platform/altyapı mühendisin yok.
- Lokal geliştirme, demo ortamı veya CI test ortamı kuruyorsun.
- Hobi projesi, MVP ya da erken aşama startup'sın; hız ve basitlik önceliğin.
Bu senaryolarda docker compose çoğu ihtiyacı fazlasıyla karşılar. Hatta "managed" konteyner servisleri (Google Cloud Run, AWS App Runner, Azure Container Apps gibi) tek bir Docker imajını alıp otomatik ölçekleyerek çalıştırır — Kubernetes'in karmaşıklığına hiç girmeden. Bu yazıyı okuduğun Cloudpuz platformunun kendisi de tek bir Docker imajı olarak Cloud Run üzerinde çalışıyor; arkasında Kubernetes yok ve bu tamamen bilinçli bir karar.
Not
Genel kural: Önce en basit çözümle başla. Docker + Compose ya da managed bir konteyner servisiyle yürü. Gerçekten çok sayıda servisi, karmaşık ağ politikalarını, otomatik ölçeklemeyi ve çoklu ekip iş birliğini yönetmen gerektiğinde Kubernetes'e geç. Erken Kubernetes, çözdüğünden fazla problem yaratır.
Ne zaman Kubernetes gerçekten gerekir?
Öte yandan, aşağıdaki işaretlerden birden fazlası sende varsa Kubernetes'in getirdiği karmaşıklık kendini fazlasıyla amorti eder:
- Mikroservis mimarisi: Onlarca bağımsız servisi ayrı ayrı deploy, ölçekle ve yönetmen gerekiyor.
- Değişken/yüksek trafik: Yükün gün içinde ya da kampanyalarda katlanıyor; otomatik ölçekleme şart.
- Yüksek erişilebilirlik: Kesinti kabul edilemez; bir sunucu çökse bile hizmetin sürmesi gerekiyor.
- Çoklu ekip / çoklu ortam: Birden fazla ekip aynı altyapıda kaynak izolasyonuyla (namespace) çalışıyor.
- Standartlaşma ihtiyacı: Deploy, gizli anahtar yönetimi, ağ ve gözlemlenebilirlik için tutarlı, bildirimsel bir platform istiyorsun.
Bu noktada iyi haber şu: Kubernetes'i sıfırdan kurmak (control plane, etcd, node'lar) zorunda değilsin. Bulut sağlayıcıların managed Kubernetes servisleri işin ağır kısmını üstlenir.
GKE, EKS, AKS: Bulutta yönetilen Kubernetes
Üç büyük bulut sağlayıcının da yönetilen bir Kubernetes servisi vardır. Bunlar control plane'i (Kubernetes'in beyni) senin yerine yönetir; sen yalnızca iş yüklerine ve worker node'lara odaklanırsın.
| Servis | Sağlayıcı | Kısaca |
|---|---|---|
| GKE — Google Kubernetes Engine | Google Cloud | Kubernetes'in doğduğu evden; Autopilot modu node yönetimini de soyutlar. |
| EKS — Elastic Kubernetes Service | AWS | AWS ekosistemiyle (IAM, VPC, ELB) derin entegrasyon. |
| AKS — Azure Kubernetes Service | Azure | Azure AD ve DevOps araçlarıyla sıkı bütünleşme. |
Bir noktayı vurgulamak gerek: Kubernetes hem üç büyük bulutta hem de kendi veri merkezinde (on-premise) aynı API ile çalışır. Bu taşınabilirlik, Kubernetes'in en stratejik avantajlarından biridir — uygulamanı belirli bir bulut sağlayıcının kendine özgü servislerine zincirlemek yerine, standart Kubernetes manifest'leriyle tanımlarsın ve gerektiğinde GKE'den EKS'e ya da kendi sunucularına taşırsın. Aynı taşınabilirlik ruhu, aslında Docker imajının OCI standardı sayesinde sunduğu taşınabilirliğin bir üst katmandaki yankısıdır.
Bu servisler, Kubernetes'e üretim ortamında geçişin en pratik yoludur. Yine de "managed" olması Kubernetes'i öğrenmen gerekmediği anlamına gelmez — Pod, Deployment, Service, ConfigMap ve Ingress gibi kavramları bilmen şarttır. Hangi bulut sağlayıcıda uzmanlaşacağına ve sertifika yol haritana karar verirken GCP sertifika rehberi sana somut bir plan sunar. Daha geniş bir bakış için bulut bilişim nedir? yazısı da temel kavramları oturtur.
Yönetilen servislerin en büyük katkısı, etcd yedekleme, control plane sürüm yükseltme ve yüksek erişilebilirlik gibi işletim yükünü senin omzundan almalarıdır. Örneğin GKE Autopilot modunda node'ları bile düşünmezsin: yalnızca Pod'larını tanımlarsın, altyapı otomatik ölçeklenir ve yalnızca gerçekten kullandığın kaynak kadar ödersin. Bu, "Kubernetes'in gücünü istiyorum ama tüm cluster'ı elle işletmek istemiyorum" diyen ekipler için ideal orta yoldur. Buna karşın öğrenme ve deney için lokal seçenekler de var: minikube, kind (Kubernetes-in-Docker) ve k3s ile kendi dizüstünde tam bir cluster ayağa kaldırabilirsin — üstelik kind, adı üstünde, Kubernetes node'larını Docker konteynerleri olarak çalıştırır; iki aracın iç içe geçtiğinin bir başka güzel örneği.
Öğrenme sırası: Önce Docker, sonra Kubernetes
"Kubernetes mi Docker mı önce öğrenmeliyim?" sorusunun net bir cevabı var: önce Docker. Kubernetes'in temel birimi konteynerdir; konteynerin ne olduğunu, imajların nasıl katmanlandığını ve bir uygulamanın nasıl paketlendiğini anlamadan Kubernetes'i öğrenmek, alfabeyi bilmeden roman yazmaya çalışmak gibidir.
- 1**Docker temelleri:** İmaj, konteyner, Dockerfile, katmanlar, volume ve port yönlendirme. Başlangıç için: [Docker nedir? Temelleri](/blog/docker-nedir-temelleri).
- 2**Docker Compose:** Birden fazla servisi tek dosyayla ayağa kaldırma; servisler arası ağ ve bağımlılık mantığı.
- 3**Kubernetes temelleri:** Pod, Deployment, ReplicaSet ve arzu edilen durum kavramı. Başlangıç: [Kubernetes: Sıfırdan Başlangıç](/blog/kubernetes-sifirdan-baslangic).
- 4**Kubernetes ağ ve erişim:** Service türleri, DNS, Ingress. Derinleşmek için: [Kubernetes Service türleri](/blog/kubernetes-service-turleri).
- 5**Yapılandırma ve durum:** ConfigMap, Secret, PersistentVolume; uygulamayı cluster'a doğru şekilde bağlama.
- 6**Sertifikasyon:** Bilgini kanıtlamak ve derinleştirmek için [CKA hazırlık rehberi 2026](/blog/cka-hazirlik-rehberi-2026) ile terminal-başı beceriye odaklan.
Bu sıralama tesadüf değil; her adım bir öncekinin üzerine kurulur. Docker'ı sağlam öğrenen biri Kubernetes'e geçtiğinde "bu Pod'un içindeki konteyner benim docker run ile çalıştırdığım şeyin ta kendisi" diyerek bağlantıyı hemen kurar.
Kendi cluster'ında dene: mini-lab
Teoriyi okumak bir şey, terminalde denemek bambaşka. Aşağıdaki gömülü lab ile hiçbir kurulum yapmadan, tarayıcının içinde temel kubectl komutlarını çalıştırıp bir Pod'un nasıl ayağa kalktığını, çöktüğünde nasıl kendini iyileştirdiğini kendi gözlerinle görebilirsin.
Uygulamalı görev — tarayıcıda dene
Mini görev
Lab'ı bitirdikten sonra kendine şu soruyu sor ve cevabını bir cümleyle yaz: "Bir Pod'u `kubectl delete` ile sildiğimde neden yeni bir Pod otomatik olarak ayağa kalktı — bunu sağlayan Kubernetes nesnesi hangisiydi?" (İpucu: Deployment ve arzu edilen durum.)
Kariyer açısından: DevOps yolunda ikisi de olmazsa olmaz
İş ilanlarına baktığında "Docker ve Kubernetes deneyimi" ifadesini neredeyse her DevOps, SRE ve platform mühendisi ilanında görürsün. Bunun sebebi artık açık olmalı: ikisi modern yazılım teslim zincirinin iki ucudur. Docker'ı bilmeyen biri uygulamayı paketleyemez; Kubernetes'i bilmeyen biri onu ölçekli ve dayanıklı şekilde çalıştıramaz. Bu ikili, CI/CD ve altyapı-as-code becerileriyle birleştiğinde bir DevOps mühendisinin çekirdek araç setini oluşturur.
Bu yolculuğu bir bütün olarak planlamak istiyorsan DevOps engineer nasıl olunur? yazısı; Docker ve Kubernetes'in bu haritanın neresine oturduğunu, hangi becerilerin sırayla geldiğini ve ilk işe hangi projelerle hazırlanacağını adım adım gösterir. Cloudpuz'daki hands-on rotalar da tam olarak bu sırayı takip eder: konteynerle başla, orkestrasyona geç, sertifikayla taçlandır.
Somut bir senaryo: Compose'dan Kubernetes'e geçiş
İki aracın ilişkisini bir örnekle netleştirelim. Diyelim ki bir web API'si, bir arka plan işçisi ve bir Redis önbelleğinden oluşan bir uygulamanı docker-compose.yml ile geliştirdin. Lokalde docker compose up diyorsun, her şey çalışıyor. Uygulama tuttu, kullanıcılar arttı, tek sunucu yetmemeye başladı ve kesintiler canını sıkmaya başladı. İşte tam bu noktada Compose dosyandaki her servis, Kubernetes'te bir Deployment artı bir Service'e dönüşür. Redis kalıcı veri için bir PersistentVolume ister, ortam değişkenlerin ConfigMap ve Secret'lara taşınır.
Dikkat edilecek şey: bu geçişte Docker imajların hiç değişmez. Aynı Dockerfile, aynı build, aynı imaj. Değişen tek şey, o imajları nasıl çalıştırdığın ve nasıl yönettiğin — yani orkestrasyon katmanı. Bu yüzden Docker'da harcadığın hiçbir emek boşa gitmez; Kubernetes o emeğin üzerine bir yönetim katmanı ekler. Compose'u "tek makinelik mini-Kubernetes", Kubernetes'i ise "cluster ölçeğinde Compose" gibi düşünmek zihinsel köprüyü kurmanı kolaylaştırır.
İpucu
Geçişi kolaylaştıran araçlar var: kompose isimli açık kaynak aracı bir docker-compose.yml dosyasını okuyup ilk taslak Kubernetes manifest'lerini (Deployment, Service) üretir. Çıktıyı olduğu gibi prodüksiyona koymak yerine bir öğrenme ve başlangıç noktası olarak kullan — üretilen YAML'ı okuyup her satırın ne yaptığını anlamak, Compose ile Kubernetes arasındaki eşlemeyi kavramanın en hızlı yoludur.
Sıkça Sorulan Sorular
Kubernetes Docker'ın yerini mi aldı?
Hayır. Kubernetes 1.24 ile yalnızca dockershim adlı bir iç uyumluluk katmanını kaldırdı; bu bir uygulama geliştiriciyi neredeyse hiç etkilemez. Docker ile build ettiğin OCI imajları Kubernetes'te olduğu gibi çalışmaya devam eder. Docker geliştirme/build tarafında, Kubernetes prodüksiyon orkestrasyonunda yaşar.
Önce Docker mı Kubernetes mi öğrenmeliyim?
Kesinlikle önce Docker. Kubernetes'in en küçük birimi olan Pod, konteynerlerden oluşur; konteyner ve imaj kavramlarını oturtmadan Kubernetes soyut ve kafa karıştırıcı gelir. Docker'ı birkaç günde temel seviyede öğrenip Kubernetes'e o sağlam zeminle geçmek en verimli yoldur.
Sadece Docker Compose ile prodüksiyona çıkabilir miyim?
Küçük ve orta ölçekli projeler için evet, birçok ekip tam olarak bunu yapar. Tek sunucu yeterliyse, trafik öngörülebilirse ve yüksek erişilebilirlik zorunlu değilse Compose ya da managed bir konteyner servisi (Cloud Run gibi) fazlasıyla yeterlidir. Kubernetes'e ihtiyaç, ölçek ve dayanıklılık gereksinimleri arttığında doğar.
Kubernetes containerd yerine yine de Docker kullanabilir mi?
Cluster runtime'ı olarak doğrudan Docker Engine artık kullanılmaz; standart CRI runtime'ları containerd ve CRI-O'dur. Ancak containerd zaten Docker'ın çekirdek motorudur, dolayısıyla teknoloji büyük ölçüde aynıdır. Sen imajları hâlâ Docker ile build edebilir, sonra bunları containerd tabanlı bir cluster'da çalıştırabilirsin.
Docker Swarm, Kubernetes'e alternatif mi?
Evet, doğru karşılaştırma aslında "Kubernetes vs Docker Swarm"dır — çünkü ikisi de orkestrasyon aracıdır. Swarm daha basit ve öğrenmesi kolaydır ama ekosistem, topluluk ve özellik zenginliği açısından Kubernetes fiili endüstri standardı hâline gelmiştir. Yeni bir proje için orkestrasyon öğrenecekseniz genellikle Kubernetes tavsiye edilir.
İkisini öğrenmek ne kadar sürer?
Docker'ın temellerini birkaç günde, rahat kullanımını birkaç haftada edinebilirsin. Kubernetes daha derindir; temel kavramları birkaç haftada kavrarsın ama prodüksiyon güveni ve CKA gibi bir sertifika için 6-8 haftalık düzenli, pratik ağırlıklı bir çalışma gerçekçi bir hedeftir.
Özetle: Kubernetes vs Docker bir seçim değil, bir iş bölümüdür. Docker uygulamanı taşınabilir konteynerlere paketler ve çalıştırır; Kubernetes bu konteynerleri bir küme üzerinde ölçekler, iyileştirir ve yönetir. Modern bir cloud/DevOps mühendisi ikisini de bilir ve ne zaman hangisine — çoğu zaman da ikisine birden — başvuracağını bilir. Doğru başlangıç noktası nettir: önce Docker'ın temellerini sağlam kur, ardından Kubernetes'e sıfırdan geçiş yap ve öğrendiklerini gerçek terminal önünde, gerçek cluster'larda pekiştir. Rakip aramayı bırak; ikisini birlikte ustalaş.
Resmi kaynaklar
Son doğrulama: 2026-07-21
Sıkça Sorulan Sorular
Kubernetes vs Docker: fark nedir?
Docker ve Kubernetes rakip değil, farklı katmanlarda çalışan tamamlayıcı araçlardır. Docker uygulamanı bir konteyner imajına paketler ve tek bir makinede çalıştırır; Kubernetes ise onlarca, yüzlerce konteyneri birden fazla sunucu üzerinde orkestra eder: ölçekler, dağıtır, çöktüğünde yeniden ayağa kaldırır. Kısaca biri paketle-ve-çalıştır, diğeri binlerce kopyayı-yönet işini yapar.
Kubernetes Docker'ın yerini mi aldı?
Hayır. Kubernetes 1.24 (2022) ile yalnızca dockershim adlı bir iç uyumluluk katmanını kaldırdı ve doğrudan containerd, CRI-O gibi CRI uyumlu runtime'larla konuşmaya başladı. Docker imajları OCI standardındadır, dolayısıyla docker build ile ürettiğin imajlar Kubernetes'te hiçbir değişiklik olmadan çalışmaya devam eder. Docker geliştirme/build tarafında, Kubernetes prodüksiyon orkestrasyonunda yaşar.
Önce Docker mı Kubernetes mi öğrenmeliyim?
Kesinlikle önce Docker. Kubernetes'in en küçük çalıştırma birimi olan Pod, konteynerlerden oluşur; konteyner ve imaj kavramlarını oturtmadan Kubernetes soyut ve kafa karıştırıcı gelir. Docker'ı birkaç günde temel seviyede öğrenip Kubernetes'e o sağlam zeminle geçmek en verimli yoldur.
Sadece Docker Compose ile prodüksiyona çıkabilir miyim?
Küçük ve orta ölçekli projeler için evet. Tek sunucu yeterliyse, trafik öngörülebilirse ve yüksek erişilebilirlik zorunlu değilse docker compose ya da yönetilen bir konteyner servisi (Google Cloud Run, AWS App Runner gibi) fazlasıyla yeterlidir. Kubernetes'e ihtiyaç, mikroservis, değişken/yüksek trafik ve yüksek erişilebilirlik gibi ölçek ve dayanıklılık gereksinimleri arttığında doğar.
Docker Swarm, Kubernetes'e alternatif mi?
Evet; doğru karşılaştırma aslında Kubernetes vs Docker Swarm'dır, çünkü ikisi de orkestrasyon aracıdır. Swarm daha basit ve öğrenmesi kolaydır, ancak ekosistem, topluluk ve özellik zenginliği açısından Kubernetes fiili endüstri standardı hâline gelmiştir. Yeni bir proje için genellikle Kubernetes tavsiye edilir.
İlgili Yazılar
Docker Nedir? Sıfırdan Temeller
Docker, uygulamanı her yerde aynı şekilde çalıştıran konteyner teknolojisidir. Image, container, Dockerfile kavramlarını en sade haliyle ve komut örnekleriyle anlatıyoruz.
Kubernetes'e Sıfırdan Başlangıç: Temel Kavramlar
Pod, Deployment, Service... Kubernetes terminolojisi ilk bakışta göz korkutur. Bu kavramları en sade haliyle, bir uygulamayı çalıştırma senaryosu üzerinden anlatıyoruz.
Kubernetes Service Türleri: ClusterIP, NodePort, LoadBalancer
Kubernetes'te uygulamana nasıl erişilir? ClusterIP, NodePort ve LoadBalancer service türlerinin farkını, ne zaman hangisini kullanacağını örneklerle anlatıyoruz.
CKA Sınavına 2026 Hazırlık Rehberi
Certified Kubernetes Administrator (CKA) sınavı ezber değil, terminal başında beceri ölçer. Müfredat, çalışma planı ve sınav günü taktikleriyle eksiksiz rehber.
Okumak yetmez — dene.
Bu konuları tarayıcıda gerçek terminalde uygula.