wake-up-neo.com

Wann Sie Docker-Compose und wann Docker-Swarm verwenden sollten

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 zum Zusammenbinden verschiedener Container und zur Zusammenarbeit als ein einziger Dienst bietet (ich nehme an, er verwendet dieselbe Funktionalität wie - link Befehl zum Verbinden zweier Container)

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

Ich versuche zu verstehen, dass Docker-Swarm erfolgreich Docker-Compose und Overlay-Netzwerke die neue (empfohlene) Methode zum Verbinden von Containern sind.

Oder ist docker-compose nach wie vor ein fester Bestandteil der gesamten Docker-Familie, und es wird erwartet und empfohlen, Container damit für die Zusammenarbeit zu verbinden. Wenn ja, funktioniert Docker-Compose mit Containern über verschiedene Knoten im Schwarm?

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

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

Ich bin ein bisschen verwirrt???

Vielen Dank!

56
Shabirmean

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

  • docker-compose: Befehl zum Konfigurieren und Verwalten einer Gruppe zusammengehöriger Container. Es ist ein Frontend für die gleichen APIs, die von der Docker-CLI verwendet werden, sodass 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 jetzt auch vom Swarm-Modus verwendet wird.
  • Schwarmmodus: Wird verwendet, um eine Gruppe von Docker-Engines als eine Einheit zu verwalten und eine Orchestrierung bereitzustellen (wobei ständig versucht wird, Unterschiede zwischen dem aktuellen Status und dem Zielstatus zu korrigieren).
  • service: Ein oder mehrere Container für dasselbe Image und dieselbe Konfiguration in swarm, mehrere Container bieten Skalierbarkeit.
  • stack: Ein oder mehrere Dienste innerhalb eines Schwarms. Diese können mithilfe einer DAB- oder einer docker-compose.yml-Datei definiert werden.
  • Bridge-Netzwerk: Netzwerk, das von einer einzelnen Docker-Engine verwaltet wird und in dem mehrere Container miteinander kommunizieren können. Möglicherweise werden mehrere Netzwerke von einer Engine verwaltet, und Container können keinem oder mehreren Netzwerken zugeordnet werden.
  • Overlay-Netzwerk: Ähnlich wie ein Bridge-Netzwerk, jedoch mit mehreren Docker-Engines. Diese erfordern einen Schlüssel-/Wertespeicher, um ihren Status beizubehalten. Der Schwarmmodus bietet dies, aber wenn der Schwarmmodus deaktiviert ist, können Sie auch etcd, consul oder zookeeper verwenden.
  • links: Eine Methode zum Verbinden von Containern vor dem überbrückten Netzwerk. Die Verwendung wird nicht mehr empfohlen.
  • klassischer Schwarm: Ein Vorgänger des integrierten Schwarmmodus, der als Container ausgeführt wird und es ermöglicht, dass mehrere Engines als eine angezeigt werden, jedoch keine Orchestrierung bereitstellt oder keinen eigenen k/v-Speicher enthält.

Um die Fragen zu beantworten:

ist es Docker-Swarm gelungen, Docker-Compose- und Overlay-Netzwerke zu erstellen? Ist dies die neue (empfohlene) Methode, um Container zu verbinden?

Oder ist docker-compose nach wie vor ein fester Bestandteil der gesamten Docker-Familie, und es wird erwartet und empfohlen, Container damit für die Zusammenarbeit zu verbinden. Wenn ja, funktioniert Docker-Compose mit Containern über verschiedene Knoten im Schwarm?

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

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

Außerdem sehe ich auch, dass in der Docker-Dokumentation erwähnt ist, dass --links nicht mehr empfohlen werden und demnächst veraltet sein werden.

docker-Compose ab Version 2 der yml-Datei verbindet standardmäßig mehrere Container mit einem neuen überbrückten Netzwerk pro Projekt (das Projekt verwendet standardmäßig den Verzeichnisnamen). Bei einem klassischen Schwarm wird standardmäßig ein Overlay-Netzwerk verwendet, das einen externen k/v-Speicher verwendet. Und mit einem Schwarmmodusstapel wäre dies ein Overlay-Netzwerk.

Die Verwendung von Docker-Netzwerken ist die bevorzugte Methode, um Container miteinander zu kommunizieren. Sie möchten ein Netzwerk für jede 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 Docking-Netzwerke mit integrierter DNS-Erkennung ersetzt. Wenn Sie Links aus Ihrer docker-compose.yml entfernen, müssen Sie diese möglicherweise durch einen Abschnitt depends_on Ersetzen, um die Container-Startreihenfolge zu erzwingen. Ansonsten gibt es nur sehr wenige Szenarien, in denen das Verknüpfen sinnvoll ist und die Verwendung, die ich gesehen habe, von jemandem stammt, der einer veralteten Dokumentation folgt.

76
BMitch

zusammenstellen oder Schwärmen oder Schwärmen von Overlay-Netzwerken

Sie werden feststellen, dass Sie alle oben genannten Funktionen verwenden müssen, wenn Sie etwas anderes als eine Demo auf Ihrem Laptop usw. ausführen.

Ich habe absichtlich Schwarm & Schwarm-Overlay-Netzwerke getrennt, da 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, auch wenn dies möglicherweise nicht der Fall ist. Nehmen wir jedoch einen typischen Fall an, in dem sich die Container auf miteinander in Beziehung stehende Dienste beziehen, möchten Sie, dass sie auf irgendeine Weise miteinander kommunizieren, aber dennoch steuern, wie sie über Netzwerke miteinander kommunizieren. Nehmen Sie zum Beispiel eine dreistufige App mit einem Webserver, einem Anwendungsserver und einer Datenbank. Angenommen, alle drei Komponenten sind dockerisiert, und Sie verwenden compose, um sie zusammenzuführen, anstatt docker run.. Dreimal mit unterschiedlichen Parametern usw. auszuführen andere. Sie möchten, dass der Webserver mit dem Anwendungsserver kommunizieren kann, nicht jedoch direkt mit der Datenbank. Und Sie möchten, dass der Anwendungsserver über den DB-Server-Container spricht (pingt) und auch den Webserver pingt. Alle Verbindungen sind bidirektional, jedoch nur auf die Dienste beschränkt, die Sie miteinander kommunizieren möchten. Für eine solche Anordnung würden Sie normalerweise zwei Netzwerke einrichten - beispielsweise frontend und backend. Die Web- und App-Container sind mit dem Frontend-Netzwerk verbunden. Die app- und db-Container sind mit dem Backend-Netzwerk verbunden. Da es kein gemeinsames Netzwerk zwischen Datenbank- und Webcontainern gibt, können sie sich nicht gegenseitig berühren (pingen), was Ihre Absicht ist.

Wenn Sie möchten, dass diese drei Dienste auf einem Cluster von 100 Computern ausgeführt werden können und auch über mehrere Hosts hinweg skaliert werden können, benötigen Sie ein Netzwerk, das sich über mehrere Hosts erstreckt. Hier kommt das Overlay-Networking (im Schwarm) ins Spiel. Overlay-Netzwerke sind nichts anderes als Multi-Host-Netzwerke, die auf der VxLAN-Technologie aufbauen. Sie müssen sich nicht mit VxLAN auskennen, außer dass es sich um eine Standard-Netzwerktopologie handelt, die in fast allen modernen Netzwerkinfrastrukturen unterstützt wird.

Ich hoffe das klärt.

Edit: Ich habe nicht gesehen, dass du schon eine Antwort hast!

10
Anoop

Ich denke, Sie haben das meiste Verständnis dafür, was das ist, aber einige Anpassungen sind erforderlich.

Sie haben Recht, Docker-Compose ist das Aufrufen von Anwendungen mit mehreren Containern. Früher hast du docker run .. um jeden Container zu starten. Normalerweise können moderne Anwendungen, die das Paradigma der Mikrodienste umfassen, aus Dutzenden von Diensten bestehen und docker run .. wird sehr bald sehr ermüdend. Daher können Sie mit docker-compose alle Container und ihre Eigenschaften sowie die Art und Weise, wie sie miteinander verbunden sind, als yaml- oder json -Datei ausdrücken, um sie einfacher verwalten zu können.

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

Links sind unterschiedlich, sie sind nur ein Teil von docker-compose oder docker run Befehle und sind veraltet zu Gunsten von software defined networks von welchem ​​overlay networks sind nur einer von ihnen.

Schwarm ist die Planungskomponente in Docker. Was ist Zeitplanung - es ist nichts anderes als herauszufinden, wo Sie Ihre Container in Ihrem Cluster von Docker-Hosts "platzieren" sollen. Sie können einen Cluster mit Hunderten von Servern und Hunderten von Containern haben, die jeweils einen Dienst für ein Dutzend verschiedener Anwendungen kapseln. Wie sollten diese Container nun auf Ihren Cluster mit Hunderten von Servern verteilt werden, sollten einige Container nur auf bestimmten Hosts platziert werden, weil sie bestimmte Kriterien erfüllen, oder sollten sie näher an (oder nicht) anderen Containern liegen, die in irgendeiner Weise zusammenhängen? All dies ist Teil der Planungskomponente, die von Docker Swarm ausgeführt wird.

Ich schlage vor, dass Sie die Dokumentation zu den ersten Schritten auf docker.com hier durchgehen: https://docs.docker.com/engine/getstarted-voting-app/

4
Anoop