Bereitstellen von Docker Swarm

Erfahren Sie, wie Sie das native Clustering-Tool von Docker, Docker Swarm, einsetzen können. Swarm verwandelt einen Pool von Docker-Hosts (einschließlich Remote-Servern) in einen einzigen virtuellen Host. Sie können dann eine Anwendung auf dem gesamten verteilten Cluster ausführen.

Anforderungen

  • Ein oder mehrere Server mit CentOS 7 oder Ubuntu 14.04.
  • Docker ist auf Ihrem Computer installiert und läuft dort.
  • Grundkenntnisse in der Verwendung von Docker und den entsprechenden Befehlen.

Firewall-Regeln

Um zu beginnen, müssen Sie den Zugriff auf die Firewall für die von Swarm verwendeten Ports erlauben. Gehen Sie zu Ihrem Cloud Panel und klicken Sie auf Netzwerk -> Firewall-Richtlinien (Network -> Firewall Policies) im Menü auf der linken Seite.

Docker Swarm

Wenn Sie zuvor eine Firewall-Richtlinie erstellt haben, klicken Sie auf diese Richtlinie, um sie auszuwählen, und scrollen Sie nach unten, um sie zu bearbeiten. Klicken Sie andernfalls auf Erstellen (Create), um Ihre neue Firewall-Richtlinie zu erstellen.

Click Create

Geben Sie Ihrer Richtlinie einen Namen und geben Sie dann Ihre Firewall-Regeln ein.

Add firewall policy

Nachdem Sie eine Regel hinzugefügt haben, klicken Sie nach jeder Regel auf die grüne Schaltfläche +, um sie hinzuzufügen und eine neue Zeile zu erhalten.

Click the green +

Fügen Sie die folgenden Regeln hinzu:

  • TCP/UDP, vom Port 4000 zu Port 4000, ALL
  • TCP/UDP, vom Port 7946 zu Port 7946, ALL
  • TCP/UDP, vom Port 8500 zu Port 8500, ALL
  • TCP, vom Port 22 zu Port 22, ALL
  • TCP, vom Port 80 zu Port 80, ALL
  • TCP, vom Port 2375 zu Port 2375, ALL
  • TCP, vom Port 2376 zu Port 2376, ALL
  • TCP, vom Port 3375 zu Port 3375, ALL
  • TCP, vom Port 3376 zu Port 3376, ALL
  • TCP, vom Port 8300 zu Port 8300, ALL
  • TCP, vom Port 8301 zu Port 8301, ALL
  • TCP, vom Port 8302 zu Port 8302, ALL
  • TCP, vom Port 8400 zu Port 8400, ALL
  • UDP, vom Port 4789 zu Port 4789, ALL

WICHTIG: Wenn es sich um eine neue Firewall-Richtlinie handelt, sollten Sie auch alle Firewall-Regeln hinzufügen, die für Ihre bestehenden Dienste gelten.

Klicken Sie auf die Schaltfläche Vordefinierte Werte hinzufügen (Add Predefined Values) und klicken Sie alle zutreffenden Dienste an, um diese auszuwählen.

Click the green +

Wenn Sie Ihre neuen Firewall-Regeln hinzugefügt haben, klicken Sie auf die Schaltfläche Create.

Click Create

Als nächstes müssen Sie Ihre Server dieser Firewall-Regel zuordnen. Scrollen Sie nach unten und klicken Sie auf die Schaltfläche Zuweisen (Assign).

Click Assign

Klicken Sie auf den/die Server, um diejenigen auszuwählen, die Sie dieser Firewall-Regel zuordnen möchten. Klicken Sie dann auf Änderungen speichern (Save Changes).

Assign server

Swarm Concepts

Swarm fasst einen Pool von Docker-Containern zu einem Cluster zusammen, so dass sie wie ein großer Container wirken. Sie können einen Swarm-Cluster mit einem Pool von Containern auf demselben Host betreiben. Sie können auch Pools von Containern von externen Hosts mit dem Swarm verbinden.

Jedes Swarm-Cluster benötigt mindestens einen Host, der als Swarm-Manager fungiert. Die Einstellung mehrerer Hosts als Manager bietet Redundanz, so dass Ihr Swarm-Cluster nicht ausfällt, wenn der Manager nicht verfügbar ist.

Das Swarm-Cluster benötigt zusätzlich Discovery-Services. Ein Discovery-Service ermöglicht es Containern, ihr für sie bestimmtes Swarm-Cluster zu finden und sich mit ihm zu verbinden.  Für dieses Beispiel werden wir Consul verwenden. Weitere Discovery-Services sind Etcd und Zookeeper.

Für dieses Beispiel werden wir nur zwei Server verwenden: einen Manager, der auch Consul ausführen wird, und einen Knoten.

Ein Hinweis zur Installation von Docker Swarm: Docker Swarm ist in die Docker Engine integriert. Eine separate Installation ist nicht erforderlich.

Swarm Betreiben

Gehen Sie wie folgt vor, um ein Docker-Swarm-Cluster zu erstellen:

  • Starten Sie Docker im -H-Modus auf dem Host, der als Manager fungiert.

  • Führen Sie einen Consul-Container auf dem Manager aus.

  • Führen Sie einen Swarm-Container auf dem Manager aus.

  • Starten Sie Docker im -H-Modus auf einem zweiten Host, der als Knoten dient.

  • Lassen Sie einen Swarm-Container auf dem Knoten laufen und verbinden Sie ihn mit dem Swarm.

  • Testen Sie das Swarm-Cluster und starten Sie eine "Hello World"-Anwendung.

Docker im Host-Modus auf dem Manager ausführen

Wenn Docker bereits auf der Maschine läuft, die Sie als Manager verwenden werden, stoppen Sie es mit dem Befehl:

CentOS 7:

systemctl stop docker

Ubuntu 14.04:

service docker stop

Sobald Docker gestoppt ist, starten Sie es mit dem Flag -H, um es im Host-Modus auszuführen:

sudo nohup docker daemon -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock &

Startoptionen anpassen

Wenn der Server neu gestartet wird, startet Docker standardmäßig ohne das Flag -H neu. Um dieses Flag zu den Startup-Regeln von Docker hinzuzufügen, müssen Sie die Startoptionen bearbeiten.

CentOS 7

Bearbeiten Sie die Datei /etc/sysconfig/docker:

sudo nano /etc/sysconfig/docker

In der Zeile OPTIONS fügen Sie das Flag -h hinzu, sie lautet dann:

OPTIONS='--selinux-enabled -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock'

Speichern und beenden Sie die Datei.

Ubuntu 14.04

Bearbeiten Sie die Datei /etc/default/docker:

sudo nano /etc/default/docker

Fügen Sie in der Zeile DOCKER_OPTS das Flag -h hinzu, sie lautet dann:

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock"

Speichern und beenden Sie die Datei.

Einen Konsul-Container betreiben

Installieren und starten Sie auf dem Manager einen Consul-Container mit dem Befehl:

sudo docker run --restart=always -d -p 8500:8500 --name=consul progrium/consul -server -bootstrap

Hinweis: In einem großen Produktionscluster ist es eine gute Vorgehensweise, den Consul-Dienst auf einem separaten Host auszuführen. In diesem Beispiel betreiben wir Consul und den Manager-Container auf demselben Host:

Ausführen eines Swarm-containers auf dem Manager

Starten Sie den Swarm-Container auf dem Manager mit dem folgenden Befehl und ersetzen Sie die entsprechenden IP-Adressen:

sudo docker run --restart=always -d -p [manager IP address]:4000:4000 swarm manage -H :4000 --replication --advertise [manager IP address]:4000 consul://[Consul IP address]:8500

Für dieses Beispiel werden wir Consul auf dem gleichen Server wie der Manager betreiben, IP-Adresse 192.168.0.1:

sudo docker run --restart=always -d -p 192.168.0.1:4000:4000 swarm manage -H :4000 --replication --advertise 192.168.0.1:4000 consul://192.168.0.1:8500

Docker im Host-Modus auf dem Knoten starten

Wenn Docker bereits auf dem Server läuft, den Sie als Knoten verwenden werden, stoppen Sie es mit dem Befehl:

CentOS 7:

sudo systemctl stop docker

Ubuntu 14.04:

sudo service docker stop

Sobald das Docker gestoppt ist, starten Sie es mit dem Flag -H, um es im Host-Modus auszuführen:

sudo nohup docker daemon -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock &

Einen Swarm-Container auf dem Knoten ausführen

Starten Sie den Swarm-Container auf jedem Host, den Sie als Knoten einsetzen möchten, mit dem folgenden Befehl und ersetzen Sie die entsprechenden IP-Adressen:

sudo docker run --restart=always -d swarm join --advertise=[Node IP address]:2375 consul://[Consul IP address]:8500

Für dieses Beispiel befinden wir uns auf einem Node-Server mit der IP-Adresse 192.168.0.255, der sich mit dem Consul-Dienst auf dem Manager-Server verbindet, IP-Adresse 192.168.0.1:

sudo docker run --restart=always -d swarm join --advertise=192.168.0.255:2375 consul://192.168.0.1:8500

Wiederholen Sie die Schritte 4 und 5 für alle anderen Server, die Sie als Knoten im Swarm hinzufügen möchten.

Swarm testen

Sie können Informationen über das Swarm-cluster von jedem mit ihm verbundenen Host mit foldendem Befehl abrufen:

sudo docker -H [manager IP address]:4000 info

Sie erhalten Informationen über den Zustand des Swarm-clusters, einschließlich der mit ihm verbundenen Container.

Das offizielle Docker Swarm Image beinhaltet eine Testanwendung "Hello World", die Sie auf Ihrem Swarm ausführen können. Testen Sie Ihr Swarm-Cluster, indem Sie dieses Programm mit folgendem Befehl ausführen:

sudo docker -H [manager IP address]:4000 run hello-world

Die Ausgabe sollte wie folgt beginnen:

Hello from Docker.
This message shows that your installation appears to be working correctly.

Zum Schluss überprüfen Sie, von welchem der swarm-Knoten aus der Befehl ausgeführt wurde:

sudo docker -H [manager IP address]:4000 ps -a