So installierst du Docker Swarm auf Rocky Linux
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. Es bietet eine einfache und leicht verständliche 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 Nodes ausführen, die „Worker Nodes“ genannt werden. Außerdem gibt es einen Knoten namens „Swarm Manager“, der die zentrale Verwaltung und Orchestrierung des Docker Swarms übernimmt.
In diesem Lernprogramm zeige ich dir, wie du Docker Swarm mit Rocky Linux Servern einrichtest. Du installierst Docker auf jedem Server, richtest Firewalld ein, initialisierst den Swarm Manager und fügst Nodes hinzu. Schließlich lernst du auch die grundlegende Nutzung von Docker Swarm für die Bereitstellung von containerisierten Anwendungen.
Voraussetzungen
Für diese Anleitung benötigst du mindestens drei Rocky Linux Server und einen Nicht-Root-Benutzer mit sudo/Administrator-Rechten.
Für diese Demonstration werden wir drei Rocky Linux Server verwenden (siehe unten):
Hostname IP Address Used as --------------------------------------------------- swarm-manager1 192.168.5.100 Swarm Manager worker1 192.168.5.120 Node worker2 192.168.5.121 Node
Wenn du alle diese Voraussetzungen erfüllst, kannst du mit dem Einsatz von Docker Swarm beginnen.
Docker installieren
Um Docker Swarm einzurichten, musst du die Docker Engine auf jedem Rechner/Server installieren. Für die Linux-Distribution Rocky kannst du Docker über das offizielle Docker-Repository installieren.
Jetzt installierst du die Docker Engine auf jedem deiner Rocky Linux-Server.
Füge das Docker-Repository für das Rocky Linux-System mit dem unten stehenden dnf-Befehl hinzu.
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
Sobald das Repository hinzugefügt ist, führe den unten stehenden dnf-Befehl aus, um die Repository-Liste zu überprüfen und alle Pakete zu aktualisieren.
sudo dnf repo list sudo dnf update
Wenn das Docker-Repository hinzugefügt wurde, siehst du die unten stehende Ausgabe:
Als Nächstes installierst du Docker mit dem unten stehenden dnf-Befehl. Wenn du aufgefordert wirst, die Installation zu bestätigen, gib y ein und drücke ENTER, um fortzufahren.
sudo dnf install docker-ce docker-ce-cli containerd.io
Sobald Docker installiert ist, starte und aktiviere den„docker„-Dienst mit dem Befehl systemctl (siehe unten). Der„docker„-Dienst sollte laufen und wird automatisch beim Systemstart ausgeführt.
sudo systemctl enable docker sudo systemctl start docker
Überprüfe abschließend den„Docker„-Dienst mit dem folgenden Befehl, um sicherzustellen, dass der Dienst läuft.
sudo systemctl status docker
Wenn der„docker„-Dienst läuft, solltest du die unten stehende Ausgabe erhalten.
Wenn du Docker mit einem Nicht-Root-Benutzer ausführen möchtest, musst du ihn mit dem unten stehenden Befehl zur Gruppe„docker“ hinzufügen.
sudo usermod -aG docker user
Firewalld einrichten
Für die Produktionsumgebung solltest du die Firewall auf jedem Server aktivieren. Auf dem Standard-Rocky-Linux-System ist die Firewalld standardmäßig aktiviert. Du musst also nur einige TCP- und UDP-Ports für den Einsatz von Docker Swarm hinzufügen.
Im Folgenden sind einige der TCP- und UDP-Ports aufgeführt, die du auf jedem Server öffnen musst, damit Docker Swarm ordnungsgemäß läuft:
- TCP-Port 2377 für die Kommunikation mit dem Clustermanagement – dies ist erforderlich, 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
Füge die Ports von Docker Swarm über den unten stehenden Befehl firewall-cmd zur Firewalld hinzu.
sudo firewall-cmd --add-port=2377/tcp --permanent sudo firewall-cmd --add-port=7946/tcp --permanent sudo firewall-cmd --add-port=7946/udp --permanent sudo firewall-cmd --add-port=4789/udp --permanent
Als Nächstes lädst du die Firewalld-Regeln neu und überprüfst die Liste der Ports in der Firewalld mit dem unten stehenden Befehl.
sudo firewall-cmd --reload sudo firewall-cmd --list-port
Du solltest sehen, dass einige TCP- und UDP-Ports für den Docker Swarm-Einsatz zur Firewalld hinzugefügt wurden.
Nachdem die Docker-Engine auf allen Servern installiert und die Firewalld-Konfiguration vorgenommen wurde, kannst du nun den Docker Swarm-Einsatz einrichten, indem du den ersten Knoten als „Swarm-Manager“ initialisierst.
Initialisierung des Swarm Managers
Der Swarm Manager ist das Gehirn deiner Docker Swarm Umgebung. Bei großen Deployments kannst du mehrere Server als Swarm Manager hinzufügen, was eine hohe Verfügbarkeit und Fehlertoleranz deines Swarm Managers ermöglicht.
Der Swarm Manager ist der Clustermanager für deinen Docker Swarm, er verwaltet den Status deiner Anwendungsimplementierungen und ist auch in die Docker Engine integriert. Der Swarm Manager bietet ein deklaratives Servicemodell und die Skalierung von Services, den gewünschten Servicezustand und bietet außerdem rollierende Updates.
In diesem Beispiel werden wir den Server „swarm-manager1“ mit der IP-Adresse „192.168.5.100“ als Swarm Manager initialisieren.
Führe den folgenden Befehl „docker swarm init“ auf dem Server „swarm-manager1“ aus, um die Initialisierung des Swarm Managers für dein Deployment zu starten.
In diesem Beispiel läuft der Swarm Manager unter der IP-Adresse „192.168.5.100“ und das Standardnetzwerk für die Dienste im Docker Swarm ist „10.10.0.0/16“.
docker swarm init --advertise-addr 192.168.5.100 --default-addr-pool 10.10.0.0/16
Jetzt solltest du eine Ausgabe ähnlich dem folgenden Screenshot sehen, wenn der Swarm Manager initialisiert wird. Außerdem siehst du die Anweisung, dass du Worker Nodes zu deinem Docker Swarm Deployment hinzufügen musst, einschließlich des generierten Tokens, den du verwenden musst.
Als Nächstes führst du den folgenden Docker-Befehl aus, um zu überprüfen, ob der Swarm-Modus aktiviert und eingeschaltet ist.
docker info
Du wirst sehen, dass der Swarm-Modus „aktiv“ ist und die Netzwerk-IP-Adresse für die Dienste „10.10.0.0/16“ lautet, was der Konfiguration während des Initialisierungsprozesses entspricht. Außerdem siehst du, dass der aktuell verfügbare Knoten im Docker Swarm nur „1“ ist.
Überprüfe die Liste der verfügbaren Knoten in deinem Docker Swarm mit dem unten stehenden Befehl„docker node„. Du wirst sehen, dass es nur einen Knoten in deinem Docker Swarm gibt.
docker node ls
Hinzufügen von Worker Nodes zu Swarm
In Docker Swarm hat der Worker Node das gleiche Konzept wie in anderen Container-Orchestrierungen, d.h. er ist der Ort, an dem die Container ausgeführt und betrieben werden. Die Docker-Engine muss auf jedem Worker-Node installiert werden, und der Worker kann auch zum „Swarm-Manager“ befördert werden.
Gleichzeitig kann der Swarm Manager auch als Worker Node verwendet werden, was bedeutet, dass deine Anwendung auch auf dem Swarm Manager ausgeführt werden kann.
Führe den folgenden Befehl„docker swarm join“ aus, um die Server„worker1“ und„worker2“ dem Docker Swarm hinzuzufügen. Achte auch darauf, dass du das Token durch das generierte Token in deiner Umgebung ersetzt.
docker swarm join \ --token SWMTKN-1-4qxedy87gygenejrw06hlqpuwfm6erulccfj1jhnmsn0kehbnb-2ld4g3zo36bzu8d8ss4115rhq 192.168.5.100:2377
Wenn du die Meldung„Dieser Node ist dem Schwarm als Worker beigetreten“ erhältst, bedeutet dies, dass der Worker-Node hinzugefügt wurde.
Du kannst die gleiche Ausgabe sehen, wenn„worker1“ und„worker2“ dem Docker Swarm beigetreten sind.
Als Nächstes rufst du wieder den Swarm Manager auf und führst den folgenden Docker-Befehl aus, um die Liste der Nodes in deinem Docker Swarm zu überprüfen.
docker node ls
Du solltest drei Knoten in deiner Docker Swarm Umgebung sehen. In diesem Beispiel wird der „swarm-manager1“ als Swarm Manager und die beiden Server „worker1“ und „worker2“ als Worker Nodes verwendet.
Außerdem kannst du die Liste der Nodes mit dem unten stehenden Docker-Befehl überprüfen.
docker info
Auf dem Swarm Manager Server kannst du die Ausgabe im folgenden Screenshot sehen. Es gibt 1 Manager und 3 Nodes (der Swarm-Manager wird auch als Worker verwendet).
Aber auf den Servern „worker1“ und „worker2“ siehst du die folgende Ausgabe. Du kannst die IP-Adresse des Swarm-Managers mit dem Standard-TCP-Port 2377 sehen.
An diesem Punkt hast du die Docker Swarm-Bereitstellung mit Rocky Linux abgeschlossen. Als Nächstes wirst du die Anwendung/den Dienst in deiner Swarm-Umgebung bereitstellen.
Dienste in Docker Swarm verwalten
Wenn du eine Anwendung in der Docker Swarm-Umgebung bereitstellst, wird diese Anwendung als „Dienst“ bezeichnet. Es ist ein Abbild deiner Microservice-Anwendung und kann ein HTTP-Server, ein Datenbankserver oder eine andere Anwendung sein.
Um einen Service in Docker Swarm bereitzustellen, musst du das Basis-Image, die Ports, den Namen deines Services und die Anzahl der Replikate für deinen Service angeben.
Jetzt lernst du das grundlegende Deployment deiner Dienste in Docker Swarm.
In diesem Beispiel erstellst du einen neuen Dienst „test-httpd“ mit 1 Replikat und dem Port „8000“ auf dem Swarm-Knoten. Das Image, das du verwenden wirst, ist „httpd:alpine“.
Führe den folgenden Befehl„docker service“ aus, um einen neuen Dienst zu erstellen.
docker service create --replicas 1 --name test-httpd -p 8000:80 httpd:alpine
Überprüfe nun die Dienste in deinem Docker Swarm mit dem folgenden docker-Befehl. Du solltest sehen, dass der Dienst „test-httpd“ läuft und auch den TCP-Port 8000 mit nur einer Replik freigegeben hat.
docker service ls
Als Nächstes überprüfst du die Details deines „test-httpd“-Dienstes mit dem folgenden Befehl.
docker service inspect test-httpd docker service inspect --pretty test-httpd
Unten siehst du den detaillierten Dienst von „test-httpd“.
Außerdem kannst du den Container, auf dem der Dienst „test-httpd“ läuft, mit dem Befehl „docker service“ überprüfen (siehe unten).
docker service ps test-httpd
Du kannst sehen, dass der Container „test-httpd.1“ auf dem Server „swarm-manager1“ läuft.
Öffne nun den Port „8000“ auf allen Servern mit dem folgenden Firewall-Befehl.
sudo firewall-cmd --add-port=8000/tcp
Überprüfe danach den Dienst „test-httpd“ mit dem Befehl curl wie unten beschrieben. In diesem Beispiel lautet die IP-Adresse des „swarm-manager1“ „192.168.5.100“.
curl 192.168.5.30:8000 curl -I 192.168.5.30:8000
Du siehst die Standardseite index.html des Dienstes „test-httpd“.
Dienste in Docker Swarm skalieren
Nachdem du den Dienst in Docker Swarm implementiert hast, lernst du nun, wie du deine Dienste und Anwendungen skalieren kannst.
Führe den folgenden Befehl aus, um den Dienst „test-httpd“ auf 3 Replikate zu skalieren. Mit diesem Befehl werden zwei weitere Dienste von „test-httpd“ auf Worker Nodes erstellt.
docker service scale test-httpd=3
Überprüfe nun die Liste der laufenden Dienste mit folgendem Befehl. Du solltest sehen, dass ein weiterer „test-httpd“-Dienst auf den beiden Servern „worker1“ und „worker2“ läuft.
docker service ps test-httpd
Überprüfe schließlich den Dienst mit dem Befehl curl auf den Servern „worker1“ und „worker2“. Wenn der Dienst läuft, solltest du die Standardseite index.html auf deinem Bildschirm sehen.
Überprüfe den Dienst auf worker1.
docker ps curl worker1:8000
Überprüfe den Dienst auf worker2.
docker ps curl worker2:8000
Löschen von Diensten in Docker Swarm
Du hast die grundlegenden Bereitstellungs- und Skalierungsdienste von Docker Swarm kennengelernt. Als Nächstes wirst du deine Docker Swarm-Umgebung aufräumen, indem du den Dienst „test-httpd“ löschst.
Führe den folgenden Befehl aus, um den Dienst „test-httpd“ aus dem Docker Swarm zu entfernen.
docker service rm test-httpd
Überprüfe danach 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
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
Fazit
In dieser Anleitung hast du den Docker Swarm mit drei Rocky Linux Servern eingerichtet. Außerdem hast du die Installation der Docker Engine auf einem Linux-Server und die Konfiguration von Firewalld auf dem Rocky Linux-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.