İşletim sistemi docker kapsayıcısı: O zaman bir VM ile farkı nedir?


10

Docker kapsayıcısında işletim sistemi kullanmanın anlamı nedir?

Docker deposunda bir Ubuntu docker görüntüsü buluyorsunuz: https://registry.hub.docker.com/_/ubuntu/ Docker'ın "uygulama" düzeyinde daha fazla olduğunu düşündüm.

O zaman bir Ubuntu docker konteyneri ile bir Ubuntu Sanal Makinesi arasındaki farklar nelerdir? Bir docker kapsayıcısında tüm bir işletim sisteminiz varsa, Docker'ı kullanmak anlamsız değil mi?

Teşekkürler

Yanıtlar:


11

Temel Docker kavramlarından yoksundur. Tamamen farklı bir şey.

Bilmeniz gereken ilk şey Docker'ın felsefesidir: bir kapta izole edilmiş bir işlem yapın . Docker kapsayıcısında işletim sistemi çalıştırmazsınız, seçtiğiniz linux dağıtımına dayalı olarak kök dosya sistemi içeriğine sahip bir kapsayıcı içinde bir işlem yürütürsünüz. Ubuntu diğerleri arasında bir seçimdir.

Şimdi, sunucunuzun çalıştığı linux dağıtımından farklı bir linux temel görüntüsünün içinde bir işlemin nasıl elde edilebileceğini merak etmelisiniz. Bir işletim sisteminin çalışması için temel olarak aşağıdakilere ihtiyacınız vardır:

  • Önyükleme dosya sistemi: yüklendikten sonra bellekte bulunacak önyükleyiciyi ve çekirdeği içerir. Docker kapları için bunu umursamıyoruz çünkü çekirdek ana bilgisayarla paylaşılıyor ve tüm linux dağıtımları arasındaki ortak kısım.
  • Bir kök dosya sistemi: dosya sistemi yapısını içerir. Bir linux dağıtımından diğerine farklı olabilir. Önyükleme sırası bitene kadar salt okunurdur.

Docker, kapsayıcı içindeki disk blok katmanlarını yönetmek için UnionFS'yi kullanır, böylece bunları yığabilirsiniz.

Perde arkasında, birden fazla dosya sisteminin aynı anda monte edilmesini sağlayan ve tamamen sanal bir sistem gibi görünen bir birleşim bağlantısı kullanır. Aslında, temel görüntü katmanını salt okunur modda temel kök dosya sisteminin üstünde okuma-yazma modu olarak bırakır.

Burada, temel görüntünün geldiği linux dağıtımının, gerçek bir ana bilgisayara yüklendikten sonra aynı dosya sistemini içerecek şekilde katmanlı bir disk bloğu yığınınız var, ancak bu sefer bir kabın içinde.

Şimdi eksik olan son şey şudur: Bu şeyi nasıl izole edersiniz?

Cevap: ad alanları. Buradaki ayrıntılara girmeyeceğim çünkü orijinal sorudan biraz sapacaktı. Ancak bilmeniz gerekenler, çekirdek 2.4.19'dan beri, yıllar boyunca çeşitli türlerin ad alanlarının ortaya çıktığıdır. Şu anda aşağıdaki ad alanları mevcuttur:

  • IPC: IPC ad alanı (süreçler arası iletişim)
  • MNT: mount ad alanı
  • NET: ağ ad alanı
  • PID: pid ad alanı
  • KULLANICI: kullanıcı ad alanı (uid)
  • UTS: UTS ad alanı (ana bilgisayar adları)

Ad alanları, çekirdek içindeki işlemlerin belirli bir ortamla çalışmasına izin veren yalıtılmış yapılardır. Örneğin, MNT ad alanı, temel görüntü kök dosya sistemi özelliklerinde çalışan bir işlem elde etmek için temel özellik olacaktır. NET ad alanı, bir konteynerin liman köprüsü vb. İle iletişim kurmak için belirli ağ arayüzlerine sahip olması için bir başka önemli özellik olacaktır.

Yani, evet, tüm bunların temel amacı izole bir uygulama çalıştırmak, yerel ortamdan üretime konteyner denilen bir kutu içinde kolayca üretmektir.

Daha ileri gitmeden önce liman işçisinin belgelerini okumak iyi bir fikir olacaktır .


Teşekkürler, bu şu şekilde bir "Ubuntu" görüntüsü anlamına mı geliyor: register.hub.docker.com/_/ubuntu kendi başına "mantıklı değil" ve "nginx konteyner" gibi daha tanımlanmış bir konteyner için bir üs olarak hizmet ediyor mu? Bir anlam ifade edip etmediğimi bilmiyorum?
Michael

Evet yaparsın. Bu tam olarak ne için kullanılır. Ve genellikle insanların bu nedenle onlara temel imgeler dediğini duyacaksınız .
Xavier Lucas

Belgeleri gözden geçirdim ve emin olmadığım bir şey var. Diyelim ki ubuntu görüntüsünün boyutu 140Mb. Ardından, bu görüntüye dayanan başka bir görüntü 10 Mb daha ekler. Bu görüntüden 2 kap çalıştırırsam, her kap 150Mb olacak ve 300Mb disk alanına ihtiyacım var VEYA toplam boyut 150Mb kalacak mı? Teşekkürler
Michael

Vay canına, resmi python görüntüsünü yeni indirdim ve sanal boyut 802.4 MB. İndirmek biraz zaman aldı. 10 konteyner çalıştırırsam, ne kadar yer kaplar? Teşekkürler
Michael

2
@YAmikep Bazı resimler düzgün temizlenmemiş bağımlılıklar nedeniyle büyük olabilir. Aynı görüntüyle 10 kap başlatırsanız, kullanılan disk alanı görüntünün boyutunun 10 katı olacağı anlamına gelmez. Görüntüyü bir kez yüklersiniz ancak birden çok kaptan çalıştırırsınız. Docker, aynı görüntüden birden çok kapsayıcı çalıştırırken yazma üzerine kopyalamayı kullanır; bu, temel olarak görüntüyü kapsayıcılar arasında paylaşacağı ve yalnızca kap ekleyip değiştirdiğinde görüntünün içinde özel bir kopya oluşturacağı anlamına gelir. Dolayısıyla, kullanılan gerçek boyut, kaç çalışma ile değil, konteyner içindeki aktiviteye bağlıdır.
Xavier Lucas
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.