Aktualisieren
Docker hat kürzlich ein neues Tool namens Swarm for Docker Orchestration angekündigt .
Mit Swarm können Sie mehreren Docker-Dämonen "beitreten": Sie erstellen zuerst einen Schwarm, starten einen Schwarmmanager auf einem Computer und lassen Docker-Dämonen den Schwarmmanager mit der Kennung des Schwarms "verbinden". Der Docker-Client stellt eine Verbindung zum Schwarmmanager her, als wäre er ein normaler Docker-Server.
Wenn ein Container mit Swarm gestartet wird, wird er automatisch einem freien Knoten zugewiesen, der alle definierten Einschränkungen erfüllt. Das folgende Beispiel stammt aus dem Blog-Beitrag:
$ docker run -d -P -e constraint:storage=ssd mysql
Eine der unterstützten Einschränkungen besteht darin "node"
, dass Sie einen Container an einen bestimmten Hostnamen anheften können. Der Schwarm löst auch Verbindungen zwischen Knoten auf.
Bei meinen Tests hatte ich den Eindruck, dass Swarm noch nicht sehr gut mit Volumes an einem festen Ort funktioniert (oder zumindest der Prozess der Verknüpfung nicht sehr intuitiv ist), daher ist dies zu beachten.
Swarm befindet sich jetzt in der Beta-Phase.
Bis vor kurzem war das Ambassador-Muster der einzige Docker-native Ansatz für die Erkennung von Remote-Host-Diensten. Dieses Muster kann weiterhin verwendet werden und erfordert keine Magie über Docker hinaus, da das Muster aus einem oder mehreren zusätzlichen Containern besteht, die als Proxys fungieren.
Darüber hinaus gibt es mehrere Erweiterungen von Drittanbietern, um Docker clusterfähig zu machen. Zu den Lösungen von Drittanbietern gehören:
- Durch das Verbinden der Docker-Netzwerkbrücken auf zwei Hosts gibt es leichtgewichtige und verschiedene Lösungen, jedoch im Allgemeinen mit einigen Einschränkungen
- DNS-basierte Erkennung , z. B. mit Skydock und SkyDNS
- Docker-Verwaltungstools wie Shipyard und Docker-Orchestrierungstools. In dieser Frage finden Sie eine ausführliche Liste: Skalieren von Docker-Containern in der Produktion
UPDATE 3
Libswarm wurde in Schwarm umbenannt und ist jetzt eine separate Anwendung.
Hier ist die Demo der Github-Seite, die Sie als Ausgangspunkt verwenden können:
UPDATE 2
Der offizielle Ansatz ist jetzt, libswarm zu verwenden. Sehen Sie sich hier eine Demo an
AKTUALISIEREN
Es gibt einen guten Kern für die Kommunikation von openvswitch-Hosts im Docker mit demselben Ansatz.
Um die Diensterkennung zu ermöglichen, gibt es einen interessanten DNS-basierten Ansatz namens skydock .
Es gibt auch einen Screencast .
Dies ist auch ein schöner Artikel, in dem dieselben Puzzleteile verwendet werden, aber auch Vlans hinzugefügt werden:
http://fbevmware.blogspot.it/2013/12/coupling-docker-and-open-vswitch.html
Das Patchen hat nichts mit der Robustheit der Lösung zu tun. Docker ist eigentlich nur eine Art DSL auf Linux-Containern, und beide Lösungen in diesen Artikeln umgehen einfach einige automatische Docker-Einstellungen und greifen direkt auf Linux-Container zurück.
Sie können die Lösungen also sicher verwenden und warten, bis sie einfacher sind, sobald Docker sie implementiert.
quelle
Weave ist eine neue virtuelle Docker-Netzwerktechnologie, die als virtueller Ethernet-Switch über TCP / UDP fungiert. Sie benötigen lediglich einen Docker-Container, in dem Weave auf Ihrem Host ausgeführt wird.
Was hier interessant ist, ist
Dies führt zu interessanten Szenarien wie
Beispielsweise gibt es eine Beispielanleitung zum Erstellen eines Cassandra-Clusters mit mehreren Knoten auf Ihrem Laptop und einigen Cloud-Hosts (EC2) mit zwei Befehlen pro Host. Ich habe einen CoreOS-Cluster mit AWS CloudFormation gestartet, Weave auf jedem In / Home / Core sowie auf meiner Laptop-Vagrant-Docker-VM installiert und in weniger als einer Stunde einen Cluster eingerichtet. Mein Laptop ist durch eine Firewall geschützt, aber Weave schien damit einverstanden zu sein. Er stellt lediglich eine Verbindung zu seinen EC2-Kollegen her.
quelle
Aktualisieren
Docker 1.12 enthält den sogenannten Schwarmmodus und fügt eine
service
Abstraktion hinzu. Sie sind wahrscheinlich nicht für jeden Anwendungsfall ausgereift genug, aber ich empfehle Ihnen, sie unter Beobachtung zu halten. Der Schwarmmodus hilft zumindest bei einem Multi-Host-Setup, was die Verknüpfung nicht unbedingt erleichtert. Der Docker-interne DNS-Server (seit 1.11) sollte Ihnen den Zugriff auf Containernamen erleichtern, sofern diese bekannt sind. Dies bedeutet, dass die generierten Namen in einem Swarm-Kontext nicht so einfach zu adressieren sind.Mit der Docker 1.9-Version erhalten Sie ein Multi-Host-Netzwerk . Sie bieten auch ein Beispielskript zur einfachen Bereitstellung eines funktionierenden Clusters.
Sie benötigen einen K / V-Store (z. B. Consul), mit dem Sie den Status für die verschiedenen Docker-Engines auf jedem Host gemeinsam nutzen können. Jede Docker-Engine muss mit diesem K / V-Speicher konfiguriert werden, und Sie können dann Swarm verwenden, um Ihre Hosts zu verbinden.
Dann erstellen Sie ein neues Overlay-Netzwerk wie folgt:
Container können jetzt mit dem Netzwerknamen als Ausführungsparameter ausgeführt werden:
Sie können auch mit einem Netzwerk verbunden werden, wenn sie bereits ausgeführt werden:
Weitere Details finden Sie in der Dokumentation .
quelle
Der folgende Artikel beschreibt ausführlich, wie Docker-Container auf mehreren Hosts verbunden werden: http://goldmann.pl/blog/2014/01/21/connecting-docker-containers-on-multiple-hosts/
quelle
Mit Open vSwitch oder Tinc können mehrere Docker-Subnetze miteinander verbunden werden. Ich habe Gists vorbereitet, um zu zeigen, wie es geht:
Der Vorteil, den ich bei der Verwendung dieser Lösung anstelle der
--link
Option und des Botschaftermusters sehe, besteht darin, dass ich sie transparenter finde: Es sind keine zusätzlichen Container erforderlich, und was noch wichtiger ist, es müssen keine Ports auf dem Host verfügbar gemacht werden. Eigentlich denke ich an die--link
Option, ein vorübergehender Hack zu sein, bevor Docker eine schönere Geschichte über Multi-Host- (oder Multi-Daemon-) Setups erhält.Hinweis: Ich weiß, dass es eine andere Antwort gibt, die auf meinen ersten Kern verweist, aber ich habe nicht genug Karma, um diese Antwort zu bearbeiten oder zu kommentieren.
quelle
Wie oben erwähnt, ist Weave definitiv eine praktikable Lösung, um Docker-Container zwischen den Hosts zu verbinden. Aufgrund meiner eigenen Erfahrung ist es ziemlich einfach, es einzurichten. Es hat jetzt auch einen DNS-Dienst, den Sie Container anhand ihrer DNS-Namen adressieren können.
Auf der anderen Seite gibt es CoreOS Flannel und Juniper Opencontrail für die Verkabelung der Container zwischen den Hosts.
quelle
Der Docker-Schwarm scheint
1.14
Ihnen Folgendes zu ermöglichen:Wenn Sie den Hostnamen mithilfe eines
--hostname
Tags dem Container zuordnen , aber ich konnte ihn nicht zum Laufen bringen. Container können sich nicht gegenseitig über zugewiesene Hostnamen anpingen.Zuweisen von Diensten zur Maschine mit
--constraint 'node.hostname == <host>'
quelle