8.1 Der Befehl docker compose scale
Die Skalierung von Services ist der Prozess der Erhöhung oder Verringerung der Anzahl von Container-Instanzen, die denselben Service ausführen, um die Last zu verwalten und die Fehlertoleranz der Anwendung sicherzustellen. In Docker Compose wird zur Skalierung von Services der Befehl docker compose scale
(in älteren Versionen) oder der Parameter --scale
in neueren Versionen verwendet.
Wichtige Konzepte der Skalierung:
- Skalierbarkeit: Die Möglichkeit, die Anzahl der Service-Instanzen je nach aktueller Last einfach zu erhöhen oder zu verringern.
- Fehlertoleranz: Das Ausführen mehrerer Instanzen eines Services stellt Fehlertoleranz sicher, da der Ausfall einer Instanz nicht zum Stillstand des gesamten Services führt.
- Lastverteilung: Die Verteilung der Last auf mehrere Instanzen des Services zur Optimierung der Leistung.
Verwendung des Befehls docker compose scale
Syntax des Befehls:
docker compose scale SERVICE=NUM
Wo:
- SERVICE: der Name des Services, der skaliert werden soll.
- NUM: die Anzahl an Instanzen, die gestartet werden sollen.
Beispiel für die Verwendung:
Angenommen, du hast eine Datei compose.yaml
mit der Definition des Services web.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
Um 3 Instanzen des Services web zu starten, benutze den Befehl:
docker compose scale web=3
Hinweis: Bevor du den Befehl docker compose scale
ausführst, stelle sicher, dass die Services mit dem Befehl docker compose up
gestartet wurden.
Verwendung des Parameters --scale
in neueren Versionen
In neueren Versionen von Docker Compose wurde der Befehl docker compose scale
durch den Parameter --scale
ersetzt, der zusammen mit dem Befehl up
verwendet wird.
docker compose up --scale web=3
Dieser Ansatz ist vorzuziehen, da er das gleichzeitige Starten und Skalieren von Services ermöglicht.
8.2 Praktische Beispiele
Beispiel 1: Skalierung eines Webservers
Erstelle eine Datei compose.yaml
:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80-90:80"
Starte und skaliere den Service auf 3 Instanzen:
docker compose up --scale web=3
Jetzt hast du 3 Instanzen des Nginx-Webservers, die auf Ports im Bereich 80-90 laufen.
Wichtig!
Wenn der Service für die Skalierung auf mehrere Instanzen ausgelegt ist, musst du einen Portbereich angeben, zum Beispiel: "80-90:80"
. Dies "reserviert" auf der Hostmaschine einen Bereich von 10 Ports. Bei der Hinzufügung einer Service-Replik wird ihr ein Port aus dem Bereich zugewiesen. Wenn du das nicht machst, werden die Ports zufällig ausgewählt und die Repliken werden unzugänglich.
Beispiel 2: Skalierung mit einer Datenbank
Erstelle eine Datei compose.yaml
:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80-90:80"
depends_on:
- db
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
Starte und skaliere den web
-Service auf 4 Instanzen:
docker compose up --scale web=4
Jetzt hast du 4 Instanzen des Nginx-Webservers, die mit einer einzigen PostgreSQL-Datenbank arbeiten.
8.3 Verwaltung skalierbarer Services
Nach der Skalierung von Services kannst du die Docker Compose-Befehle verwenden, um die Instanzen zu verwalten.
Anzeigen von laufenden Containern
Verwende den Befehl docker compose ps
, um alle laufenden Container anzuzeigen:
docker compose ps
Stoppen und Entfernen von skalierbaren Services
Um alle Instanzen eines Services zu stoppen und zu entfernen, verwende den Befehl docker compose down
:
docker compose down
Tipps und Tricks:
- Load Balancing: Verwende Load Balancer, um den Traffic auf mehrere Service-Instanzen zu verteilen. Zum Beispiel kannst du Nginx oder HAProxy dafür nutzen.
- Datenspeicherung: Stelle sicher, dass die von skalierbaren Services erstellten Daten in Volumes oder externen Speicherlösungen gespeichert werden, um Datenverlust bei Stoppen oder Entfernen von Containern zu vermeiden.
- Monitoring: Verwende Monitoring-Tools wie Prometheus oder Grafana, um die Performance und den Zustand deiner skalierbaren Services zu überwachen.
- Automatische Skalierung: Überlege dir, automatische Skalierung abhängig von der Last mit Orchestratoren wie Kubernetes oder Docker Swarm einzusetzen.
GO TO FULL VERSION