So installierst du Docker Swarm unter Debian 11

Docker Swarm ist eine Container-Orchestrierung, die auf der Docker Engine aufbaut. Sie ermöglicht es dir, einen Cluster von Docker-Knoten mit mehreren Servern zu erstellen und einzusetzen. Docker Swarm vereinfacht die Bereitstellung deiner containerisierten Anwendung in einem Dienst. Docker Swarm bietet eine einfache und unkomplizierte Möglichkeit, Container zu verwalten und zu orchestrieren.

Docker Swarm bietet ein hohes Maß an Verfügbarkeit für Anwendungen. In Docker Swarm kannst du eine einzelne Anwendung oder einen Dienst auf mehreren Knoten, den sogenannten „Worker Nodes“, ausführen. Außerdem gibt es einen Knoten namens „Swarm Manager“, der die zentrale Verwaltung und Orchestrierung von Docker Swarm übernimmt.

Dieses Tutorial zeigt dir, wie du Docker Swarm auf Debian 11 Servern einrichtest. Du wirst Docker installieren, die UFW (Uncomplicated Firewall) einrichten, den „Swarm Manager“ initialisieren und „Nodes“ hinzufügen. Außerdem lernst du die grundlegende Verwendung von Docker Swarm für die Bereitstellung von Anwendungen.

Voraussetzungen

Für dieses Tutorial brauchst du mehrere Debian 11 Server und einen Nicht-Root-Benutzer mit sudo/root-Administrator-Rechten.

In dieser Demonstration werden wir drei Debian 11 Server mit den folgenden Details verwenden:

Hostname    IP Address        Used as
-------------------------------------
manager     192.168.5.100     Swarm Manager
node1       192.168.5.120     Node
node2       192.168.5.121     Node

Wenn du alle diese Voraussetzungen erfüllst, kannst du loslegen.

Docker installieren

Das Standard-Debian-Repository enthält ein Paket für Docker. Um aber sicherzustellen, dass du die neueste Version von Docker installierst, musst du Docker über das offizielle Docker-Repository installieren.

Außerdem musst du Docker auf allen deinen Debian-Servern installieren.

Bevor du das Repository hinzufügst, führe den folgenden apt-Befehl aus, um einige grundlegende Pakete wie curl und gnupg zu installieren. Wenn du aufgefordert wirst, die Installation zu bestätigen, gib Y ein und drücke ENTER.

sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y

Abhängigkeiten installieren

Nach der Installation der Basispakete fügst du den GPG-Schlüssel für das Docker-Repository mit folgendem Befehl hinzu. Mit diesem Befehl erstellst du ein neues Verzeichnis„/etc/apt/keyrings“ und speicherst den GPG-Schlüssel des Docker-Repositorys darin.

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Als nächstes fügst du das Docker-Repository für das Debian-Linux-System mit dem folgenden Befehl hinzu.

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Aktualisiere nun deinen Paketindex mit dem unten stehenden apt-Befehl.

sudo apt update

Du wirst sehen, dass das neue Docker-Repository aktualisiert wird.

Repository hinzufügen

Als Nächstes installierst du die Docker-Pakete mit dem folgenden apt-Befehl. Du wirst aufgefordert, die Installation zu bestätigen. Gib Y ein, um zu bestätigen, und drücke ENTER, um fortzufahren.

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Docker installieren

Nach der Installation von Docker musst du den folgenden Befehl ausführen, um den Dienst„docker“ zu starten und zu aktivieren. Dadurch wird „docker“ beim Systemstart automatisch ausgeführt.

sudo systemctl start docker
sudo systemctl enable docker

Überprüfe abschließend den„docker„-Dienst mit dem Befehl systemctl (siehe unten).

sudo systemctl status docker

Wenn der„docker„-Dienst läuft, solltest du eine Ausgabe wie im folgenden Screenshot sehen:

Servicestatus prüfen

Wenn du vorhast, einen Nicht-Root-Benutzer für deinen Einsatz zu verwenden, musst du deinen Benutzer zu„docker“ hinzufügen und ihm erlauben, Docker-Container auszuführen.

sudo usermod -aG docker user

Firewall einrichten

Wenn du Docker Swarm für die Produktion einsetzt, musst du die Firewall zwischen allen Knotenpunkten einrichten. In diesem Beispiel wirst du UFW als Standard-Firewall für deine Debian-Server verwenden.

Im Folgenden sind einige Ports aufgeführt, die du öffnen musst, damit Docker Swarm ordnungsgemäß funktioniert:

  • TCP-Port 2377 für die Kommunikation mit dem Clustermanagement – dieser Port wird verwendet, wenn du mehrere Swarm Manager hast.
  • TCP- und UDP-Port 7946 für die Kommunikation zwischen den Nodes – für alle Nodes in der Swarm-Umgebung.
  • UDP-Port 4789 für den Overlay-Netzwerkverkehr

Installiere UFW auf deinen Debian-Systemen mit dem folgenden apt-Befehl.

sudo apt install ufw -y

Nachdem UFW installiert ist, führe den folgenden„ufw„-Befehl aus, um das Anwendungsprofil„OpenSSH“ hinzuzufügen. Starte dann UFW und aktiviere es.

Während des Vorgangs wirst du gefragt, ob du die UFW-Firewall starten und aktivieren willst. Gib zur Bestätigung y ein und drücke ENTER, um fortzufahren.

sudo ufw allow "OpenSSH"
sudo ufw enable

ufw firewall aktivieren

Führe nun den folgenden ufw-Befehl aus, um einige Ports für Docker Swarm zu öffnen.

sudo ufw allow 2377/tcp
sudo ufw allow 7946/tcp
sudo ufw allow 7946/udp
sudo ufw allow 4789/udp

Überprüfe abschließend die Liste der aktivierten UFW-Regeln auf deinem Server mit dem folgenden ufw-Befehl. Vergewissere dich, dass alle Ports für Docker Swarm aktiviert und auf UFW verfügbar sind.

sudo ufw status

Firewall prüfen

Jetzt hast du Docker installiert und die UFW konfiguriert. Als Nächstes wollen wir den Swarm Manager initialisieren.

Initialisierung des Swarm Managers

Der Swarm Manager ist das Zentrum des Docker Swarm Deployments. Er verwaltet den Schwarmstatus selbst und hat keine Begrenzung für die Anzahl der Manager-Knoten. Wenn du mehrere Swarm Manager einsetzt, entsteht eine Umgebung mit Fehlertoleranz.

Der Swarm Manager ist ein in die Docker Engine integriertes Clustermanagement, das ein deklaratives Servicemodell, Serviceskalierung, den gewünschten Status von Services, Lastausgleich und rollierende Updates bietet.

In diesem Beispiel wirst du einen Knoten als Swarm Manager initialisieren.

Um den Swarm Manager zu initialisieren, führst du den folgenden Docker-Befehl aus. In diesem Beispiel wird der Swarm Manager unter der IP-Adresse 192.168.5.30 ausgeführt. Und das Netzwerk für die Container in der Docker Swarm-Umgebung ist 10.20.0.0/16.

docker swarm init --advertise-addr 192.168.5.30 --default-addr-pool 10.20.0.0/16

Wenn der Swarm Manager initialisiert ist, siehst du die folgende Ausgabe. Außerdem siehst du das Detail-Token für den Beitritt der Nodes zum Swarm Manager.

Schwarmmanager initialisieren

Führe nun den folgenden Docker-Befehl aus, um zu überprüfen, ob der Swarm-Modus aktiviert ist.

docker info

Im folgenden Screenshot siehst du, dass der Swarm-Modus„aktiv“ ist und die IP-Adresse„10.20.0.0/16“ verwendet wird. Außerdem ist der aktuelle Node, der im Docker Swarm verfügbar ist,„1„.

Schwarmmodus prüfen

Du kannst die Liste der Knoten im Docker Swarm mit dem unten stehenden Docker-Befehl überprüfen. Du solltest sehen, dass es nur einen Knoten im aktuellen Docker Swarm gibt, nämlich den Swarm Manager.

docker node ls

Checklisten-Knoten

Hinzufügen von Worker Nodes zum Swarm

Auf den Worker Nodes werden die Container ausgeführt und laufen. Auf dem Worker Node muss die Docker Engine auf jedem Server installiert sein, und der Worker Node kann auch als Swarm Manager befördert werden.

Um einen Worker Node hinzuzufügen, kannst du den Befehl „docker swarm join“ verwenden, gefolgt von dem Token, das bei der Initialisierung des Swarm Managers erzeugt wird.

Füge die beiden Server„node1“ und„node2“ mit dem unten stehenden Befehl„docker swarm join“ zum Docker Swarm hinzu. Du kannst das Token während der Initialisierung des Swarm Managers durch dein generiertes Token ersetzen.

docker swarm join \
--token SWMTKN-1-5tui5dveqw6n2b0m6suut0w7nf9w0wb5jyvfhmykb4jdehps1j-ag99f7750mmnim6ao5yp0x3s2 \
192.168.5.30:2377

Wenn der Node hinzugefügt wurde, erhältst du eine Meldung wie„Dieser Node ist einem Schwarm als Worker beigetreten„.

Unten siehst du die Ausgabe, die du auf den Servern„node1“ und„node2“ sehen wirst.

Knoten1 verbinden

Wenn du das Schwarm-Token für den Beitritt zum Arbeiterknoten verloren hast, kannst du es mit dem folgenden Befehl anzeigen.

docker swarm join-token worker

Zum Schluss kehrst du zum„manager„-Server zurück und überprüfst die Liste der Knoten in deiner Docker Swarm-Umgebung mit dem folgenden„docker„-Befehl.

docker node ls

Im folgenden Screenshot siehst du, dass sowohl„node1“ als auch„node2“ dem Docker Swarm mit dem Status„Ready“ und der Docker-Engine„20.10.18“ hinzugefügt wurden.

Knoten überprüfen ls

Die Bereitstellung von Docker Swarm ist abgeschlossen. Du kannst jetzt deine containerisierte Anwendung im Swarm bereitstellen.

Dienste auf Docker Swarm verwalten

Service ist ein Begriff für die Anwendungsbereitstellung in Docker Swarm. Es ist das Image für deine Microservices, z. B. ein HTTP-Server, ein Datenbankserver oder andere Anwendungen, die in deinem Docker Swarm laufen.

Um einen Dienst in Docker Swarm einzurichten, musst du das zu verwendende Image, den Port und die Anzahl der Replikate angeben.

Nachdem du Docker Swarm eingerichtet hast, lernst du nun die grundlegende Einrichtung deiner Dienste in Docker Swarm.

Erstelle einen neuen Dienst „test-httpd“ mit dem Befehl „docker service create“ (siehe unten).

In diesem Beispiel erstellst du einen neuen Dienst „test-httpd“ mit der Replik 1 und dem Port „8000“ auf dem Swarm-Knoten. Das Image, das du verwenden wirst, ist „httpd:alpine“.

docker service create --replicas 1 --name test-httpd -p 8000:80 httpd:alpine

Dienst ausführen

Sobald der Dienst „test-httpd“ läuft, überprüfe ihn mit dem folgenden Befehl. Du solltest sehen, dass der Dienst „test-httpd“ mit 1 Replikat läuft und den TCP-Port 8000 freigibt.

docker service ls

Listendienst

Führe nun den folgenden Befehl aus, um die Details des Dienstes „test-httpd“ zu überprüfen.

docker service inspect test-httpd
docker service inspect --pretty test-httpd

Unten siehst du die Details des Dienstes „test-httpd“. Dazu gehören die Anzahl der Replikate, die externen Ports, das verwendete Basis-Image usw.

Prüfdienst

Du kannst den laufenden Container des Dienstes „test-httpd“ auch mit dem Befehl „docker service ps“ überprüfen (siehe unten).

docker service ps test-httpd

Du kannst sehen, dass der Container „test-httpd.1“ auf dem Server „manager“ läuft.

Liste laufender Container

Öffne nun den Port „8000“ auf allen Servern mit dem unten stehenden ufw-Befehl.

sudo ufw allow 8000/tcp

Überprüfe dann den Dienst „test-httpd“ mit dem Befehl curl (siehe unten). 192.168.5.30″ ist die IP-Adresse des Swarm Managers und der „test-httpd“-Dienst läuft auf Port 8000.

curl 192.168.5.30:8000
curl -I 192.168.5.30:8000

Du siehst die Standardseite index.html des „test-httpd“-Dienstes.

Zugangsdienst

Dienste in Docker Swarm skalieren

Jetzt lernst du, wie du deine Dienste in Docker Swarm skalieren kannst.

Führe den folgenden Befehl aus, um den Dienst „test-httpd“ auf 3 Replikate zu skalieren.

docker service scale test-httpd=3

scale service

Überprüfe nun den laufenden Container des „test-httpd“-Dienstes mit dem folgenden Befehl. Du solltest drei verschiedene Container für den Dienst „test-http“ sehen, die auf dem Server Manager, Node1 und Node2 laufen.

docker service ps test-httpd

Listendienst

Führe abschließend den folgenden Docker-Befehl aus, um den laufenden Container auf den Servern node1 und node2 zu überprüfen. Du solltest sehen, dass der Container mit dem Namen „test-httpd.random name“ auf beiden Servern läuft. Außerdem kannst du sehen, dass der Container über den TCP-Port 8000 erreichbar ist.

Überprüfen des Containers auf node1.

docker ps
curl node1:8000

Prüfung von node1

Prüfen des Containers auf Node2.

docker ps
curl node2:8000

Knoten2 prüfen

Löschen von Diensten in Docker Swarm

Jetzt ist es an der Zeit, deine Umgebung aufzuräumen, indem du die Dienste löschst, die du in Docker Swarm bereitgestellt hast.

Führe den folgenden Befehl aus, um den Dienst „test-httpd“ aus dem Docker Swarm zu entfernen und zu löschen.

docker service rm test-httpd

Überprüfe dann den Dienst „test-httpd“ mit dem unten stehenden Befehl „docker service inspect“. Du solltest sehen, dass der Dienst gelöscht ist.

docker service inspect test-httpd

Dienst gelöscht

Außerdem kannst du mit dem unten stehenden Docker-Befehl die Liste der laufenden Container und Images in deinem Swarm überprüfen.

Du solltest sehen, dass der Container entfernt wurde und das httpd:alpine Image auf allen Servern verfügbar ist.

docker ps
docker images

Dienst überprüfen gelöscht

Fazit

In diesem Lernprogramm hast du den Docker Swarm mit drei Debian 11 Servern eingerichtet. Außerdem hast du die grundlegende Installation der Docker Engine auf einem Linux-Server und die grundlegende Konfiguration der UFW-Firewall auf einem Debian-System gelernt. Und schließlich hast du auch gelernt, wie du mit dem Befehl „docker service“ grundlegende Anwendungen in Docker Swarm bereitstellst.

Von hier aus kannst du nun deine containerisierten Anwendungen mit allen Abhängigkeiten in den Docker Swarm deployen. Du kannst auch weitere Swarm Manager hinzufügen, um die Hochverfügbarkeit deiner Docker Swarm Umgebung einzurichten.

Das könnte dich auch interessieren …