Liman konteynerlerinin kendi çekirdeği var mı yok mu?


65

Liman işçisi havuzundaki pek çok liman işçisi görüntüsünün bir Ubuntu tabanı ile yapıldığını görüyorum.

Bu ne anlama geliyor? Her bir kapsayıcı Linux çekirdeğinin soyulmuş bir sürümünü paketliyor mu?

Konteynırlar kendi tanelerinin üstüne mi oturuyor? Ancak, konteynerlerin ana bilgisayarın çekirdeğini paylaştığını düşündüm (bazı durumlarda boot2docker, özel bir Tiny Core Linux yapısı ve diğerlerinde CoreOS gibi).

EDIT: Soruyu biraz netleştirmek. Evet, liman işçisi tam bir VM değil, bir işlem kabı olduğunu biliyorum. Ancak resmi liman kasası kayıt defterinde ve CentOS gibi diğer işletim sistemlerinde "Ubuntu" konteynerleri bulunduğundan, Ubuntu'yu bir konteynerde çalıştırmak ne anlama gelir?

Cevap: Ahh, sadece bana doğdu. Belirli bir Ubuntu yapısı için apt-get ve diğer yapılandırma işlemlerini içeren, Ubuntu kullanıcı kara işlemleridir. CentOS için de aynı şekilde. Docker tek işlem değil, sadece tek bir giriş. Dolayısıyla, bu dağıtımlar için giriş noktası, diğer süreçleri ortaya çıkaran bir tür init işlemidir.


2
"Bu Ubuntu kullanıcısı arazi işlemleridir" - yalnızca işlemler değil, aynı zamanda kütüphaneler.
osgx 14.03.2015

Yanıtlar:


37

Docker, ana bilgisayar işletim sistemi çekirdeğini kullanır, kabın içinde özel veya ek çekirdek yoktur. Bir makinede çalışan tüm kaplar bu "konak" çekirdeği paylaşıyor.

Vikipedi diyor ) http://en.wikipedia.org/wiki/Docker_(software o

Docker, bağımsız "kapsayıcıların" tek bir Linux örneğinde çalışmasına izin vermek ve böylece sanal makinelerin yüklenmesini engellemek için Linux çekirdeğinin cgroups ve çekirdek ad alanları gibi kaynak yalıtım özelliklerini kullanır.

gruplar, ad alanları ve LXC, işlem gruplarını izole etmek için Linux çekirdeğinin özellikleridir; hala tek bir çekirdek, tek bir zamanlayıcı ve bir çekirdek bellek yöneticisi örneği var.

Boot2docker ve CoreOS, bazı ana bilgisayar çekirdeği ile yalnızca hafif Linux dağıtımlarıdır; Docker konteynerlerini yüklemek için kullanılabilirler.

http://boot2docker.io/

boot2docker, özellikle Docker kapsayıcılarını çalıştırmak için yapılan Tiny Core Linux tabanlı hafif bir Linux dağıtımıdır. Tamamen RAM'den çalışır, ~ 27MB ağırlığında ve ~ 5s (YMMV) ile önyükleme yapar.

http://en.wikipedia.org/wiki/CoreOS

Tek bir kontrol ana bilgisayarı (CoreOS örneği), Docker'ı Linux çekirdeğinin temel işletim sistemi düzeyinde sanallaştırma özelliklerine ek bir soyutlama ve arabirim [14] olarak kullanan çoklu yalıtılmış Linux sistemleri (kapsayıcılar) çalıştırır. ... Bu yaklaşım, Linux çekirdeğinin cgroups işlevine dayanır; bu, işlemlerin koleksiyonları için kaynak kullanımını (CPU, bellek, disk G / Ç, vb.) Sınırlama, hesaplama ve izole etme ad alanı yalıtımı ve yetenekleri sağlar.


1
Bu soruya cevap vermiyor.
EML

2
EML, hangi soru? Varsayılan olarak, tüm Docker konteynerlerinin kendi çekirdekleri yoktur. Tüm Docker konteynerleri için yalnızca bir ana bilgisayar çekirdeği var.
osgx

Elbette, cevabınız ne kadar iyi olursa olsun, ancak OP zatenFROM ana bilgisayar zaten Ubuntu'yu çalıştırırken neden bir Ubuntu temel görüntüsünün olması gerektiğini bilmek istedi . Soruyu cevaplamak için temel imajın ne olduğunu açıklamak zorundasınız.
EML

2
EML, cevabım gönderildikten sonra soru "Clarifying" ( superuser.com/posts/889472/revisions ) ile düzenlendi , bu yüzden açıklığa kavuşturulmadan orijinal soruya cevap geldi. Limandaki temel görüntüler ve çekirdekler hakkında paylaşacak bazı bilgileriniz varsa, başka bir cevap ekleyin.
osgx

17

Neredeyse tüm durumlarda, ana işletim sistemi çekirdeği paylaşılır. Farklı bir çekirdeği çalıştırmak için sanallaştırma kullanmanız gerekir. Bu nadirdir ve yalnızca performansın düşmesinden dolayı gerektiğinde kullanılır.

"Docker Engine konteyner yalnızca uygulama ve bağımlılıklardan oluşuyor. Çekirdeği diğer konteynerlerle paylaşan, ana bilgisayar işletim sistemindeki kullanıcı alanında yalıtılmış bir işlem olarak çalışıyor. Bu yüzden VM'lerin kaynak yalıtımı ve tahsis avantajlarından yararlanıyor ancak çok daha fazlası taşınabilir ve verimli. "

Bu nasıl çalıştığını açıklamaya yardımcı olabilir: görüntü tanımını buraya girin

Kaynak: https://www.docker.com/whatisdocker/


4
Herhangi bir kaynak "Paketler farklı çekirdekler kullanabilir" ??? Docker'ın kendisi birkaç çekirdeği kullanamaz, daima tek bir ana bilgisayar çekirdeği vardır. Yalnızca hiper yönetici (sanallaştırma) ile birleştirildiğinde, her biri kendi çekirdek sürümüne sahip birkaç ana bilgisayar başlatabilir ve sanal ana bilgisayar başına bir Docker çalıştırabiliriz; ancak herhangi bir ev sahibi için, ev sahibi ve onun
Yerleşik

2
Paket nedir? Liman konteynerinin içinde çekirdek yok; sadece ana bilgisayarda kullanılan çekirdeği yükleyip başlattı. Yani: bir Docker = bir sunucu = bir çekirdek, resimde gösterildiği gibi. Tek Docker motoruyla iki çekirdek kullanmanın bir yolu yoktur; bu motorun içindeki tüm kaplar aynı çekirdeği kullanacaktır. Bence doğru cevap "Hayır, Docker konteynerleri Docker Engine'in tek örneği içinde farklı çekirdekleri kullanamaz"
osgx

1
Her docker kabı, yazılımınızın gerektirebileceği herhangi bir çekirdeği yükleyebilen sanallaştırma yazılımı dahil olmak üzere istediği kodu çalıştırabilir. İsterseniz bir kabın içinde Windows'u çalıştırabilirsiniz.
JeremiahBarrar

1
JeremiahBarrar, Anladım, açıklama için teşekkürler. Docker kabının içinden sanallaştırma yazılımı çalıştırılması belgeleniyor mu ve Docker tarafından destekleniyor mu? Docker'dan ne tür sanallaştırma işe yarayacak (yazılım qemu, qemu + kvm, xen, ...)?
osgx 14.03.2015

2
İlk cümle yanıltıcıdır. Bir kap içinde bir VM kullanmak, Docker'ı kullanma noktasını yitirir.
user2707671
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.