
Sanallaştırma ile konteynerleştirme arasındaki temel farklar nelerdir ve her teknoloji ne için kullanılır?
Sanallaştırma (VM'ler). Sanal makine, fiziksel donanımın soyutlanmasıdır; bir sunucuyu birçok sunucuya dönüştürür. Ana bilgisayar ile sanal makineler arasında bir hiper yönetici bulunur ve CPU, bellek ve depolamayı bir havuzda toplar. Her VM, konuk işletim sisteminin tam kopyasını, ayrıca uygulamayı ve tüm kitaplıkları içerir. Hipervizör (VMM) izolasyonu zorlar ve sınırları CPU sanallaştırma uzantıları (Intel VT-x / AMD-V) tarafından donanım desteklidir.
Hipervizörler iki türde gelir:
- Tip 1 (çıplak metal): doğrudan donanım üzerinde çalışır; temiz örnekler VMware ESXi/vSphere, Microsoft Hyper-V ve Xen'dir. KVM hibrit bir durumdur: ana bilgisayar hala sıradan işlemleri çalıştırırken çekirdeği Tip 1 hiper yöneticiye dönüştüren bir Linux çekirdek modülü.
- Tür 2 (barındırılan): geleneksel bir işletim sistemi (VirtualBox, VMware Workstation) üzerinde uygulama olarak çalışır; kişisel makinelere uygundur.
Kapsayıcılaştırma. Bir kapsayıcı, kodu ve tüm bağımlılıklarını (çalışma zamanı, kitaplıklar, ayarlar) paketler ve donanım yerine işletim sistemini sanallaştırır. Kapsayıcılar ana işletim sistemi çekirdeğini paylaşır ve kullanıcı alanında yalıtılmış işlemler olarak çalışır. Linux'ta bu, yetenekler, seccomp, MAC (SELinux/AppArmor), kullanıcı ad alanları ve köksüz mod ile daha da güçlendirilmiş ad alanları (izolasyon) ve cgroups (kaynak hesaplaması ve sınırlar) kullanır. Çekirdek paylaşımı, işletim sistemi ailesi uyumluluğu anlamına gelir: Linux kapsayıcıları bir Linux çekirdeğine ihtiyaç duyar, bu nedenle Windows/macOS üzerindeki Docker Desktop, hafif bir Linux VM'yi sessizce çalıştırır. Docker konteynerleri popüler hale getirdi ancak format OCI tarafından standartlaştırıldı; başka çalışma zamanları da mevcut: Containerd, CRI-O, Podman.
Önemli farklar:
- Boyut: kapsayıcı görüntüleri genellikle birkaç MB ile yüzlerce MB arasındadır; VM'ler GB'lerdir (sabit sayılar değil, açıklayıcı büyüklük sıraları).
- Başlatma: kapsayıcılar saniyeler/milisaniyeler içinde başlar; VM'lerin tam bir işletim sistemi başlatması gerekir.
- Ek yük: kapsayıcıların uygulama başına ayrı bir işletim sistemine ihtiyacı yoktur; daha yüksek yoğunluk, daha düşük lisans maliyetleri.
- İzolasyon/güvenlik: VM'ler daha güçlü, donanım tabanlı izolasyon sunar; konteynerler daha zayıf, yazılım tabanlı izolasyon sunar (paylaşılan çekirdekten konteynerden kaçış riski). Orta yol, sanal makine düzeyinde izolasyona yaklaşan korumalı alanlı çalışma zamanlarıdır (gVisor, Kata Containers, Firecracker).
Her biri ne için kullanılır:
- VM'ler: tek bir sunucuda farklı işletim sistemleri çalıştıran, yoğun kaynak kullanan veya monolitik iş yükleri ve güçlü izolasyon (çok kiracılı, eski uygulamalar).
- Kapsayıcılar: bulutta yerel geliştirme, mikro hizmetler, CI/CD, taşınabilirlik ve hızlı yatay ölçeklendirme (Kubernetes tarafından yönetilir).
Uygulamada ikisi tamamlayıcıdır: konteynerler genellikle çevik teslimatı güçlü izolasyonla birleştirmek için VM'lerin içinde çalıştırılır.
