Ich versuche die Unterschiede oder Ähnlichkeiten zwischen Docker-Compose und Docker-Swarm zu verstehen .
Durch das Lesen der Dokumentation habe ich verstanden, dass Docker-Compose einen Mechanismus bietet, um verschiedene Container miteinander zu verbinden und als ein einziger Dienst zusammenzuarbeiten (ich vermute, es verwendet dieselbe Funktionalität wie der Befehl --link, der zum Verknüpfen zweier Container verwendet wird).
Mein Verständnis von Docker-Schwarm ist auch, dass Sie damit einen Cluster verschiedener Docker-Hosts verwalten können , auf denen jeweils mehrere Container-Instanzen einiger Docker-Images ausgeführt werden. Wir könnten Verbindungen als Overlay-Netzwerke zwischen verschiedenen Containern im Schwarm definieren (selbst wenn sie sich über zwei Docker-Hosts im Schwarm erstrecken), um sie als Einheit zu verbinden.
Ich versuche zu verstehen, ob Docker-Swarm Docker-Compose erfolgreich abgeschlossen hat und Overlay-Netzwerke die neue (empfohlene) Methode zum Verbinden von Containern sind.
Oder ist Docker-Compose immer noch ein integraler Bestandteil der gesamten Docker-Familie, und es wird erwartet und empfohlen, damit Container zu verbinden, um zusammenzuarbeiten. Wenn ja, funktioniert Docker-Compose mit Containern über verschiedene Knoten im Schwarm?
Oder dienen Overlay-Netzwerke zum Verbinden von Containern zwischen verschiedenen 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???
Danke vielmals!
quelle
Antworten:
Es wird wahrscheinlich helfen, mit ein paar Definitionen zu beginnen:
docker run
.Um die Fragen zu beantworten:
Sie bieten unterschiedliche Funktionen und erfüllen weiterhin beide einen Zweck. Docker-Compose kann keine Container im Schwarmmodus 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 Schwarmmodus, auf einer einzelnen Docker-Engine oder mit klassischem Schwarm zu verwalten.
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 klassischem Schwarm wird standardmäßig ein Overlay-Netzwerk verwendet, das einen externen k / v-Speicher verwendet. Und mit einem Schwarmmodus-Stack wäre dies ein Overlay-Netzwerk.
Die Verwendung von Docker-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 tun
docker networks create
.Die Verknüpfung wurde weitgehend durch Docker-Netzwerke mit integrierter DNS-Erkennung ersetzt. Wenn Sie Links aus Ihrer docker-compose.yml entfernen, müssen Sie diese möglicherweise durch einen
depends_on
Abschnitt ersetzen, um die Startreihenfolge des Containers zu erzwingen. Ansonsten gibt es nur sehr wenige Szenarien, in denen das Verknüpfen sinnvoll ist und die gesamte Verwendung, die ich gesehen habe, von jemandem stammt, der veraltete Dokumentation verfolgt.quelle
DAB
?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- und 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, obwohl dies möglicherweise nicht der Fall ist. Nehmen wir jedoch einen typischen Fall an, in dem die Container für Dienste bestimmt sind, die miteinander in Beziehung stehen. Dann 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 App-Server und einer Datenbank. Angenommen, alle drei Komponenten sind dockerisiert und Sie verwenden compose, um sie zusammenzuführen, anstatt sie auszuführen
docker run..
dreimal mit unterschiedlichen Parametern usw. Alle drei werden angezeigt, aber Sie möchten steuern, wie sie miteinander verbunden sind. Sie möchten, dass der Webserver mit dem App-Server kommunizieren kann, nicht jedoch direkt mit der Datenbank. Und Sie möchten, dass der App-Server den DB-Server-Container spricht (pingt) und auch den Webserver pingt. Alle Verbindungen sind bidirektional, jedoch nur auf die Dienste beschränkt, mit denen Sie kommunizieren möchten. Für eine solche Anordnung würden Sie normalerweise zwei Netzwerke einrichten - sagen wirfrontend
undbackend
. 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 dem Datenbank- und dem Webcontainer gibt, können sie sich nicht berühren (pingen), was Ihre Absicht ist.Wenn Sie nun möchten, dass diese drei Dienste auf Ihrem Cluster von Hunderten von Computern ausgeführt werden können und Sie auch über sie hinweg skalieren möchten, benötigen Sie ein Netzwerk, das mehrere Hosts umfasst. Hier kommt das Overlay-Networking (im Schwarm) ins Spiel. Overlay-Netzwerke sind nichts anderes als Multi-Host-Netzwerke, die über die VxLAN-Technologie aufgebaut sind. Sie müssen nicht über VxLAN Bescheid wissen, außer dass es sich um eine Standardnetzwerktopologie handelt, die in fast allen modernen Netzwerkinfrastrukturen unterstützt wird.
Ich hoffe das klärt sich.
Edit: Ich habe nicht gesehen, dass du schon eine Antwort hast!
quelle
Ich denke, Sie haben das meiste Verständnis dafür, was jedes ist, aber einige Anpassungen sind erforderlich.
Docker-Compose ist richtig, wenn Sie Anwendungen mit mehreren Containern aufrufen. Früher haben Sie
docker run ..
jeden Container gestartet. Normalerweise können moderne Anwendungen, die das Paradigma der Mikrodienste umfassen, aus Dutzenden von Diensten bestehen, und die Verwendungdocker run ..
wird sehr bald sehr mühsam. Mit Docker-Compose können Sie daher alle Container und ihre Eigenschaften sowie deren Verbindung alsyaml
oder alsjson
Datei ausdrücken, um sie einfacher zu verwalten.Docker-Compose ist also der Container-Orchestrierungs-Teil im Docker-Ökosystem.
Links sind unterschiedlich, sie sind nur ein Teil von Docker-Compose oder
docker run
Befehlen und werden abgelehnt,software defined networks
für dieoverlay networks
nur einer von ihnen ist.Schwarm ist die Planungskomponente im Docker. Was ist Zeitplanung? Es ist nichts anderes als herauszufinden, wo Ihre Container in Ihrem Cluster von Docker-Hosts "platziert" werden sollen. Sie können einen Cluster von Hunderten von Servern und Hunderte von Containern haben, die jeweils einen Dienst für ein Dutzend verschiedener Anwendungen kapseln. Wie sollten diese Container nun auf Ihren Cluster von 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 anderen Containern sein (oder nicht), die irgendwie verwandt sind ... 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/
quelle