Docker, uygulamaları bağımlılıklarıyla birlikte paketleyen bir container (konteyner) platformudur. Kubernetes ise bu container'ları büyük ölçekte yönetmek, dağıtmak ve otomatik olarak ölçeklendirmek için kullanılan bir orkestrasyon aracıdır. İkisi birbirinin rakibi değil, birbirini tamamlayan teknolojilerdir ve modern yazılım geliştirme dünyasının temel taşlarını oluşturur.
İçindekiler
- Container Nedir?
- Docker Nedir ve Ne İşe Yarar?
- Kubernetes Nedir ve Nasıl Çalışır?
- Docker ve Kubernetes Arasındaki Fark Nedir?
- Container Ekosistemi Nasıl Bir Araya Gelir?
- Docker ve Kubernetes Birlikte Nasıl Kullanılır?
- Kim Kullanmalı, Hangi Durumda Tercih Edilmeli?
- TL;DR
- Sonuç
Container Nedir?
Container, bir uygulamayı çalıştırmak için gereken her şeyi, yani kodu, bağımlılıkları, kütüphaneleri ve yapılandırmaları tek bir taşınabilir birim içinde barındıran yazılım paketidir. Sanal makinelere (Virtual Machine) benzese de çok daha hafif ve hızlıdır çünkü işletim sistemi çekirdeğini ana makineyle paylaşır.
Geleneksel yazılım geliştirmede "bende çalışıyor ama sunucuda çalışmıyor" sorunu herkese tanıdık gelir. Container teknolojisi tam da bu sorunu ortadan kaldırmak için geliştirilmiştir. Uygulama hangi ortamda çalışırsa çalışsın, container içindeki her şey sabittir ve tutarlı biçimde davranır.
Container'lar, mikro servis (microservice) mimarisiyle de doğal bir uyum içindedir. Her servis kendi container'ında bağımsız çalışır, bağımsız güncellenir ve bağımsız ölçeklenir. Bu yapı, büyük ve karmaşık uygulamaları yönetilebilir parçalara bölmeyi mümkün kılar.
Docker Nedir ve Ne İşe Yarar?
Docker, container oluşturmayı, paylaşmayı ve çalıştırmayı kolaylaştıran açık kaynaklı bir platformdur. 2013 yılında piyasaya çıktığında yazılım dünyasında gerçek bir dönüşüm başlattı. Bugün neredeyse her modern geliştirme ortamının vazgeçilmez bir parçası haline geldi.
Docker'ın temel bileşenlerini anlamak, bu platformun nasıl çalıştığını kavramak açısından kritiktir.
Docker Image (Görüntü), bir container'ın şablonudur. İçinde uygulamanın çalışması için gereken her şey bulunur. Bu görüntüler katmanlı bir yapıya sahiptir ve bir kez oluşturulduktan sonra her ortamda aynı şekilde çalışır.
Docker Container ise bu görüntünün çalışan bir örneğidir. Bir image'dan istediğiniz kadar container başlatabilirsiniz. Her container izole bir ortamda çalışır ve diğer container'larla ya da ana sistemle çakışmaz.
Dockerfile, bir image'ın nasıl oluşturulacağını tarif eden metin dosyasıdır. Hangi temel işletim sistemi kullanılacağından hangi paketlerin kurulacağına kadar tüm adımlar burada tanımlanır. Bu sayede image oluşturma süreci tekrarlanabilir ve otomatikleştirilebilir hale gelir.
Docker Hub ise GitHub'a benzer biçimde çalışan, hazır image'ların paylaşıldığı merkezi bir depodur (registry). Nginx, PostgreSQL, Node.js gibi popüler teknolojilerin resmi image'larına buradan saniyeler içinde ulaşabilirsiniz.
Docker Compose, birden fazla container'ın bir arada tanımlandığı ve tek bir komutla ayağa kaldırıldığı araçtır. Örneğin bir web uygulaması, veritabanı ve önbellek servisini tek bir YAML dosyasıyla yönetmek mümkündür.
Özetle Docker, geliştirici makinesinden test ortamına, oradan production sunucusuna kadar tutarlı bir yazılım dağıtım altyapısı sunar.
Kubernetes Nedir ve Nasıl Çalışır?
Kubernetes, Google tarafından geliştirilen ve 2014 yılında açık kaynak olarak yayımlanan bir container orkestrasyon (container orchestration) platformudur. Bugün Cloud Native Computing Foundation (CNCF) bünyesinde geliştirilmekte ve endüstri standardı olarak kabul görmektedir.
Docker tek bir makinede container yönetimini kolaylaştırırken, Kubernetes onlarca hatta yüzlerce sunucuya yayılmış binlerce container'ı merkezi bir yerden yönetme imkânı sunar. Bunun neden önemli olduğunu bir örnekle somutlaştırmak gerekirse: bir e-ticaret platformu kampanya günlerinde trafiğin on katına çıkabileceği anlarda, manuel müdahale olmadan otomatik olarak ölçeklenebilmelidir. Kubernetes tam da bunu yapan sistemdir.
Kubernetes'in mimarisi birkaç temel kavram üzerine kuruludur.
Cluster (Küme), birden fazla sunucunun (node) bir araya gelmesiyle oluşan yapıdır. Bu sunucular hem fiziksel hem de sanal makine olabilir.
Node, cluster içindeki her bir sunucudur. Üzerinde container'ların çalıştığı birimdir.
Pod, Kubernetes'in en küçük dağıtım birimidir. İçinde bir ya da birden fazla container barındırabilir. Aynı pod içindeki container'lar birbirleriyle ağ ve depolama kaynaklarını paylaşır.
Control Plane (Denetim Düzlemi), tüm cluster'ı yönetir. Hangi pod'un nerede çalışacağına karar verir, sağlık kontrolü yapar ve istenen durumu (desired state) korur.
Scheduler, pod'ları uygun node'lara atayan bileşendir. Kaynakları dengeli biçimde dağıtmak için çalışır.
Kubernetes'in en önemli özelliklerinden biri kendi kendini iyileştirme (self-healing) kapasitesidir. Bir pod çökerse Kubernetes onu otomatik olarak yeniden başlatır. Bir node kullanılamaz hale gelirse üzerindeki iş yükleri başka node'lara taşınır. Tüm bu süreç yönetici müdahalesi gerektirmeden gerçekleşir.

Docker ve Kubernetes Arasındaki Fark Nedir?
Bu iki teknoloji çoğu zaman birbirine karıştırılır ya da rekabet eden ürünler olarak lanse edilir. Oysa ikisi tamamen farklı katmanlarda çalışır ve birbirini tamamlar.
Docker, container oluşturma ve çalıştırma platformudur. Bir geliştirici uygulamasını paketleyip çalıştırmak istediğinde Docker'a ihtiyaç duyar. Kubernetes ise bu container'ları geniş ölçekte yönetme platformudur. Üretim ortamında yüzlerce container'ı koordine etmek, trafiği yönetmek ve sistemi ayakta tutmak için kullanılır.
Basit bir benzetme yapmak gerekirse: Docker bir nakliye konteyneri oluşturur, Kubernetes ise bu konteynerlerin hangi gemiye yükleneceğini, rota planlamasını ve liman operasyonlarını organize eder.
Kapsam açısından değerlendirildiğinde Docker tek bir host üzerinde ya da birkaç makinede container yönetimi için yeterlidir. Kubernetes ise büyük ölçekli, çok sayıda sunucuya yayılmış production ortamları için tasarlanmıştır.
Karmaşıklık boyutunda Docker kurulumu ve kullanımı son derece basittir, öğrenim eğrisi düşüktür. Kubernetes güçlü olmakla birlikte yapılandırması daha karmaşık olup ciddi bir öğrenme süreci gerektirir.
Ölçekleme konusunda Docker Compose ile sınırlı ölçekleme yapılabilir. Kubernetes ise hem yatay (horizontal) hem de dikey (vertical) otomatik ölçeklemeyi destekler, yük durumuna göre pod sayısını dinamik olarak ayarlar.
Container Ekosistemi Nasıl Bir Araya Gelir?
Docker ve Kubernetes, daha geniş bir container ekosisteminin (container ecosystem) merkezinde yer alır. Bu ekosistemin tam olarak anlaşılması, hangi aracın hangi amaca hizmet ettiğini kavramak açısından önemlidir.
Container Registry, image'ların depolandığı ve dağıtıldığı yerdir. Docker Hub en yaygın bilinenidir. Bunun yanı sıra Amazon ECR, Google Container Registry ve kendi barındırabileceğiniz Harbor gibi seçenekler de mevcuttur.
CI/CD Pipeline (Sürekli Entegrasyon ve Dağıtım), geliştirici kodunu commit ettiğinde otomatik olarak image oluşturulmasını, test edilmesini ve Kubernetes cluster'ına dağıtılmasını sağlayan süreçtir. Jenkins, GitLab CI ve GitHub Actions bu süreçte yaygın olarak kullanılır.
Service Mesh, Kubernetes üzerinde çalışan servisler arasındaki ağ trafiğini yöneten, güvence altına alan ve izleyen bir altyapı katmanıdır. Istio ve Linkerd en popüler örnekleridir.
Monitoring ve Observability araçları, container ekosisteminin sağlığını izlemek için kritik öneme sahiptir. Prometheus ve Grafana kombinasyonu, Kubernetes ortamlarında en yaygın kullanılan izleme çözümüdür.
Helm, Kubernetes için paket yöneticisi olarak tanımlanabilir. Karmaşık uygulamaları "chart" adı verilen şablonlarla kolayca dağıtmayı ve yönetmeyi mümkün kılar.
Docker ve Kubernetes Birlikte Nasıl Kullanılır?
Pratikte bu iki teknoloji genellikle birlikte çalışır ve aralarında net bir iş bölümü vardır.
Geliştirme aşamasında geliştirici Docker kullanarak uygulamayı container'a alır. Dockerfile ile image tanımlanır, Docker Compose ile yerel geliştirme ortamı ayağa kaldırılır. Bu aşamada Kubernetes'e genellikle ihtiyaç duyulmaz.
Test aşamasında CI/CD pipeline devreye girer. Yeni kod push edildiğinde otomatik olarak Docker image oluşturulur, testler çalıştırılır ve başarılı görüntü registry'ye gönderilir.
Dağıtım ve production aşamasında Kubernetes devralır. Registry'deki image Kubernetes tarafından cluster'a çekilir, belirlenen sayıda pod başlatılır, trafik yönlendirmesi yapılır ve sistem sürekli izlenir.
Gartner'ın araştırmaları, büyük ölçekli kurumsal uygulamaların yüzde sekseninden fazlasının container teknolojilerini benimsediğini ortaya koymaktadır. Bu oran her geçen yıl artmaya devam etmektedir.
Kim Kullanmalı, Hangi Durumda Tercih Edilmeli?
Her teknoloji her ihtiyaca cevap vermez. Docker ve Kubernetes için de bu durum geçerlidir.
Docker'ı şu durumlarda tercih etmelisiniz: küçük veya orta ölçekli projeleriniz varsa, tek bir sunucu ya da sınırlı sayıda makinede çalışıyorsanız, geliştirme ortamını standartlaştırmak istiyorsanız veya container dünyasına yeni giriş yapıyorsanız. Docker Compose, birkaç servisin bir arada çalıştığı senaryolar için oldukça yeterlidir.
Kubernetes'e geçmeyi düşünmelisiniz: yüzlerce ya da binlerce container yönetiyorsanız, yüksek erişilebilirlik (high availability) ve sıfır kesinti süresini (zero downtime) garanti etmeniz gerekiyorsanız, trafik dalgalanmalarına göre otomatik ölçekleme istiyorsanız veya multi-cloud ya da hybrid cloud stratejisi uyguluyorsanız. McKinsey'in dijital dönüşüm araştırmalarına göre Kubernetes'i benimseyen kuruluşlar, altyapı maliyetlerini ortalama yüzde otuz oranında azaltmayı başarmaktadır.
Bulut sağlayıcılarının yönetilen Kubernetes hizmetleri, yani Amazon EKS, Google GKE ve Azure AKS, bu geçişi önemli ölçüde kolaylaştırmıştır. Kendi cluster'ınızı sıfırdan kurmak zorunda kalmadan Kubernetes'in tüm avantajlarından yararlanmak artık çok daha erişilebilir bir seçenek haline gelmiştir.
TL;DR
Docker, uygulamaları container içinde paketler ve çalıştırır. Kubernetes, bu container'ları büyük ölçekte orkestre eder. İkisi birbirinin alternatifi değildir; Docker container oluşturur, Kubernetes bu container'ları yönetir. Küçük projeler için Docker yeterlidir. Production ortamında ölçek büyüdükçe Kubernetes kaçınılmaz hale gelir. Modern yazılım geliştirme dünyasında bu iki teknolojiyi birlikte öğrenmek artık temel bir yetkinlik sayılmaktadır.
Sonuç
Docker ve Kubernetes, birbirini tamamlayan iki güçlü teknoloji olarak modern yazılım altyapısının temelini oluşturuyor. Docker, geliştirme sürecini standartlaştırırken Kubernetes bu standardı production ortamında ölçeklenebilir ve güvenilir biçimde hayata geçiriyor. Container ekosistemi yalnızca büyük şirketlerin meselesi olmaktan çıktı; startup'lardan kurumsal kuruluşlara kadar her ölçekteki ekip bu teknolojilerden faydalanıyor.
Eğer henüz container dünyasına adım atmadıysanız ya da mevcut süreçlerinizi modernize etmek istiyorsanız, doğru başlangıç noktası Docker'dır. Altyapınız büyüdükçe ve ihtiyaçlarınız karmaşıklaştıkça Kubernetes'in sunduğu otomasyon ve ölçekleme kapasitesi vazgeçilmez hale gelecektir.
Kaynakça
İlginizi Çekebilecek Diğer İçeriklerimiz
Nöromorfik hesaplama, biyolojik sinir sistemlerinin yapısından ilham alan bir bilgisayar mühendisliği ve nörobilim disiplinidir. Temel amacı, insan beyninin olağanüstü enerji verimliliğini ve paralel işlem kapasitesini yapay sistemlere aktarmaktır.
Yapay zeka, e-ticaret sektöründe kişiselleştirmeden tedarik zinciri optimizasyonuna, dolandırıcılık tespitinden içerik üretimine kadar neredeyse her operasyonel katmanı dönüştüren bir teknoloji haline geldi. Bloomreach'in araştırmasına göre e-ticaret işletmelerinin yüzde seksen dördü yapay zekayı en öncelikli stratejik gündem maddesi olarak tanımlıyor. Bu oran, yapay zekanın artık deneysel bir alan olmaktan çıkıp sektörün rekabet zeminini yeniden çizdiğini açıkça ortaya koyuyor.









