Yanıtlar:
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!
Docker'in teknik özellikleri listesine bir göz atalım ve hangilerinin LXC tarafından sağlandığını ve hangilerinin olmadığını kontrol edelim .
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.
unshare
araç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.
update-index
ve read-tree
benzeri 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.
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:
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 .
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.
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.