Bir Docker konteynerinin içindeki işlemler neye benziyor?


33

Docker kabının ne olduğu ve Docker kabının içindeyken çağıracağım komutlar ve işlemler konusunda içeride neler olup bittiğine dair son zamanlarda birkaç kez kafa karışıklığı oluştuğunu duydum.

Birisi lütfen neler olup bittiğine dair yüksek düzeyde bir genel bakış sağlayabilir mi?


3
Doğru olmasa da (ve neden cevap olarak yazmayacağım) Docker'ı sanal bir makine olarak süslü bir chroot olarak düşünmeyi daha kolay buluyorum. Bu doğru değil, ama kafamda görselleştirmeye çalışırken yardımcı olur.
coteyr

2
@coteyr - Bu analojiden bahsetmeniz çok komik, Docker'ın ne yaptığını tarif etmeye çalışırken tam olarak bunu kullandım. IMO Docker, sanallaştırma ile karşılaştırıldığında, chroot ile çok daha fazla ortak noktaya sahip.
slm

Yanıtlar:


53

Docker sanallaştırma kovasına atılır, çünkü insanlar bir şekilde altındaki donanımı sanallaştırdığını varsayar. Bu, Docker'ın kullandığı terminolojiden, özellikle de konteyner teriminden geçen bir yanlış isimdir.

Ancak Docker, bir sistemin donanımını sanallaştırma konusunda büyülü bir şey yapmıyor. Aksine, Linux Çekirdeğinin, bir sürecin ağ, dosya sistemi ve etkileşime girdiğiniz yanılsamasını vermesi için izinler (diğer şeylerin yanı sıra) gibi kaynaklarla etkileşime girmesini sağlayan temel tesisler etrafında "çitler" kurma yeteneğinden yararlanıyor. tamamen işlevsel bir sistemle.

İşte bir Docker konteyneri başlattığımızda neler olup bittiğini gösteren bir örnek /bin/bash.

$ docker run -it ubuntu:latest /bin/bash
root@c0c5c54062df:/#

Şimdi bu kabın içinden kaçmak biz eğer ps -eaf:

    SS01

Docker kapsayıcısını barındıran ana sisteme giriş yaptığımız başka bir terminal sekmesine geçerek, kapsayıcının "gerçekten" kapladığı işlem alanını görebiliriz:

    ss02

Şimdi Docker sekmesine geri dönüp içindeki çeşitli işlemleri başlatıp bunların arkaplanını bırakırsak, başlangıçta Docker konteyner lansmanının bir parçası olarak başlattığımız birincil Bash işlemi altında çalışan birkaç alt işlem olduğumuzu görebiliriz.

NOT: İşlemler sleep 1000arkaplanlı 4 komuttur.

    ss03

Docker konteynerinin içerisindeki işlemlere, 48-51 arasındaki işlem kimlikleri (PID'ler) atandığına dikkat edin. Bunları ps -eafçıktılarında da görün :

    ss04

Bununla birlikte, bu sonraki görüntüyle Docker'ın gerçekleştirdiği "sihir" in çoğu ortaya çıkar.

    ss05

4 sleep 1000sürecin gerçekte yalnızca orijinal Bash sürecimize göre alt süreçler olduğunu görün. Ayrıca, orijinal Docker konteynerimizin /bin/bashaslında Docker daemon'unda bir alt işlem olduğunu unutmayın .

Şimdi, orijinal sleep 1000komutların bitmesi için 1000+ saniye beklememiz ve ardından 4 yenisini daha çalıştırıp şöyle bir Docker konteynerini başlatmak için:

$ docker run -it ubuntu:latest /bin/bash
root@450a3ce77d32:/#

Ana bilgisayarın çıktısı ps -eafşöyle görünür:

    ss06

Ve diğer Docker konteynerleri de Docker daemonu altındaki süreçler olarak ortaya çıkacak.

Görüyorsunuz, Docker gerçekten sanallaştırmıyor ( geleneksel anlamda ), çeşitli Çekirdek kaynakları etrafında "çitler" inşa ediyor ve belirli bir süreç + çocuklar için görünürlüğünü sınırlıyor.


Ayrıca liman işçisi, çalışan konteyner başına yalıtılmış bir kullanıcı alanı oluşturur.
Bhargav Nanekalva, 7:16

3

İçinde konteyner, senin süreçler (karantinaya) izole edilmelidir. Aslında, herhangi bir işlemi görmemeniz gerekir, ancak belirttiğinizler (en azından bir kabuk). "Girişkenlik" testi için değil. Chroot ile olan tek benzerlik, konak çekirdeğin kullanılmasıdır. Bir şeyi yalıtmanız veya platform mimarisi yazılımının farklı sürümlerini kullanmanız gerekiyorsa, Docker harikadır. (Java'nın çok eski sürümleri ya da farklı bir Python çatalı söylüyorlar). Çalıştığınız klasörlerin ve ikili dosyaların ana bilgisayardakilerle aynı olmayabileceğinin farkında olun. Aynı / bin klasörü vb. Değil.

EDIT: VM'lerden ziyade chroot ile benzerlik.


1
Düzenlendi, eski bir Xen başlığıyla düşünüyordum. Açıkçası, Windows KVM / Qemu altında çalışırken veya VirtualBox altında 32 bit bir ana bilgisayarda 64 bit VM çalıştırırken durum böyle değil. (sorma). AWS için pv-hvm argümanına benzer.
mckenzm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.