Docker-Compose ne zaman kullanılır ve Docker-Swarm ne zaman kullanılır?


85

Docker-Compose ve Docker-Swarm arasındaki farkları veya benzerlikleri anlamaya çalışıyorum .

Belgeleri okuyarak, docker-compose'un farklı kapsayıcıları birbirine bağlamak ve tek bir hizmet olarak işbirliği içinde çalışmak için bir mekanizma sağladığını anladım (sanırım bunun ile aynı işlevi kullanıyor iki kapsayıcıyı bağlamak için kullanılan --link komutuyla)

Ayrıca, benim docker-swarm ile ilgili anlayışım , her biri bazı docker görüntülerinin birkaç konteyner örneğini çalıştıran farklı docker-host kümelerini yönetmenize izin vermesidir . Bağlantıları şöyle tanımlayabiliriz sürüdeki farklı kapsayıcılar arasında (sürüdeki iki docker-host üzerinde olsalar bile) bir birim olarak bağlamak için overlay-ağları .

Anlamaya çalıştığım şey, docker-swarm başarılı docker-compose ve overlay ağları, kapsayıcıları bağlamanın yeni (önerilen) yolu mu?

Yoksa docker-compose hala tüm docker ailesinin ayrılmaz bir parçası mı ve iş birliği içinde çalışmak üzere konteynerleri bağlamak için bunun kullanılması bekleniyor ve tavsiye ediliyor mu? Eğer öyleyse, docker-compose sürüdeki farklı düğümlerdeki kapsayıcılarla çalışır mı?

Yoksa örtülü ağlar sürüdeki farklı ana bilgisayarlar arasında kapsayıcıları bağlamak için mi ve docker-compose dahili bağlantılar oluşturmak için mi?

Ayrıca, docker belgelerinde - bağlantıların artık tavsiye edilmediğinden ve yakında kullanımdan kaldırılacağından bahsedildiğini görüyorum .

Biraz kafam karıştı???

Çok teşekkürler!


10
Cevaplardan hiçbiri sorunuzu yanıtlamıyor mu? yaparlarsa, onlardan birini cevabınız olarak kabul etmek için onay kutusunu seçin.
JoeG

Yanıtlar:


105

Birkaç tanımla başlamak muhtemelen yardımcı olacaktır:

  • docker-compose : Bir grup ilgili kapsayıcıyı yapılandırmak ve yönetmek için kullanılan komut. Docker cli tarafından kullanılan aynı API için bir ön uçtur, böylece davranışını aşağıdaki gibi komutlarla yeniden oluşturabilirsiniz:docker run .
  • docker-compose.yml : docker-compose tarafından ve şimdi de sürü modu tarafından kullanılan bir grup kapsayıcı için tanım dosyası.
  • sürü modu : Bir grup docker motorunu tek bir varlık olarak yönetmek ve orkestrasyon sağlamak için kullanılır (sürekli olarak mevcut durum ile hedef durum arasındaki farklılıkları düzeltmeye çalışır).
  • hizmet : Sürü içinde aynı görüntü ve konfigürasyon için bir veya daha fazla kap, birden çok kap ölçeklenebilirlik sağlar.
  • yığın : Bir sürü içindeki bir veya daha fazla hizmet, bunlar bir DAB veya docker-compose.yml dosyası kullanılarak tanımlanabilir.
  • köprü ağı : Birden çok konteynerin birbiriyle iletişim kurabildiği tek bir docker motoru tarafından yönetilen . Bir motor tarafından yönetilen birden çok ağınız olabilir ve kapsayıcılar sıfır veya daha fazla ağa eklenebilir.
  • overlay network : Bir köprü ağına benzer, ancak birden fazla docker motorunu kapsar. Bunlar, durumlarını korumak için bir anahtar / değer deposu gerektirir. Sürü modu bunu sağlar, ancak sürü modu devre dışı bırakılırsa, etcd, consul veya zookeeper da kullanabilirsiniz.
  • bağlantılar : köprülü ağdan önce gelen kapsayıcıları birbirine bağlama yöntemi. Kullanımı artık tavsiye edilmemektedir.
  • klasik sürü : Bir konteyner olarak çalışan, birden fazla motorun tek olarak görünmesine izin veren, ancak düzenleme sağlamayan veya kendi k / v deposunu içeren entegre sürü modunun öncülü.

Soruları cevaplamak için:

docker-swarm docker-compose'da başarılı oldu mu ve overlay ağları, kapsayıcıları bağlamanın yeni (önerilen) yolu mu?

Yoksa docker-compose hala tüm docker ailesinin ayrılmaz bir parçası mı ve iş birliği içinde çalışmak üzere konteynerleri bağlamak için bunun kullanılması bekleniyor ve tavsiye ediliyor mu? Eğer öyleyse, docker-compose sürüdeki farklı düğümlerdeki kapsayıcılarla çalışır mı?

Farklı işlevsellik sağlarlar ve her ikisinin de bir amaca hizmet etmeye devam ederler. docker-compose, sürü modunda kapsayıcıları başlatamaz, ancak docker-compose.yml dosyasının (sürüm 3) daha yeni bir sürümü, docker-compose'un kendisini kullanmadan doğrudan sürü modunda bir yığını tanımlamak için kullanılabilir. Docker-compose, tek bir docker motorunda veya klasik sürü ile sürü modunun dışında kapsayıcıları yönetmek için gereklidir.

Yoksa örtülü ağlar sürüdeki farklı ana bilgisayarlar arasında kapsayıcıları bağlamak için mi ve docker-compose dahili bağlantılar oluşturmak için mi?

Ayrıca, docker belgelerinde - bağlantıların artık tavsiye edilmediğinden ve yakında kullanımdan kaldırılacağından bahsedildiğini görüyorum.

yml dosyasının sürüm 2 ile başlayan docker-compose, birden çok kapsayıcıyı varsayılan olarak proje başına yeni bir köprülü ağ ile birbirine bağlar (proje varsayılan olarak dizin adıdır). Klasik sürü ile, bu varsayılan olarak harici bir k / v deposu kullanan bir overlay ağına dönüşür. Sürü modu yığınıyla, bu bir overlay ağı olur.

Docker ağlarını kullanmak, konteynerlerin birbirleriyle iletişim kurmasını sağlamanın tercih edilen yoludur. Docker ortamınızın geri kalanından izole etmek istediğiniz her bir konteyner grubu için bir ağ istiyorsunuz. docker-compose bu ağ oluşturmayı otomatikleştirir, ancak bunu komut satırından da yapabilirsiniz docker networks create.

Bağlantının yerini büyük ölçüde yerleşik DNS keşfine sahip docker ağları almıştır. Docker-compose.yml dosyanızdan bağlantıları kaldırdığınızda, depends_onkapsayıcı başlatma sırasını zorlamak için bunları bir bölümle değiştirmeniz gerekebilir . Aksi takdirde, bağlantının mantıklı olduğu ve gördüğüm tüm kullanımın eski belgeleri takip eden birinden olduğu çok az senaryo vardır.


3
Bu faydalıdır. Lütfen tanımlar DABmısınız?
Matthew James Briggs

3
DAB, hiçbir zaman ilgi görmeyen deneysel bir dosya biçimiydi. Temelde artık bir v3 docker-compose.yml dosyası. docs.docker.com/compose/bundles/#bundle-file-format
BMitch

25

bindirme ağları oluşturmak veya kümelemek veya sürü yapmak

Dizüstü bilgisayarınızda bir demodan başka bir şey yapıyorsanız, yukarıdakilerin tümünü kullanmanız gerektiğini göreceksiniz.

Swarm & swarm overlay ağlarını kasıtlı olarak ayırdım, çünkü ikisini birden kullanmanız gerekmez, ancak altında bir sürü olmadan bir overlay ağı elde edemezsiniz.

Oluştur, birden çok kapsayıcıyı bir araya getirmek içindir. Şimdi, birbirleriyle ilişkili olmadıkları halde birbirleriyle ilgili oldukları mantıklı geliyor. Ancak, kapsayıcıların birbiriyle ilişkili hizmetler için olduğu tipik bir durumu varsayalım, o zaman onların bir şekilde birbirleriyle konuşmalarını, ancak ağları kullanarak birbirleriyle nasıl konuştuklarını kontrol etmelerini istersiniz. Örneğin, web sunucusu, uygulama sunucusu ve db'ye sahip 3 katmanlı bir uygulamayı ele alalım. Diyelim ki üç bileşen de dockerize edildi ve çalıştırmak yerine onları bir araya getirmek için compose kullanıyorsunuz.docker run..üç kez farklı parametrelerle vb. Üçü de ortaya çıkar, ancak birbirlerine nasıl bağlandıklarını kontrol etmek istersiniz. Web sunucusunun uygulama sunucusuyla konuşabilmesini istersiniz, ancak doğrudan db ile konuşmamasını istersiniz. Ve uygulama sunucusunun db sunucu konteyneri ile konuşmasını (ping) ve ayrıca web sunucusuna ping atmasını istersiniz. Tüm bağlantılar iki yönlüdür, ancak yalnızca birbirleriyle iletişim kurabilmeyi istediğiniz hizmetlerle sınırlıdır. Böyle bir düzenleme için, genellikle 2 ağ kurarsınız - diyelim ki frontendve backend. Web ve uygulama kapsayıcıları, ön uç ağına bağlıdır. Uygulama ve db kapsayıcıları arka uç ağına bağlanır. Db ve web kapsayıcıları arasında ortak bir ağ olmadığından, bunlar birbirine dokunamaz (ping), ki bu sizin amacınızdır.

Şimdi, bu 3 hizmetin 100'lerce makineden oluşan kümenizde çalışabilmesini istiyorsanız ve ayrıca bunlar arasında ölçeklendirme yapmak istiyorsanız, birden çok ana bilgisayarı kapsayan bir ağa ihtiyacınız olacaktır. Örtüşen ağın (sürü halinde) resme dönüştüğü yer burasıdır. Yer paylaşımlı ağ iletişimi, VxLAN teknolojisi üzerinden yapılan çoklu ana bilgisayar ağından başka bir şey değildir. Neredeyse tüm modern ağ altyapısında desteklenen standart bir ağ topolojisi olması dışında, VxLAN hakkında bilgi sahibi olmanız gerekmez.

Umarım bu açıklığa kavuşur.

Düzenleme: Zaten bir cevabın olduğunu görmedim!


1
Teşekkür ederim @Anoop. Bu yüzden, her ikisinin de hizmetleri başlatmak için .yaml tabanlı hizmet tanımını kullan ve bu hizmetleri bağlamak için oluşturulmuş kullanıcı tanımlı ağları kullanmasını söylersem doğru olur . Tek fark, compose'un tek bir docker-host üzerinde çalışan bir dizi konteyner için olması ve swarm'ın çoklu host platformu için olmasıdır.
Shabirmean

Evet, ancak karıştırıp eşleştirebilirsiniz, yani aynı oluşturma dosyasını tek bir docker ana bilgisayarı yerine bir sürü kümesini hedeflemek için kullanabilirsiniz. Bu şekilde son derece esnektir.
Anoop

8

Her birinin ne olduğu konusunda doğru bir anlayışa sahip olduğunuzu düşünüyorum, ancak biraz ince ayar yapmak gerekiyor.

Doğru, docker-compose çoklu kapsayıcı uygulamaları ortaya çıkarmaktır. Daha önce docker run ..her konteyneri başlatmak için yapardınız . Genellikle mikro hizmetler paradigmasını kucaklayan modern uygulamalar düzinelerce hizmetten oluşabilir ve kullanımı docker run ..çok yakında çok yorucu olacaktır. Bu nedenle docker-compose, tüm kapsayıcıları ve özelliklerini ve birbirlerine nasıl bağlandıklarını yamlveya jsondosya olarak ifade etmenize olanak tanır, böylece daha kolay bir şekilde yönetebilirsiniz.

Docker-compose, docker ekosistemindeki konteyner düzenleme parçasıdır.

Bağlantılar farklıdır, sadece docker-compose veya docker runkomutların bir parçasıdır ve sadece onlardan biri software defined networksolan lehine kullanımdan kaldırılmıştır overlay networks.

Swarm, docker'daki zamanlama bileşenidir. Zamanlama nedir - kapsayıcılarınızı docker ana bilgisayarları kümenizde nereye "yerleştireceğinizi" bulmaktan başka bir şey değildir. Yüzlerce sunucudan oluşan bir kümeniz olabilir ve her biri bir düzine farklı uygulama için bir hizmet içeren yüzlerce konteynırınız olabilir. Şimdi bu kaplar, yüzlerce sunucudan oluşan kümenize nasıl dağıtılmalı, bazı kapsayıcılar yalnızca belirli bir ölçütü karşıladıkları için belirli ana bilgisayarlara yerleştirilirse veya belki bir şekilde ilişkili olan diğer kaplara daha yakın (veya değil) olmalıdır ... tüm bunlar docker Swarm tarafından gerçekleştirilen programlama bileşeninin bir parçasıdır.

Docker.com'daki başlangıç ​​belgelerine şu adresten bakmanızı öneririm: https://docs.docker.com/engine/getstarted-voting-app/


Çok teşekkür ederim. Bu öğreticiyi yapmıştım. Yakın ilişkili konteynerleri bağlamak için neyin kullanılması gerektiğine dair docker geliştiricilerinin kendisi tarafından belirli bir öneri olup olmadığını anlamaya çalışıyorum - oluşturma veya sürü overlay ağları . Karşılaştığım ikilem, kapsayıcıları bir üzerinden bağlama fikrinin, onları oluşturma gibi bir şeyle birbirine bağlamakla aynı görünmemesi (veya aynı mı ???). Kapsayıcı bağlama gibi oluşturma, overlay-ağ tarzı bağlantıdan daha güvenli mi?
Shabirmean
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.