Nach doch schon einigen Artikeln zum Thema Docker, zeige ich diesmal wie man ein Docker Swarm installiert.
Inhaltsverzeichnis
Was ist Docker Swarm?
Bei Docker Swarm handelt es sich um den in der Docker Engine integrierten Cluster Mode. Das heißt, mehrere Nodes werden zu einem Cluster (Swarm) zusammengefasst.
Ein Swarm besteht aus mehreren Docker-Hosts, die im Swarm-Mode laufen und als Manager (zur Verwaltung von Mitgliedschaft und Delegation) und Workern (zur Ausführung von Swarm-Diensten) fungieren. Ein bestimmter Docker-Host kann ein Manager oder ein Worker sein oder beide Rollen übernehmen.
Wenn ein Docker Service erstellt wird, definieren wir den optimalen Zustand des Services (Anzahl Replicas, Ports, Volumes, etc).
An dieser Stelle möchte ich aber noch kurz erwähnt haben, dass ich mittlerweile für den Clusterbetrieb Kubernetes einsetzte.
Setup
Mein Docker Swarm Setup für diesen Artikel umfasst drei installierte CentOS 7 Systeme:
- docker-master: 192.168.10.180
- docker-node1: 192.168.10.181
- docker-node2: 192.168.10.182
Die Systeme haben die aktuellen Updates installiert und eine lauffähige Docker Installation.
Docker Swarm Manager
Wir fangen mit dem Docker Manager an. Auf diesem erstellen wir einen neuen Swarm. Dafür wird der folgende Befehl verwendet.
1 2 3 4 5 6 7 8 9 10 | $ docker swarm init --advertise-addr 192.168.10.180 Swarm initialized: current node (t8vurh1mtla3etrjn872qvnoh) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3qbdzzr3r5dv9viqdja3aodpbq5kf97ysehv4jgb28cy5tvjwv-2l2q1oaz0oxc124ot2nuf1lkt 192.168.10.180:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. |
In der Ausgabe wird der Befehl zum Hinzufügen eines neuen Nodes angezeigt. Diesen Befehl sichert man in einer Textdatei, da man diesen später noch braucht.
Mit docker node ls bekommen wir eine Übersicht der im Swarm enthaltenen Instanzen. Dort sollte im Moment nur der Manager auftauchen:
1 2 3 | docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION t8vurh1mtla3etrjn872qvnoh * docker-master Ready Active Leader 19.03.12 |
Hinzufügen von Swarm Nodes
Um eine neue Node dem Swarm hinzuzufügen, wird der vorher gespeicherte Befehl verwendet. Dieser wird auf Node 1 und Node 2 ausgeführt.
1 | docker swarm join --token SWMTKN-1-3qbdzzr3r5dv9viqdja3aodpbq5kf97ysehv4jgb28cy5tvjwv-2l2q1oaz0oxc124ot2nuf1lkt 192.168.10.180:2377 |
Führen wir nun nochmal docker node ls aus, sollten auch die beiden Nodes in der Übersicht mit auftauchen:
1 2 3 4 5 | docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION t8vurh1mtla3etrjn872qvnoh * docker-master Ready Active Leader 19.03.12 lpvbgpbkp57d7xnnrt4i3qv8r docker-node1 Ready Active 19.03.12 wxt8t4g07zdl95cn76zixjyf7 docker-node2 Ready Active 19.03.12 |
Deployment eines Docker Services
Nachdem der Swarm installiert ist, können wir den ersten Container Deployen. Ich verwende dafür einfach einen nginx Container.
1 2 3 4 5 6 | docker service create --replicas 2 --name nginx nginx svo6ad4o8x1tbn3djqzjf5ebk overall progress: 2 out of 2 tasks 1/2: running [==================================================>] 2/2: running [==================================================>] verify: Service converged |
Mit dem docker service Befehl können wir nun überprüfen, ob zwei Instanzen von nginx laufen.
1 2 3 4 | docker service ps nginx ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS zw1zlbku6bym nginx.1 nginx:latest docker-master Running Running 2 minutes ago b1u0q5e29f9m nginx.2 nginx:latest docker-node2 Running Running 2 minutes ago |
Wie man an der Ausgabe sehen kann, sind zwei Instanzen gestartet. In der Spalte Node sieht man, auf welcher CentOS Instanz der Container gerade läuft.
Damit haben wir erfolgreich einen Docker Cluster installiert und in betrieb genommen. Habt ihr weitere Docker Themen die euch interessieren? Dann hinterlasst mir doch einen Kommentar mit diesem Thema für einen der nächsten Artikel.
Schreibe einen Kommentar