Docker, lxc araçlarına (kullanıcı alanı LXC araçları) neler ekler?


398

Docker'ın özelliklerine bakarsanız, çoğu zaten LXC tarafından sağlanır.

Peki Docker ne ekliyor? Docker'ı neden düz LXC üzerinde kullanayım?

Yanıtlar:


550

Gönderen Docker SSS :

Docker, lxc'nin yerini tutmaz. "lxc", linux çekirdeğinin (özellikle ad alanları ve kontrol grupları) birbirlerinden korumalı alan oluşturma işlemlerine olanak tanıyan ve kaynak ayırmalarını denetleyen özelliklerini belirtir.

Bu düşük düzey çekirdek özellikleri temelinin yanı sıra Docker, çeşitli güçlü işlevlere sahip yüksek düzey bir araç sunar:

  • Makineler arasında taşınabilir dağıtım.Docker, bir uygulamayı ve tüm bağımlılıklarını docker özellikli herhangi bir makineye aktarılabilen tek bir nesneye gruplamak için bir format tanımlar ve orada, uygulamaya maruz kalan yürütme ortamının aynı olacağı garantisiyle yürütülür. Lxc, taşınabilir dağıtım için önemli bir önkoşul olan işlem sanal alanını uygular, ancak taşınabilir dağıtım için tek başına yeterli değildir. Bana özel bir lxc yapılandırmasında yüklü olan uygulamanızın bir kopyasını gönderirseniz, makinenizin özel yapılandırmasına bağlı olduğu için makinemde neredeyse kesinlikle çalışmaz: ağ, depolama, günlüğe kaydetme, dağıtım, Docker, makineye özgü bu ayarlar için bir soyutlama tanımlar, böylece aynı docker konteyneri birçok farklı makinede değişmeden çalışabilir,

  • Uygulama merkezli. Docker, makinelerin aksine uygulamaların dağıtımı için optimize edilmiştir . Bu, API'sine, kullanıcı arayüzüne, tasarım felsefesine ve belgelerine yansır. Buna karşılık, lxc yardımcı komut dosyaları, daha hızlı önyükleme yapan ve daha az ram gerektiren sunucular olan hafif makineler olarak kaplara odaklanır. Konteynerlerde bundan daha fazlası olduğunu düşünüyoruz.

  • Otomatik oluşturma . Docker, geliştiricilere, uygulama bağımlılıkları, oluşturma araçları, paketleme vb. Üzerinde tam denetime sahip bir kapsayıcıyı kaynak kodlarından otomatik olarak bir araya getirecek bir araç içerir. Make, maven, chef, kukla, tuz, debian paketleri, rpms, kaynak kullanımı ücretsizdir. Makinelerin konfigürasyonuna bakılmaksızın, tarballlar veya yukarıdakilerin herhangi bir kombinasyonu .

  • Sürüm. Docker, bir kabın ardışık sürümlerini izlemek, sürümler arasındaki farkı incelemek, yeni sürümleri yürütmek, geri almak vb. İçin git benzeri özellikler içerir. Geçmiş ayrıca bir kabın nasıl ve kim tarafından monte edildiğini de içerir , böylece üretim sunucusundan tam izlenebilirlik elde edersiniz yukarı akış geliştiriciye kadar. Docker ayrıca "git pull" a benzer artımlı yüklemeler ve indirmeler uygular, böylece bir kabın yeni sürümleri yalnızca diffs gönderilerek aktarılabilir.

  • Bileşenin yeniden kullanımı. Herhangi bir kap daha özel bileşenler oluşturmak için "temel görüntü" olarak kullanılabilir. Bu, manuel olarak veya otomatik bir yapının parçası olarak yapılabilir. Örneğin, ideal python ortamını hazırlayabilir ve 10 farklı uygulama için bir temel olarak kullanabilirsiniz. İdeal postgresql kurulumunuz gelecekteki tüm projeleriniz için tekrar kullanılabilir. Ve bunun gibi.

  • Paylaşım. Docker, binlerce kişinin yararlı kaplar yüklediği bir genel kayıt defterine ( https://registry.hub.docker.com/ ) erişebilir : redis, couchdb, postgres'ten irc fedalarına kadar, uygulama sunucularını raylara indirmek için uygulama sunucularına hadoop'a kadar her şey çeşitli dağıtımlar. Kayıt ayrıca, liman işçiliği ekibi tarafından tutulan kullanışlı konteynırların resmi "standart kütüphanesini" de içerir. Kayıt defterinin kendisi açık kaynak kodludur, bu nedenle herkes, örneğin dahili sunucu dağıtımları için özel kapsayıcıları saklamak ve aktarmak için kendi kayıt defterini dağıtabilir.

  • Araç ekosistemi. Docker, kapsayıcıların oluşturulmasını ve dağıtımını otomatikleştirmek ve özelleştirmek için bir API tanımlar. Yeteneklerini genişletmek için docker ile entegre olan çok sayıda araç var. PaaS benzeri dağıtım (Dokku, Deis, Flynn), çok düğümlü düzenleme (maestro, tuz, mezos, opentack nova), yönetim panoları (docker-ui, opentack horizon, tersane), yapılandırma yönetimi (şef, kukla), sürekli entegrasyon (jenkins, strider, travis), vb. Docker hızla konteyner tabanlı takımlar için kendini standart haline getirmektedir.

Umarım bu yardımcı olur!


3
"Herhangi bir kap temel görüntü olarak kullanılabilir" dediğinizde, Docker'dan bağımsız olarak oluşturulan bir LXC kapsayıcısı değil, bir Docker kapsayıcısı demek istediğinizi varsayalım. Anlayabildiğim kadarıyla, bir Docker kapsayıcısını sıfırdan oluşturamaz, her zaman başka bir Docker kapsayıcısından miras almalıdır (ilgili soru: stackoverflow.com/questions/18274088/… ).
Flimm

18
"Docker içe aktarma" ile herhangi bir tarball'dan kolayca yeni bir kap oluşturabilirsiniz. Örneğin: "debootstrap raring ./rootfs; tar -C ./rootfs -c. | Docker import flimm / mybase".
Solomon Hykes

3
Docker'ın libcontainer'ı var olduğu (bu onun yerine geçmediği) şimdi hala doğru mu?
Garet Claborn

3
@GaretClaborn evet, libcontainer isim alanlarına ve gruplara erişmek için sadece kendi kütüphanesi olduğundan, Solomon'un söylediği her şey hala geçerlidir.
John Morales

10
Linux kapsayıcısı, bir dizi Linux özelliği kullanarak bir süreci kısıtlamanın ve izole etmenin sonucudur: chroot, cgroups ve namespace. LXC, bu olanakları manipüle eden bir kullanıcı alanı aracıdır. libcontainer, aynı olanakları manipüle eden LXC'ye bir alternatiftir. Docker varsayılan olarak libcontainer kullanır ancak bunun yerine LXC kullanabilir. Bununla birlikte Docker, libcontainer / LXC'nin üstündeki bir uyumluluk katmanından (çok) daha fazlasıdır; diğer yanıtların listelediği ek özellikler ekler.
user100464

71

Docker'in teknik özellikleri listesine bir göz atalım ve hangilerinin LXC tarafından sağlandığını ve hangilerinin olmadığını kontrol edelim .

Özellikleri:

1) Dosya sistemi yalıtımı : her işlem kabı tamamen ayrı bir kök dosya sisteminde çalışır.

Sade LXC ile sağlanır.

2) Kaynak izolasyonu : cpu ve bellek gibi sistem kaynakları, cgroups kullanılarak her proses konteynerine farklı şekilde tahsis edilebilir.

Sade LXC ile sağlanır.

3) Ağ yalıtımı : her işlem kapsayıcısı kendi sanal ağ arabiriminde ve kendi IP adresiyle kendi ağ ad alanında çalışır.

Sade LXC ile sağlanır.

4) Yazarken kopyala : Kök dosya sistemleri, dağıtımı son derece hızlı, bellekte ucuz ve diskte ucuz hale getiren yazma üzerine kopya kullanılarak oluşturulur.

Bu, Docker'ın bağlı olduğu bir sendika dosya sistemi olan AUFS tarafından sağlanır. AUFS'yi kendiniz LXC ile manuel olarak kurabilirsiniz, ancak Docker bunu standart olarak kullanır.

5) Günlüğe kaydetme : her işlem kabının standart akışları (stdout / stderr / stdin) toplanır ve gerçek zamanlı veya toplu alım için günlüğe kaydedilir.

Docker bunu sağlar.

6) Değişiklik yönetimi : bir kabın dosya sistemindeki değişiklikler yeni bir görüntüye dönüştürülebilir ve daha fazla kap oluşturmak için yeniden kullanılabilir. Şablon veya manuel yapılandırma gerekmez.

"Şablonlama veya manuel yapılandırma", bunların her ikisini de öğrenmeniz gereken LXC'ye bir göndermedir. Docker, LXC yapılandırması hakkında bilgi sahibi olmadan kapları sanal makineleri işlemeye alıştığınız şekilde tedavi etmenizi sağlar.

7) Etkileşimli kabuk : liman işçisi, sahte bir etkileşimli kabuk çalıştırmak için sözde tty tahsis edebilir ve herhangi bir kabın standart girişine yapışabilir.

LXC bunu zaten sağlıyor.


Sadece LXC ve Docker'ı öğrenmeye başladım, bu yüzden herhangi bir düzeltmeyi veya daha iyi cevapları memnuniyetle karşılarım.


35
IMHO, bu cevap noktayı kaçırıyor. Docker bu özellikleri "sağlamaz"; sadece kullanımı son derece kolay hale getirir. Nitpicky olmak istiyorsak, LXC'nin yalıtım sağlamadığını söyleyebiliriz: ad alanları bunu sağlar ve LXC, kullanımı basit bir unsharearaçtan (veya doğrudan clone()sistem çağrısından) daha kolay hale getirmek için bir emtia kullanıcı alanı aracıdır . Benzer şekilde, Docker bu şeylerin kullanımını kolaylaştırır (ve görüntüleri itme / çekme yeteneği gibi daha birçok özelliği masaya getirir). Benim 2c.
jpetazzo

6
@jpetazzo: LXC aslında oldukça kolay, Docker bunu nasıl kolaylaştırıyor (görüntüleri itme ve çekme gibi diğer özellikleri eklemenin yanı sıra)?
Flimm

31
@Flimm: Yönetici Dergisi'nin 16. sayısındaki karşılaştırmayı seviyorum , s. 34: Docker, LXC'yi diğer bazı destekleyici teknolojilerle bir araya getirir ve kullanımı kolay bir komut satırı arayüzüne sarar. Kapları kullanmak biraz gibi sadece komutlarla Git kullanmaya çalışmak gibidir update-indexve read-treebenzeri tanıdık araçlar olmadan, add, commit, ve merge. Docker, LXC'nin “sıhhi tesisatının” üzerine “porselen” katmanını sağlayarak, daha üst düzey kavramlarla çalışmanıza ve düşük seviyeli ayrıntılar hakkında daha az endişelenmenize olanak tanır.
0xC0000022L

4
Aynı işletim sistemini çalıştıran bir docker konteyneri ve LXC konteyneri içinde UnixBench testlerini çalıştırdım ve LXC skoru çok iyi. LXC tabanlı docker olmak, sonuçlarım hakkında çok şaşkınım.
gextra

7
Docker'ın daha yavaş performansının disk I / O ile ilişkili olduğu anlaşılıyor, bu nedenle belki AUFS'nin benimsenmesinden kaynaklanıyor.
gextra

16

LXD'nin gelişimi LXC'yi geliştirmeye devam ettikçe, yukarıdaki mesajlar ve cevaplar hızla tarihlenmektedir . Evet, Docker'ın hala ayakta durmadığını biliyorum.

LXD artık LXC konteynır görüntüleri için kullanıcının katkıda bulunmak veya yeniden kullanmak üzere itebileceği / çekebileceği bir havuz uygulamaktadır.

LXD'nin REST api - LXC artık çok basit bir komut sözdizimi kullanarak LXC kapsayıcılarının hem yerel hem de uzaktan oluşturulmasını / dağıtılmasını / yönetilmesini sağlıyor.

LXD'nin temel özellikleri:

  • Tasarımla güvenli (ayrıcalıklı kapsayıcılar, kaynak kısıtlamaları ve çok daha fazlası)
  • Ölçeklenebilir (dizüstü bilgisayarınızdaki kapsayıcılardan bin işlem düğümü için)
  • Sezgisel (basit, net API ve net komut satırı deneyimi)
  • Görüntü tabanlı (artık dağıtım şablonu yok, sadece iyi, güvenilir görüntüler) Canlı taşıma

OpenStack için artık KVM, vmware vb. Kullanmak yerine OpenStack'ın LXC kapsayıcılarını OpenStack'ta VM olarak dağıtmak / yönetmek için kullanmasına izin veren NCLXD eklentisi var .

Bununla birlikte, NCLXD ayrıca geleneksel HW VM'leri ve LXC VM'lerinin karışımından oluşan karma bir bulut sağlar.

OpenStack nclxd eklentisi, desteklenen özelliklerin bir listesini içerir:

stop/start/reboot/terminate container
Attach/detach network interface
Create container snapshot
Rescue/unrescue instance container
Pause/unpause/suspend/resume container
OVS/bridge networking
instance migration
firewall support

Ubuntu 16.04, Nisan 2016'da piyasaya sürüldüğünde, blok cihaz desteği, canlı geçiş desteği gibi ek harika özellikler olacak .


4

Liman işçileri katmanlar halinde oluşturulmuş görüntüler kullanır. Bu, taşınabilirlik, paylaşım, sürüm oluşturma ve diğer özellikler açısından çok şey katıyor. Bu görüntülerin taşınması veya aktarılması çok kolaydır ve katmanlar halinde olduklarından, sonraki sürümlerde değişiklikler önceki katmanlara katmanlar şeklinde eklenir. Bu nedenle, birçok kez taşıma yaparken, temel katmanları taşımanıza gerek yoktur. Liman işçilerinin bu görüntüleri yürütme ortamı içerdiğinde çalıştıran kapları vardır, kolay sürüm kontrolü sağlayan yeni katmanlar olarak değişiklikler eklerler.

Bunun dışında Docker Hub, işletim sistemi ve diğer yazılımların yüklü olduğu görüntüleri bulabileceğiniz binlerce genel resme sahip iyi bir kayıttır. Böylece, uygulamanız için oldukça iyi bir başlangıç ​​yapabilirsiniz.


"Yerleşik katmanlar" dediğinizde - bu ne anlama geliyor - (A) Temel katmanların bir kopyası "YENİ" katmana uyarlanmış ve uyarlanmıştır. Peki, taban katmanı bir sonrakinden ayrılıyor mu? (B) Temel katman (lar), "YENİ" katmana dahil edilmiştir ve ayrıca bağlanmıştır. Böylece, temel katmandaki değişiklikler otomatik olarak "YENİ" katmana yansıtılır. Üzgünüm, eğer aranan açıklama çok naif ise. :( Kapil
Kapil

Docker görüntüleri katmanlar halinde oluşturulmuştur. Ayrıntılı bir ifadeyle, bir katman işlendiğinde bir noktaya kadar olan tüm değişiklikler, o noktaya kadar yapılan görüntü katmanlarında bulunur. Bundan sonra yapılan değişiklikler sonraki ve sonraki katmanlara eklenir. Böylece, yeni katman temel katmana bağlanır. Aynı yeni katmanın ek değişikliklerle farklı bir taban katmanına eklenebileceğini düşünmüyorum. Bununla birlikte, birden fazla varlık tutarlılığı korumak istiyorsa ve aynı temel katmanlara sahipse, aynı duruma ulaşmak için bu varlıklara yalnızca yeni katmanların verilmesi gerekir.
div

Ancak, docker ile ilgili güncel gelişmeler hakkında bilgi sahibi değilim ve docker görüntü uygulamasında yukarıdaki yorumda yer almayan değişiklikler olabilir.
div

Daha spesifik olmak gerekirse, katmanlar bir imza ile tanımlanır (SHA-bir şey, sanırım), yani bir katmanı değiştirirseniz, farklı bir katman demektir. @Kapil: Bu, davranışı seçeneğinize (B) biraz daha yakın olsa da, aslında bir taban katmanında değişiklik yapamayacağınız anlamına gelir. (veya bu konu için herhangi bir katman) Bir görüntü, her biri sırayla uygulanan katman listesinden oluşturulur; katmanlar artık gerekli olmadığında temizlenebilir (ve bence bunlar docker tarafından otomatik olarak temizlenir); örneğin, tüm referans resimler silindiğinde.
codermonkeyfuel

@Kapil: Dürüst olmak gerekirse, sorunuz muhtemelen bu soruna yorum yapmak yerine yeni bir soru olarak işe yarayacaktır, çünkü insanların kendi başlarına bakabilmeleri için yararlı bir sorudur. Eğer yeni bir soru olarak sormak isterseniz, ben de orada cevap vereceğim.
codermonkeyfuel

0

Bu özlüğü tutacak olan, yukarıda zaten sorulmuş ve cevaplanmıştır .

Ancak geri adım atarım ve biraz farklı bir şekilde cevaplarım, docker motorunun kendisi ekstralardan biri olarak orkestrasyon ekler ve bu yıkıcı kısımdır. Bir uygulamayı birden fazla konteyner motorunda 'bir yerde' çalışan konteynerlerin bir kombinasyonu olarak çalıştırmaya başladığınızda, gerçekten heyecan verici olur. Sağlamlık, Yatay Ölçekleme, altta yatan donanımdan tam soyutlama, devam edebilirim ...

Size bunu veren sadece Docker değil, aslında de facto Container Orchestration standardı, çok fazla lezzet, Docker olan Kubernetes, aynı zamanda OpenShift, SuSe, Azure, AWS ...

Sonra K8S'nin altında alternatif konteyner motorları var; ilginç olanlar Docker ve CRIO'dur - yakın zamanda inşa edilmiş, cömert, özellikle Kubernetes için bir konteyner motoru olarak tasarlanmıştır, ancak olgunlaşmamış. Bunların arasındaki rekabet, bir konteyner motoru için gerçek uzun vadeli seçim olacağını düşünüyorum.

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.