VM mi yoksa Docker mı?

Bir VM'ye değil Docker'a ihtiyacınız olduğunu nasıl anlarsınız? Tam olarak neyi izole etmek istediğinizi belirlemeniz gerekir. Garantili kaynaklara ve sanal donanıma sahip bir sistemi izole etmek istiyorsanız, seçim VM'ye düşmelidir. Çalışan uygulamaları ayrı sistem işlemleri olarak yalıtmanız gerekirse, Docker'a ihtiyacınız olacaktır.

Peki, Docker konteynerleri ile VM'ler arasındaki fark nedir?

Sanal makine (VM) sanal aygıt sürücüleri, bellek yönetimi ve diğer bileşenlerle birlikte yeni bir bağımsız işletim sisteminin kurulu olduğu, tüm sanal aygıtlara ve sanal bir sabit diske sahip sanal bir bilgisayardır. Yani, bir bilgisayarda birçok sanal bilgisayarı çalıştırmanıza izin veren bir fiziksel donanım soyutlaması elde ederiz.
Yüklü bir VM, disk alanını farklı şekillerde kullanabilir:

  • sanal sabit diske daha hızlı erişim sağlayan ve dosya parçalanmasını önleyen sabit sabit disk alanı;
  • dinamik bellek tahsisi. Ek uygulamalar kurarken, kendisine ayrılan maksimum miktara ulaşana kadar bellek dinamik olarak onlar için ayrılacaktır.

Sunucuda ne kadar çok sanal makine varsa, o kadar fazla yer kaplarlar ve ayrıca uygulamanızın çalışması için gereken ortamın sürekli desteğini gerektirirler.

liman işçisi kapsayıcılara dayalı uygulamalar oluşturmak için bir yazılımdır. Konteynerler ve sanal makineler benzer avantajlara sahiptir ancak farklı çalışır. Konteynerler daha az yer kaplar, çünkü Ana bilgisayar sisteminin paylaşılan kaynaklarını VM'den daha fazla kullanın, çünkü VM'den farklı olarak, donanımda değil OS düzeyinde sanallaştırma sağlar. Bu yaklaşım, daha az bellek alanı, daha hızlı dağıtım ve daha kolay ölçeklendirme sağlar.

Konteyner, ana sisteme gerekli arabirimleri sağlayarak uygulamaları kapsüllemek için daha verimli bir mekanizma sağlar. Bu özellik, kapların sistemin çekirdeğini paylaşmasına izin verir; burada kapların her biri, kendi bellek alanları kümesine (kendi sanal adres alanı) sahip ana işletim sisteminin ayrı bir işlemi olarak çalışır. Her container'ın sanal adres alanı kendisine ait olduğu için farklı bellek alanlarına ait veriler değiştirilemez.
Docker için yerel işletim sistemi Linux'tur (Docker, Windows ve MacOS'ta da kullanılabilir), bölünmüş bir çekirdek düzenlemesine izin veren ana avantajlarını kullanır. Windows'ta Docker kapsayıcılarının lansmanı, bir Linux sanal makinesinin içinde gerçekleşecek. kaplar, ana sistemin işletim sistemini paylaşır ve onlar için ana işletim sistemi Linux'tur.

Konteyner - nasıl çalışır?

konteyner kod ve bağımlılıkları birleştiren uygulama düzeyinde bir soyutlamadır. Konteynerler her zaman resimlerden oluşturulur, yazılabilir bir üst katman eklenir ve çeşitli parametreler başlatılır. Bir kapsayıcının kendi yazma katmanı olduğundan ve tüm değişiklikler bu katmanda saklandığından, birden çok kapsayıcı aynı ana görüntüye erişimi paylaşabilir.

Her kapsayıcı, ana çözüm olan docker-compose.yml'de bulunan docker-compose projesindeki bir dosya aracılığıyla yapılandırılabilir. Burada kapsayıcı adı, bağlantı noktaları, tanımlayıcılar, kaynak limitleri, diğer kaplar arasındaki bağımlılıklar gibi çeşitli parametreleri ayarlayabilirsiniz. Ayarlarda bir kapsayıcı adı belirtmezseniz, Docker her seferinde rastgele bir ad atayarak yeni bir kapsayıcı oluşturur.

Bir görüntüden bir kapsayıcı başlatıldığında, Docker okuma/yazma dosya sistemini aşağıdaki katmanların üstüne bağlar. Docker konteynerimizin çalıştırmasını istediğimiz tüm süreçlerin çalışacağı yer burasıdır.

Docker bir kapsayıcıyı ilk kez başlattığında, ilk okuma/yazma katmanı boştur. Değişiklikler meydana geldiğinde, o katmana uygulanır; örneğin, bir dosyayı değiştirmek isterseniz, o dosya aşağıdaki salt okunur katmandan okuma-yazma katmanına kopyalanacaktır.
Dosyanın salt okunur sürümü var olmaya devam edecek, ancak artık kopyanın altında gizlidir. Birimler, kapsayıcının yaşam döngüsünden bağımsız olarak verileri depolamak için kullanılır. Bir kap oluşturulduğunda birimler başlatılır.

Görüntü, kapsayıcıyla nasıl ilişkilendirilir?

görüntü - her konteyner için ana eleman. Görüntü, projeye eklenen bir Docker dosyasından oluşturulur ve birbiri üzerine katmanlanmış ve birlikte gruplandırılmış, yalnızca okunabilir bir dizi dosya sistemidir (katmanlar); maksimum katman sayısı 127'dir.

Her görüntünün kalbinde, bir Dockerfile görüntüsü oluşturulurken giriş noktası olan FROM komutu tarafından belirtilen bir temel görüntü bulunur. Her katman salt okunur bir katmandır ve dosya sistemini değiştiren, Dockerfile dosyasında yazılmış tek bir komutla temsil edilir.
Docker, bu katmanları tek bir görüntüde birleştirmek için Advanced multi-layered Union dosya sistemini kullanır (AuFS, UnionFS üzerine kuruludur), farklı dosya katmanlarından farklı dosya ve dizinlerin şeffaf bir şekilde üst üste binmesine izin vererek ilişkili bir dosya sistemi oluşturur.

Katmanlar, çalışma zamanında ve oluşturma zamanında her katmanla ilgili bilgileri depolamanıza izin veren meta veriler içerir. Her katman bir sonraki katmana bir bağlantı içerir, katmanda bağlantı yoksa bu görüntüdeki en üstteki katmandır.

Dockerfile aşağıdaki gibi komutlar içerebilir:

  • KİMDEN - görüntünün oluşumundaki giriş noktası;
  • MAINTAINER - görüntünün sahibinin adı;
  • ÇALIŞTIR - görüntü montajı sırasında komut yürütme;
  • EKLE - ana bilgisayar dosyasını yeni bir görüntüye kopyalama, bir URL dosyası belirtirseniz, Docker onu belirtilen dizine indirir;
  • ENV - ortam değişkenleri;
  • CMD - görüntüye dayalı olarak yeni bir kapsayıcı oluşturmaya başlar;
  • ENTRYPOINT - Konteyner başlatıldığında komut yürütülür.
  • WORKDIR, CMD komutunu yürütmek için çalışan dizindir.
  • KULLANICI - Görüntüden oluşturulan kapsayıcı için UID'yi ayarlar.
  • VOLUME - Ana bilgisayar dizinini kaba bağlar.
  • EXPOSE, konteynerde dinlenen bir dizi bağlantı noktasıdır.

UnionFS nasıl çalışır?

unionfs — Linux ve FreeBSD için hizmet yığını dosya sistemi (FS). Bu FS, yazarken kopyala (Yazarken Kopyala, COW) mekanizmasını uygular. UnionFS'nin çalışma birimi bir katmandır, her katman, kökün kendisinden bir dizin hiyerarşisine sahip ayrı bir tam teşekküllü dosya sistemi olarak düşünülmelidir. UnionFS, diğer dosya sistemleri için bir birlik bağlantısı oluşturur ve farklı dosya sistemlerinden (dallar olarak adlandırılır) dosyaları ve dizinleri şeffaf bir şekilde kullanıcıya şeffaf bir şekilde tek bir bağlantılı dosya sisteminde birleştirmenize olanak tanır.

Aynı yollara sahip dizinlerin içerikleri, ortaya çıkan dosya sisteminin tek bir birleştirilmiş dizininde (aynı ad alanında) birlikte görüntülenecektir.

UnionFS, katmanları aşağıdaki ilkelere göre birleştirir:

  • katmanlardan biri üst düzey katman olur, ikinci ve sonraki katmanlar alt düzey katmanlar olur;
  • katman nesnelerine "yukarıdan aşağıya", yani kullanıcı tarafından erişilebilir. talep edilen nesne "üst" katmanda ise, "alt" katmanda aynı ada sahip bir nesne olup olmadığına bakılmaksızın döndürülür; aksi takdirde "alt" katman nesnesi döndürülür; istenen nesne ne orada ne de orada ise "Böyle bir dosya veya dizin yok" hatası döndürülür;
  • çalışma katmanı "üst" katmandır, yani verileri değiştirmek için yapılan tüm kullanıcı eylemleri, alt düzey katmanların içeriklerini etkilemeden yalnızca üst düzey katmana yansıtılır.

Docker, uygulama işlerinde kapsayıcıları kullanmak için en yaygın teknolojidir. Linux çekirdeği tarafından sağlanan gruplar ve ad alanları üzerine inşa edilerek bu alanda standart haline geldi.

Docker, işletim sistemi çekirdeğini tüm kapsayıcılar arasında paylaşarak, ayrı işletim sistemi süreçleri olarak çalışarak uygulamaları hızlı bir şekilde dağıtmamıza ve dosya sisteminden en iyi şekilde yararlanmamıza olanak tanır.

Kaynak: habr.com

Yorum ekle