Die Orchestrierung von Containern ist heutzutage ein entscheidender Faktor für die Skalierung und den Betrieb von Microservices-Architekturen. Während Kubernetes in der Welt der Container-Orchestrierung weit verbreitet ist, bietet Docker mit dem Swarm Mode eine integrierte, einfach zu bedienende und dennoch leistungsstarke Alternative für das Management von Clustern.
In diesem Blogbeitrag zeigen wir dir, wie du den Docker Swarm Mode nutzen kannst, um Container auf mehreren Maschinen zu orchestrieren, Cluster zu erstellen und hochverfügbare, skalierbare Anwendungen zu betreiben.
Was ist Docker Swarm?
Docker Swarm ist eine eingebaute Orchestrierungsfunktion von Docker, die es ermöglicht, Container-Cluster einfach zu verwalten. Swarm ist ein „Container-Orchestrator“, der mehrere Docker-Hosts zu einem einzigen virtuellen Cluster zusammenschließen kann, um Container in großem Maßstab effizient zu verwalten und bereitzustellen.
Swarm bietet:
- Automatische Skalierung: Dienste können einfach auf mehrere Maschinen skaliert werden.
- Hohe Verfügbarkeit: Wenn ein Knoten ausfällt, werden die Container auf anderen Maschinen automatisch neu gestartet.
- Lastverteilung: Der Netzwerkverkehr wird auf mehrere Knoten verteilt.
- Integrierte Sicherheitsfunktionen: Swarm nutzt eingebaute TLS-Verschlüsselung und Authentifizierung für eine sichere Kommunikation zwischen den Knoten.
Voraussetzungen
Um Docker Swarm einzurichten und zu nutzen, benötigst du:
- Mehrere Maschinen oder virtuelle Instanzen mit installiertem Docker (mindestens Version 1.12 oder höher).
- Grundlegende Kenntnisse von Docker und Container-Konzepten.
- Zugriff auf ein Terminal oder eine Shell.
Schritt 1: Swarm Cluster initialisieren
Beginnen wir mit dem Aufbau eines Docker Swarm Clusters. Wir benötigen zunächst eine Manager-Knoten, der den Cluster steuert, und beliebige Worker-Knoten, die die tatsächliche Containerarbeit übernehmen.
Manager-Knoten initialisieren
- Melde dich auf deinem zukünftigen Manager-Knoten an und initialisiere den Swarm Mode mit folgendem Befehl:
docker swarm init --advertise-addr <MANAGER-IP>
Hierbei gibt --advertise-addr
die IP-Adresse des Managers an, die andere Knoten verwenden, um dem Cluster beizutreten.
Ausgabe:
Swarm initialized: current node (xxxxxx) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token <WORKER-TOKEN> <MANAGER-IP>:2377
Dieser Befehl initialisiert den Docker Swarm Mode auf dem Manager-Knoten und generiert ein Join-Token, das zum Hinzufügen von Worker-Knoten verwendet wird.
Worker-Knoten zum Swarm hinzufügen
- Melde dich auf einem Worker-Knoten an und füge ihn dem Cluster hinzu:
docker swarm join --token <WORKER-TOKEN> <MANAGER-IP>:2377
Ersetze <WORKER-TOKEN>
durch das in der vorherigen Ausgabe angezeigte Token und <MANAGER-IP>
durch die IP-Adresse des Managers.
- Wiederhole diesen Schritt für alle Worker-Knoten, die du dem Cluster hinzufügen möchtest.
Um den Status deines Swarm Clusters zu überprüfen, benutze folgenden Befehl auf dem Manager-Knoten:
docker node ls
Dieser Befehl zeigt dir alle Knoten im Cluster und ihren Status an.
Schritt 2: Erstellen und Bereitstellen eines Services im Swarm
Jetzt, wo unser Cluster eingerichtet ist, können wir Services bereitstellen, die auf den Knoten verteilt werden. Ein Service ist eine langfristige Aufgabe, die auf einem oder mehreren Knoten im Swarm läuft, und umfasst die Definition von Containern, Skalierungsanforderungen und Netzwerkoptionen.
Beispiel: Bereitstellen eines NGINX-Services
- Um einen NGINX-Service zu erstellen und über den Swarm Mode zu verteilen, verwende den folgenden Befehl:
docker service create --name my_nginx --replicas 3 -p 8080:80 nginx
Dieser Befehl erstellt einen Service namens my_nginx
, der auf drei Knoten repliziert wird. Der Dienst wird dem externen Port 8080 zugewiesen, der auf den internen NGINX-Port 80 gemappt wird.
Erklärung:
--name
: Der Name des Dienstes.--replicas
: Die Anzahl der gewünschten Instanzen (Replikate) des Services.-p
: Port-Mapping zwischen dem Host und dem Container.
- Um den Status des Services und der Replikate zu überprüfen, benutze:
docker service ls
Dieser Befehl zeigt dir die laufenden Dienste und ihre Replikate an.
- Um detaillierte Informationen über die Replikate eines bestimmten Services zu sehen, benutze:
docker service ps my_nginx
Schritt 3: Skalierung des Services
Eine der Hauptstärken von Docker Swarm ist die einfache Skalierung von Services. Wenn deine Anwendung mehr Rechenleistung benötigt oder du die Last auf weitere Maschinen verteilen möchtest, kannst du die Anzahl der Replikate mit einem einzigen Befehl erhöhen oder verringern.
- Um den NGINX-Service auf 5 Replikate zu skalieren, verwende:
docker service scale my_nginx=5
Überprüfe den neuen Status:
docker service ls
Swarm wird automatisch dafür sorgen, dass der Dienst auf 5 Maschinen oder Container verteilt wird, je nach Verfügbarkeit der Ressourcen.
Schritt 4: Automatische Wiederherstellung und Hochverfügbarkeit
Docker Swarm bietet eingebaute Mechanismen zur Wiederherstellung von Diensten im Falle von Fehlern. Wenn ein Knoten im Cluster ausfällt, sorgt Swarm dafür, dass die betroffenen Container auf anderen verfügbaren Knoten neu gestartet werden.
- Um dies zu testen, kannst du einen Worker-Knoten herunterfahren oder stoppen. Der Befehl zum Beenden eines Docker-Dienstes auf einem Knoten lautet:
sudo systemctl stop docker
Überprüfe dann den Status des Swarm Clusters mit:
docker node ls
Du wirst sehen, dass Docker Swarm automatisch erkennt, dass der Knoten ausgefallen ist, und die entsprechenden Container auf anderen Knoten neu startet.
Schritt 5: Netzwerke im Docker Swarm
Docker Swarm bietet eine einfache Möglichkeit, verteilte Anwendungen in einem gemeinsamen Netzwerk zu verbinden. Services, die in einem Swarm-Cluster laufen, kommunizieren über Overlays-Netzwerke miteinander, die Swarm automatisch einrichtet.
- Um ein benutzerdefiniertes Overlay-Netzwerk zu erstellen, benutze:
docker network create --driver overlay my_overlay_network
Wenn du einen Service erstellst, kannst du diesen dem Overlay-Netzwerk hinzufügen:
docker service create --name my_service --network my_overlay_network nginx
Durch das Hinzufügen von Services zu einem gemeinsamen Netzwerk können Container auf verschiedenen Knoten im Cluster miteinander kommunizieren, als wären sie auf dem gleichen Host.
Schritt 6: Dienste entfernen
Wenn du einen Service nicht mehr benötigst, kannst du ihn mit folgendem Befehl entfernen:
docker service rm my_nginx
Dadurch wird der Service gestoppt und alle zugehörigen Container auf den Knoten werden entfernt.
Fazit
Docker Swarm Mode bietet eine einfache und dennoch robuste Möglichkeit, Container auf mehreren Maschinen zu orchestrieren. Mit integrierten Funktionen wie automatischer Skalierung, Wiederherstellung und Netzwerkverwaltung eignet sich Docker Swarm ideal für das Management verteilter Anwendungen, ohne dass eine komplexe externe Orchestrierungsplattform benötigt wird.
Obwohl Docker Swarm nicht so umfangreich wie Kubernetes ist, punktet es durch seine einfache Einrichtung, Benutzerfreundlichkeit und direkte Integration in Docker. Es ist eine hervorragende Wahl für kleinere bis mittelgroße Anwendungen, die eine einfache Verwaltung und Skalierbarkeit erfordern.
Teste Docker Swarm in deinem nächsten Projekt und erlebe, wie einfach es sein kann, Container auf mehreren Maschinen zu betreiben!