Kaplarda Konuk İşletim Sistemi yoksa, neden Docker'lı bir OS Base Image kullanıyoruz?


83

Docker'ı incelemeye yeni başladım ve benim için kafa karıştırıcı bir şey var. Docker'ın web sitesinde okuduğum gibi, bir konteyner sanal makineden farklı. Anladığım kadarıyla bir kapsayıcı, içinde bütün bir yalıtılmış dosya sisteminin çalıştığı bir sanal alandır.

Ayrıca bir konteynerin bir Konuk İşletim Sistemi yüklü olmadığını da okudum. Bunun yerine, temel işletim sistemi çekirdeğine güvenir.

Bunların hepsi iyi. Kafam karıştı, işletim sistemlerinden sonra adlandırılmış Docker görüntüleri var. Ubuntu, Debian, Fedora, CentOS ve benzeri görüntüler görüyoruz.

Demek istediğim: bu görüntüler nedir, gerçekten? Debian imajına dayalı bir konteyner oluşturmak, bir Sanal Makine oluşturmak ve Debian'ı kurmaktan ne kadar farklıdır?

Konteynerlerin hiçbir Konuk İşletim Sistemi yüklü olmadığını sanıyordum, ancak resimler oluştururken bunları bir işletim sisteminden sonra adlandırılan bazı resimlere dayandırıyoruz.

Ayrıca, yaptığımız zaman gördüğüm örneklerde docker run ubuntu echo "hello world", bir VM'yi Ubuntu ile döndürüyor ve komutu çalıştırıyoruz echo "hello world".

Aynı şekilde yaptığımızda docker run -it ubuntu /bin/bash, bir VM'yi Ubuntu ile döndürüyoruz ve komut satırını kullanarak erişiyoruz.

Her neyse, işletim sisteminden sonra adlandırılan görüntüler neyle ilgili? Bu görüntülerden biriyle bir konteynır çalıştırmak ve ilgili Misafir işletim sistemi ile bir VM'yi döndürmek ne kadar farklıdır?

Çekirdeği sadece ana işletim sistemi işletim sistemiyle paylaştığımız fikri (ve dolayısıyla donanımın sanallaştırılması gerekmeksizin temel makine donanım kaynaklarına erişimimiz var), ancak yine de her bir farklı sistemin dosyalarını ve ikili kodlarını sırasıyla kaplarda kullanın. Çalıştırmak istediğimiz herhangi bir uygulamayı desteklemek için?


2
Kanımca sanallaştırmadaki hedefleriniz anahtardır. İşletim sistemi üzerinde kitaplıklara, dillere vb. İhtiyacınız varsa, işletim sistemi kapları ihtiyaçlarınızı karşılar. Ancak, gereksiniminiz yalnızca bileşen olarak bir uygulama ise, işletim sisteminizi temel görüntünüz olarak kullanmak gerekmez. Bu makalenin açıkça blog.risingstack.com/…
metamorph

Yanıtlar:


68

Tüm Linux dağıtımları aynı şekilde çalıştığından (evet, biraz basitleştirilmiştir) Linux çekirdeği ve yalnızca kullanıcı yazılımı için farklıdır, farklı bir dağıtım ortamını simüle etmek oldukça kolaydır - sadece bu kullanıcı alanı yazılımını yükleyerek ve bunun başka bir dağıtım olduğunu iddia ederek. Spesifik olarak, Centunt konteynerini Ubuntu OS'ye kurmak, kullanıcı adını CentOS'tan almaya devam edeceğiniz anlamına gelir; aynı çekirdeği çalıştırırken, başka bir çekirdeği bile değil.

Bu yüzden hafif sanallaştırma, aynı işletim sistemi içerisinde izole edilmiş bölmelere sahip olmak gibidir. Au contraire gerçek sanallaştırma, ana bilgisayar işletim sistemi içinde başka bir tam teşekküllü işletim sistemine sahip. Bu nedenle, liman işçisi Linux içinde FreeBSD veya Windows çalıştıramaz.

Bu daha kolay olurdu, liman işçisi çok karmaşık ve gelişmiş bir chroot ortamı olduğunu düşünebilirsiniz.


3
Bu yüzden derlenmiş golang kodumu boş Scratch konteynerinde barındırabiliyorum - çünkü derlenmiş kodun sadece çekirdeğe ihtiyacı var?
Francis Norton

Peki misafir işletim sistemi, işletim sistemi sunucusunun çekirdeğini (ve nasıl yapacağını) kullanmayı nasıl biliyor? AFAIK, liman işçisi görüntü tabanları standart işletim sistemi görüntüleri kullanır. Örnekte, ebeveynin çekirdeğini kullanmayı bilen özel bir CentOS yapısı yok mu? Yoksa Docker'ın konukları (CentOS ') okuduğunu / önyüklemesini ana bilgisayara (Ubuntu) okuduğunu / yönlendirdiğini gösteren bir dosya sistemi (aufs) numarası kadar basit mi? Bu durumda, konuk (CentOS) kendi / önyükleme kopyasını yükler, ancak hiç okumaz mıydı?
James S

Açıklamanızı seviyorum ama Windows'ta Linux kapsayıcıları çalıştırmayı nasıl açıklarsınız? Server 2016 ve Windows 10, Docker kullanımını etkinleştirmek için bir Linux çekirdeği içeriyor mu? Bu yüzden bu versiyonlar gerekli mi?
duct_tape_coder

Bu basittir: doğal bir Linux VM'sinde Hyper-V'nin tam teşekküllü sanallaştırma yığını altında çalışırlar : docs.microsoft.com/en-us/virtualization/windowscontainers/… .
çaylak

1

Konteynerler tek çekirdekli çalışır. Diğer bir deyişle, tüm kaplar tek çekirdeklidir (Host OS). Öte yandan, hiper yöneticilerin birden fazla çekirdeği vardır. Her sanal makine farklı çekirdeklerde çalışır.

Ve "docker run ubuntu" sadece chroot ortamı yaratmak gibidir.

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.