Docker bir sanallaştırma metodolojisi değildir. Kapsayıcı tabanlı sanallaştırma veya işletim sistemi düzeyinde sanallaştırma gerçekleştiren diğer araçlara dayanır. Bunun için Docker başlangıçta LXC sürücüsü kullanıyordu, sonra şimdi runc olarak yeniden adlandırılan libcontainer'a taşındı. Docker öncelikle uygulamaların uygulama kapları içine dağıtımını otomatikleştirmeye odaklanır. Uygulama kapları tek bir hizmeti paketlemek ve çalıştırmak için tasarlanırken, sistem kapları sanal makineler gibi birden çok işlemi çalıştırmak üzere tasarlanmıştır. Dolayısıyla Docker, kapsayıcı sistemlerde kapsayıcı yönetimi veya uygulama dağıtım aracı olarak kabul edilir.
Diğer sanallaştırmalardan nasıl farklı olduğunu bilmek için sanallaştırmayı ve türlerini inceleyelim. O zaman orada farkın ne olduğunu anlamak daha kolay olurdu.
sanallaştırma
Tasarlanan formunda, birden fazla uygulamanın aynı anda çalışmasına izin vermek için ana çerçeveleri mantıksal olarak bölme yöntemi olarak kabul edildi. Bununla birlikte, şirketler ve açık kaynak toplulukları ayrıcalıklı yönergeleri bir şekilde ele alma yöntemi sağlayabildiğinde ve birden çok işletim sisteminin tek bir x86 tabanlı sistemde aynı anda çalışmasına izin verdiğinde senaryo büyük ölçüde değişti.
hipervizör
Hiper denetimci, konuk sanal makinelerin üzerinde çalıştığı sanal ortamı oluşturmayı ele alır. Konuk sistemlerini denetler ve misafirlere gerekli kaynakların tahsis edilmesini sağlar. Hiper yönetici, fiziksel makine ile sanal makineler arasında yer alır ve sanal makinelere sanallaştırma hizmetleri sağlar. Bunu gerçekleştirmek için, sanal makinelerde konuk işletim sistemi işlemlerini durdurur ve ana makinenin işletim sistemindeki işlemi taklit eder.
Sanallaştırma teknolojilerinin, özellikle bulutta, hızlı gelişimi, Xen, VMware Player, KVM gibi hipervizörlerin yardımıyla tek bir fiziksel sunucuda birden fazla sanal sunucunun oluşturulmasına izin vererek sanallaştırma kullanımını daha da ileriye taşımıştır ve Intel VT ve AMD-V gibi emtia işlemcilerinde donanım desteğinin dahil edilmesi.
Sanallaştırma Türleri
Sanallaştırma yöntemi, donanımı konuk işletim sistemine nasıl taklit ettiğine ve konuk işletim ortamına öykünmesine bağlı olarak kategorize edilebilir. Öncelikle, üç tür sanallaştırma vardır:
- emülasyon
- sanallaştırma
- Kapsayıcı tabanlı sanallaştırma
emülasyon
Tam sanallaştırma olarak da bilinen emülasyon, sanal makine işletim sistemi çekirdeğini tamamen yazılımda çalıştırır. Bu tipte kullanılan hipervizör, Tip 2 hipervizör olarak bilinir. Konuk işletim sistemi çekirdek kodunu yazılım yönergelerine çevirmekten sorumlu olan ana bilgisayar işletim sisteminin en üstüne yüklenir. Çeviri tamamen yazılımda yapılır ve herhangi bir donanım katılımı gerektirmez. Emülasyon, taklit edilen ortamı destekleyen modifiye edilmemiş herhangi bir işletim sisteminin çalıştırılmasını mümkün kılar. Bu tür sanallaştırmanın olumsuz tarafı, diğer sanallaştırma türlerine kıyasla performansta bir azalmaya yol açan ek bir sistem kaynağı ek yüküdür.
Bu kategorideki örnekler arasında VMware Player, VirtualBox, QEMU, Bochs, Paralellikler vb.
sanallaştırma
Tip 1 hipervizör olarak da bilinen paravirtualization doğrudan donanım veya “çıplak metal” üzerinde çalışır ve doğrudan üzerinde çalışan sanal makinelere sanallaştırma hizmetleri sağlar. İşletim sisteminin, sanallaştırılmış donanımın ve gerçek donanımın en iyi performansı elde etmek için işbirliği yapmasına yardımcı olur. Bu hipervizörler tipik olarak oldukça az yer kaplar ve kendileri için kapsamlı kaynaklar gerektirmez.
Bu kategorideki örnekler Xen, KVM vb.
Kapsayıcı Tabanlı Sanallaştırma
İşletim sistemi düzeyinde sanallaştırma olarak da bilinen kap tabanlı sanallaştırma, tek bir işletim sistemi çekirdeğinde birden çok yalıtılmış yürütmeye olanak tanır. Mümkün olan en iyi performans ve yoğunluğa sahiptir ve dinamik kaynak yönetimine sahiptir. Bu tür bir sanallaştırma tarafından sağlanan yalıtılmış sanal yürütme ortamına kap adı verilir ve izlenen bir işlem grubu olarak görüntülenebilir.
Bir kap kavramı Linux çekirdek 2.6.24 sürümüne eklenen ad alanları özelliğiyle mümkün kılınmıştır. Kapsayıcı, kimliğini her işleme ekler ve her sistem çağrısına yeni erişim denetimi denetimleri ekler. Önceki global ad alanlarının ayrı örneklerinin oluşturulmasına izin veren clone () sistem çağrısı tarafından erişilir .
Ad alanları birçok farklı şekilde kullanılabilir, ancak en yaygın yaklaşım, kabın dışındaki nesnelere görünürlüğü veya erişimi olmayan yalıtılmış bir kap oluşturmaktır. Kapsayıcı içinde çalışan işlemler, temel çekirdeği diğer ad alanlarında bulunan ve diğer nesne türleri için aynı olan işlemlerle paylaşsalar da normal bir Linux sisteminde çalışıyor gibi görünmektedir. Örneğin, ad alanlarını kullanırken, kapsayıcı içindeki kök kullanıcı, kapsayıcı dışında kök olarak değerlendirilmez ve ek güvenlik ekler.
Kapsayıcı tabanlı sanallaştırmayı etkinleştirmenin bir sonraki ana bileşeni olan Linux Kontrol Grupları (cgroups) alt sistemi, süreçleri gruplandırmak ve toplam kaynak tüketimini yönetmek için kullanılır. Genellikle kapların bellek ve CPU tüketimini sınırlamak için kullanılır. Kapsayıcı bir Linux sistemi yalnızca bir çekirdeğe sahip olduğundan ve çekirdek kaplarda tam görünürlüğe sahip olduğundan, yalnızca bir düzeyde kaynak ayırma ve zamanlama vardır.
LXC, LXD, systemd-nspawn, lmctfy, Warden, Linux-VServer, OpenVZ, Docker vb. Gibi Linux kapsayıcıları için çeşitli yönetim araçları mevcuttur.
Kaplar ve Sanal Makineler
Sanal bir makineden farklı olarak, bir konteynerin işletim sistemi çekirdeğini önyüklemesi gerekmez, böylece kaplar bir saniyeden daha kısa sürede oluşturulabilir. Bu özellik, kapsayıcı tabanlı sanallaştırmayı diğer sanallaştırma yaklaşımlarından daha benzersiz ve cazip hale getirir.
Kapsayıcı tabanlı sanallaştırma ana makineye çok az ek yük eklediğinden veya ek yük getirmediğinden, kapsayıcı tabanlı sanallaştırma yerel performansa yakın bir performansa sahiptir
Kapsayıcı tabanlı sanallaştırma için, diğer sanallaştırmaların aksine ek yazılım gerekmez.
Bir ana makine üzerindeki tüm kaplar, ana makine zamanlayıcısını paylaşarak ekstra kaynak ihtiyacından tasarruf eder.
Kap durumları (Docker veya LXC görüntüleri) sanal makine görüntülerine kıyasla küçük boyuttadır, bu nedenle kap görüntülerinin dağıtılması kolaydır.
Kapsayıcılardaki kaynak yönetimi, gruplar halinde sağlanır. Cgroups, kapların kendilerine tahsis edilenden daha fazla kaynak tüketmesine izin vermez. Ancak, şu an itibariyle, ana makinenin tüm kaynakları sanal makinelerde görülebilir, ancak kullanılamaz. Bu, konteynerler ve ana makine üzerinde aynı anda çalıştırılarak top
veya gerçekleştirilerek gerçekleştirilebilir htop
. Tüm ortamlardaki çıktı benzer görünecektir.
Güncelleme:
Docker, Linux dışı sistemlerde kapsayıcıları nasıl çalıştırır?
Linux çekirdeğindeki özellikler nedeniyle kapsayıcılar mümkünse, Linux ile ilgili olmayan sistemlerin kapsayıcıları nasıl çalıştırdığı açıktır. Hem Mac için Docker hem de Windows kapsayıcıları çalıştırmak için Linux VM'lerini kullanır. Sanal Kutu VM'lerinde kapsayıcıları çalıştırmak için kullanılan Docker Toolbox. Ancak, en son Docker, Windows'ta Hyper-V ve Mac'te Hypervisor.framework kullanıyor.
Şimdi, Mac için Docker'ın kapsayıcıları nasıl ayrıntılı olarak çalıştırdığını açıklayayım.
Mac için Docker , hiper yönetici yeteneklerini taklit etmek için https://github.com/moby/hyperkit kullanır ve Hyperkit çekirdeğinde hypervisor.framework kullanır. Hipervizör. Çerçeve Mac'in yerel hipervizör çözümüdür. Hyperkit ayrıca ağ ve dosya sistemini adlandırmak için VPNKit ve DataKit kullanır.
Docker'ın Mac'te çalıştırdığı Linux VM'si salt okunurdur. Ancak, bunu çalıştırarak bash yapabilirsiniz:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
.
Şimdi, bu VM'nin Çekirdek sürümünü bile kontrol edebiliriz:
# uname -a
Linux linuxkit-025000000001 4.9.93-linuxkit-aufs #1 SMP Wed Jun 6 16:86_64 Linux
.
Tüm kapsayıcılar bu VM'nin içinde çalışır.
Hipervizörde bazı sınırlamalar vardır. Çerçeve. Bu nedenle Docker, docker0
Mac'te ağ arayüzünü açığa çıkarmaz . Böylece, ana bilgisayardan kapsayıcılara erişemezsiniz. Şu an itibariyle docker0
, yalnızca VM içinde kullanılabilir.
Hyper-v, Windows'daki yerel hipervizördür. Ayrıca Linux sistemlerini yerel olarak çalıştırmak için Windows 10'un yeteneklerinden yararlanmaya çalışıyorlar.