Wann Docker-Compose und wann Docker-Swarm zu verwenden ist

11

Ich versuche die Unterschiede oder Ähnlichkeiten zwischen D-Compose und D-Swarm zu verstehen.

Beim Lesen der Dokumentation habe ich verstanden, dass docker-compose einen Mechanismus bietet, um verschiedene Container zu verbinden und zusammenzuarbeiten, als einen einzigen Dienst (ich nehme an, er verwendet dieselbe Funktionalität wie - Link Befehl zum Verknüpfen von zwei Containern)

Mein Verständnis von docker-swarm ist auch, dass Sie einen Cluster von verschiedenen docker-hosts verwalten können, von denen jeder mehrere Container-Instanzen von einigen Docker-Images ausführt. Wir könnten Verbindungen als Overlay-Netzwerke zwischen verschiedenen Containern im Schwarm definieren (auch wenn sie über zwei Docker-Hosts im Schwarm laufen), um sie als Einheit zu verbinden.

Was ich versuche zu verstehen, ist, dass docker-swarm docker-compose und overlay networks erfolgreich ist, ist der neue (empfohlene) Weg Container zu verbinden?

Oder ist docker-compose immer noch ein integraler Bestandteil der gesamten Docker-Familie und es wird erwartet und ratsam, sie zu verwenden, um Container zur Zusammenarbeit zu verbinden. Wenn ja, docker-compose Arbeit mit Containern über verschiedene Knoten im Schwarm ??

Oder ist Overlay-Netzwerke zum Verbinden von Containern über verschiedene Hosts im Schwarm und Docker-Compose zum Erstellen interner Links?

Außerdem sehe ich auch, dass in der Docker-Dokumentation erwähnt wird, dass - Links nicht mehr empfohlen werden und bald veraltet sein werden.

Ich bin ein bisschen verwirrt ???

Vielen Dank!

    
Shabirmean 02.03.2017, 01:51
quelle

3 Antworten

19

Es wird wahrscheinlich helfen, mit ein paar Definitionen zu beginnen:

  • docker-compose : Befehl zum Konfigurieren und Verwalten einer Gruppe verwandter Container. Es ist ein Frontend für die gleichen APIs, die vom docker cli verwendet werden, so dass Sie das Verhalten mit Befehlen wie docker run reproduzieren können.
  • docker-compose.yml : Definitionsdatei für eine Gruppe von Containern, die von docker-compose und nun auch vom Schwarm-Modus verwendet werden.
  • Swarm-Modus : Wird verwendet, um eine Gruppe von Docker-Engines als eine Einheit zu verwalten und Orchestrierung bereitzustellen (ständig versucht, Unterschiede zwischen dem aktuellen Status und dem Zielzustand zu korrigieren).
  • service : Ein oder mehrere Container für dasselbe Image und dieselbe Konfiguration innerhalb eines Schwarms, mehrere Container bieten Skalierbarkeit.
  • stack : Ein oder mehrere Dienste in einem Schwarm, diese können mit einem DAB oder einer docker-compose.yml-Datei definiert werden.
  • Brückennetzwerk : Netzwerk, das von einer einzelnen Docker-Engine verwaltet wird, in der mehrere Container miteinander kommunizieren können. Möglicherweise verfügen Sie über mehrere Netzwerke, die von einer Engine verwaltet werden, und Container können an keine oder mehrere Netzwerke angeschlossen werden.
  • Overlay-Netzwerk : Ähnelt einem Brückennetzwerk, umfasst jedoch mehrere Docker-Engines. Diese benötigen einen Schlüssel / Wert-Speicher, um ihren Status zu erhalten. Der Swarm-Modus bietet dies, aber wenn der Schwarm-Modus deaktiviert ist, können Sie auch etcd, Consul oder zookeeper verwenden.
  • Links : Eine Methode zum Verbinden von Containern, die älter als das überbrückte Netzwerk sind. Seine Verwendung wird nicht mehr empfohlen.
  • classic swarm : Ein Vorgänger des integrierten Swarm-Modus, der als Container ausgeführt wird, ermöglicht es, mehrere Engines als eins anzuzeigen, bietet jedoch keine Orchestrierung oder einen eigenen k / v-Speicher.

Um die Fragen zu beantworten:

  

hat docker-swarm erfolgreich docker-komponieren und Overlay-Netzwerke ist die neue (empfohlene) Möglichkeit, Container zu verbinden?

     

Oder ist docker-compose immer noch ein integraler Bestandteil der gesamten Docker-Familie und es wird erwartet und ratsam, sie zu verwenden, um Container zur Zusammenarbeit zu verbinden. Wenn ja, docker-compose Arbeit mit Containern über verschiedene Knoten im Schwarm ??

Sie bieten unterschiedliche Funktionen und dienen weiterhin einem bestimmten Zweck. docker-compose kann Container im Schwarmmodus nicht starten, aber eine neuere Version der Datei docker-compose.yml (Version 3) kann verwendet werden, um einen Stapel direkt im Schwarmmodus zu definieren, ohne docker-compose selbst zu verwenden. docker-compose wird benötigt, um Container außerhalb des Schwarm-Modus, auf einer einzelnen Docker-Engine oder mit klassischem Schwarm zu verwalten.

  

Oder ist Overlay-Netzwerke zum Verbinden von Containern über verschiedene Hosts im Schwarm und Docker-Compose zum Erstellen interner Links?

     

Außerdem sehe ich auch, dass es in der Docker-Dokumentation erwähnt wird, dass - Links nicht mehr empfohlen werden und bald veraltet sein werden.

docker-compose beginnt ab Version 2 der Yml-Datei und verbindet mehrere Container standardmäßig mit einem neuen überbrückten Netzwerk pro Projekt (das Projekt verwendet standardmäßig den Verzeichnisnamen). Bei klassischem Schwarm würde dies standardmäßig auf ein Overlay-Netzwerk mit einem externen k / v-Speicher angewendet. Und mit einem Schwarm-Modus-Stack wäre dies ein Overlay-Netzwerk.

Die Verwendung von Andock-Netzwerken ist die bevorzugte Methode, um Container miteinander kommunizieren zu lassen. Sie möchten ein Netzwerk pro Gruppe von Containern, die Sie vom Rest Ihrer Docker-Umgebung isolieren möchten. docker-compose automatisiert diese Netzwerkerstellung, aber Sie können dies auch über die Befehlszeile mit docker networks create tun.

Die Verknüpfung wurde weitgehend durch Docker-Netzwerke mit integrierter DNS-Erkennung ersetzt. Wenn Sie Links von Ihrem docker-compose.yml entfernen, müssen Sie sie möglicherweise durch einen Abschnitt depends_on ersetzen, um die Startreihenfolge des Containers zu erzwingen. Ansonsten gibt es nur sehr wenige Szenarien, in denen die Verknüpfung sinnvoll ist und die gesamte Verwendung, die ich gesehen habe, von jemandem stammt, der einer veralteten Dokumentation folgt.

    
BMitch 03.03.2017 23:04
quelle
2

Ich denke, Sie haben das meiste Verständnis korrekt, was jeder ist, aber einige Feinabstimmungen sind erforderlich.

Du bist richtig docker-compose, um Multi-Container-Anwendungen zu erstellen. Früher haben Sie docker run .. verwendet, um jeden Container zu starten. Gewöhnlich können moderne Anwendungen, die das Mikroserviceparadigma umfassen, aus Dutzenden von Diensten bestehen, und die Verwendung von docker run .. wird sehr bald sehr ermüdend sein. Daher ermöglicht docker-compose das Ausdrücken aller Container und ihrer Eigenschaften sowie deren Verbindung untereinander als yaml oder json -Datei, so dass Sie sie einfacher verwalten können.

docker-compose ist also der Container-Orchestrierungsteil im Docker-Ökosystem.

Links sind unterschiedlich, sie sind nur ein Teil der Befehle docker-compose oder docker run und werden zugunsten von software defined networks veraltet, von denen overlay networks nur eine davon sind.

Swarm ist die Planungskomponente in Docker. Was ist Planung - es ist nichts als herauszufinden, wo Sie Ihre Container in Ihrem Cluster von Docker-Hosts "platzieren". Sie können einen Cluster aus Hunderten von Servern haben und Hunderte von Containern haben, von denen jeder einen Service für ein Dutzend verschiedener Anwendungen kapselt. Nun, wie sollten diese Container auf Ihrem Cluster von Hunderten von Servern verteilt werden, sollten einige Container nur auf bestimmten Hosts platziert werden, weil sie ein bestimmtes Kriterium erfüllen oder sie näher an (oder nicht) anderen Containern sein sollten, die irgendwie verwandt sind ... All dies sind Teil der Zeitplanungskomponente, die von Docker Swarm durchgeführt wird.

Ich schlage vor, dass Sie die Dokumentation zum ersten Start auf docker.com hier durchgehen: Ссылка

    
Anoop 02.03.2017 04:15
quelle
2
  

komponieren oder schwärmen oder schwärmen Overlay-Netzwerke

Sie würden finden, dass Sie alle oben genannten verwenden müssen, wenn Sie irgendetwas anderes als eine Demo auf Ihrem Laptop usw. machen.

Ich habe bewusst Schwarm & amp; Schwarm Overlay-Netzwerke, weil Sie nicht beide verwenden müssen, aber Sie können kein Overlay-Netzwerk erhalten, ohne einen Schwarm darunter zu haben.

Compose dient zum Zusammenführen mehrerer Container. Jetzt macht es Sinn, dass sie miteinander verwandt sind, obwohl sie es nicht sein können. Nehmen wir aber einen typischen Fall an, in dem die Container für miteinander in Beziehung stehende Dienste stehen, dann möchten Sie, dass sie miteinander kommunizieren, aber dennoch steuern, wie sie miteinander über Netzwerke kommunizieren. Nehmen wir zum Beispiel eine App mit 3 Ebenen, die einen Webserver, einen Anwendungsserver und eine Datenbank enthält. Nehmen wir an, alle drei Komponenten sind dockerisiert und Sie verwenden compose, um sie zusammen zu bringen, anstatt docker run.. dreimal mit verschiedenen Parametern usw. auszuführen. Alle drei würden angezeigt, aber Sie möchten steuern, wie sie miteinander verbunden sind. Sie möchten, dass der Webserver mit dem Anwendungsserver kommunizieren kann, aber nicht direkt mit der Datenbank. Und Sie möchten, dass der Anwendungsserver den DB-Server-Container anspricht und den Webserver anpingt. Alle Verbindungen sind zweiseitig, aber nur auf die Dienste beschränkt, die miteinander kommunizieren sollen. Für eine solche Anordnung würden Sie normalerweise 2 Netzwerke einrichten - sagen wir frontend und backend . Die Web- und App-Container sind mit dem Frontend-Netzwerk verbunden. Die App- und DB-Container sind mit dem Back-End-Netzwerk verbunden. Da es kein gemeinsames Netzwerk zwischen den DB- und Web-Containern gibt, können sie sich nicht berühren (pingen), was Ihre Absicht ist.

Wenn Sie nun möchten, dass diese 3 Dienste auf Ihrem Cluster von 100 Maschinen ausgeführt werden können und Sie auch über diese hinweg skalieren möchten, benötigen Sie ein Netzwerk, das mehrere Hosts umfasst. Hier kommt Overlay-Networking (im Schwarm) ins Spiel. Overlay-Networking ist nichts anderes als Multi-Host-Networking über VxLAN-Technologie. Sie müssen nicht über VxLAN Bescheid wissen, außer dass es sich um eine Standard-Netzwerktopologie handelt, die in fast allen modernen Netzwerkinfrastrukturen unterstützt wird.

Ich hoffe, das verdeutlicht.

Edit: Ich habe nicht gesehen, dass Sie schon eine Antwort bekommen haben!

    
Anoop 03.03.2017 20:54
quelle