CodeGym /Kurse /Docker SELF /Skalierung von Services

Skalierung von Services

Docker SELF
Level 16 , Lektion 2
Verfügbar

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:

  1. Skalierbarkeit: Die Möglichkeit, die Anzahl der Service-Instanzen je nach aktueller Last einfach zu erhöhen oder zu verringern.
  2. Fehlertoleranz: Das Ausführen mehrerer Instanzen eines Services stellt Fehlertoleranz sicher, da der Ausfall einer Instanz nicht zum Stillstand des gesamten Services führt.
  3. 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.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Um 3 Instanzen des Services web zu starten, benutze den Befehl:

Terminal

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.

Terminal

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:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80-90:80"

Starte und skaliere den Service auf 3 Instanzen:

Terminal

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:

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:

Terminal

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:

Terminal

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:

Terminal

docker compose down

Tipps und Tricks:

  1. Load Balancing: Verwende Load Balancer, um den Traffic auf mehrere Service-Instanzen zu verteilen. Zum Beispiel kannst du Nginx oder HAProxy dafür nutzen.
  2. 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.
  3. Monitoring: Verwende Monitoring-Tools wie Prometheus oder Grafana, um die Performance und den Zustand deiner skalierbaren Services zu überwachen.
  4. Automatische Skalierung: Überlege dir, automatische Skalierung abhängig von der Last mit Orchestratoren wie Kubernetes oder Docker Swarm einzusetzen.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION