Mehrere Dienste als Docker Swarm Stack bereitstellen

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Tutorial untersuchen wir den Prozess der Bereitstellung einer Multi-Service-Anwendung mithilfe von Docker Swarm, einer robusten Container-Orchestrierungsplattform. Sie lernen, wie Sie Docker Compose verwenden, um die Services Ihrer Anwendung zu definieren, und diese dann nahtlos als Docker Swarm-Stack bereitzustellen, um Skalierbarkeit und hohe Verfügbarkeit zu gewährleisten.

Docker Swarm verstehen

Docker Swarm ist eine native Clustering- und Orchestrierungslösung für Docker-Container. Sie ermöglicht es Ihnen, eine Gruppe von Docker-Hosts zu verwalten und Anwendungen über diese hinweg bereitzustellen, wodurch hohe Verfügbarkeit und Skalierbarkeit erreicht werden.

Was ist Docker Swarm?

Docker Swarm ist eine integrierte Funktion von Docker, die es Ihnen ermöglicht, einen Cluster von Docker-Hosts, einen sogenannten Swarm, zu erstellen und zu verwalten. In einem Swarm arbeiten mehrere Docker-Hosts (Nodes) zusammen als ein einziger, virtueller Docker-Host. Dadurch können Sie Ihre Anwendungen und Services über den Swarm hinweg bereitstellen, und Docker übernimmt die Lastverteilung, Skalierung und den Failover für Sie.

Schlüsselkonzepte in Docker Swarm

  • Swarm: Ein Cluster von Docker-Hosts, die konfiguriert wurden, um zusammenzuarbeiten.
  • Node: Ein einzelner Docker-Host, der Teil des Swarms ist.
  • Service: Eine deklarative Methode, um zu definieren, wie Ihre Anwendung oder Ihr Service über den Swarm hinweg bereitgestellt und skaliert werden soll.
  • Task: Eine einzelne Instanz eines Containers, der als Teil eines Services ausgeführt wird.
  • Overlay-Netzwerk: Ein virtuelles Netzwerk, das alle Knoten in einem Swarm verbindet und es Containern ermöglicht, miteinander zu kommunizieren.

Vorteile von Docker Swarm

  • Hohe Verfügbarkeit: Docker Swarm verwaltet automatisch die Gesundheit und Verfügbarkeit Ihrer Services, startet fehlgeschlagene Tasks neu und verteilt sie über den Swarm neu.
  • Skalierbarkeit: Sie können Ihre Services einfach hoch- oder herunter skalieren, indem Sie die Anzahl der Replikate anpassen.
  • Lastverteilung: Docker Swarm bietet eine integrierte Lastverteilung, die eingehende Anfragen auf die Tasks Ihres Services verteilt.
  • Einfachheit: Docker Swarm ist eine native Funktion von Docker, was die Einrichtung und Verwaltung Ihrer containerisierten Anwendungen vereinfacht.
graph TD A[Docker Host] --> B[Docker Host] B[Docker Host] --> C[Docker Host] C[Docker Host] --> A[Docker Host] A[Docker Host] -- Swarm --> B[Docker Host] B[Docker Host] -- Swarm --> C[Docker Host] C[Docker Host] -- Swarm --> A[Docker Host]

Bereitstellung einer Multi-Service-Anwendung mit Docker Compose

Docker Compose ist ein Werkzeug, mit dem Sie Multi-Container-Anwendungen definieren und ausführen können. Es ist besonders nützlich, wenn Sie eine komplexe Anwendung bereitstellen müssen, die aus mehreren Services besteht, von denen jeder seine eigenen Anforderungen hat.

Erstellen einer Docker Compose-Datei

Um eine Multi-Service-Anwendung mit Docker Compose bereitzustellen, müssen Sie eine Datei docker-compose.yml erstellen, die die Services, ihre Konfigurationen und die Verbindung zwischen ihnen definiert. Hier ist ein Beispiel:

version: "3"
services:
  web:
    image: labex/web-app:v1
    ports:
      - "80:8080"
    depends_on:
      - db
  db:
    image: labex/database:v1
    volumes:
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:

In diesem Beispiel haben wir zwei Services: web und db. Der web-Service verwendet das Image labex/web-app:v1 und exponiert den Port 8080 auf dem Host-Port 80. Er ist auch vom db-Service abhängig. Der db-Service verwendet das Image labex/database:v1 und mount einen Volume für die Datenbankdaten.

Bereitstellen der Anwendung

Um die Anwendung bereitzustellen, können Sie die folgenden Befehle verwenden:

## Die Images erstellen (falls nötig)
docker-compose build

## Die Anwendung bereitstellen
docker-compose up -d

Der Befehl docker-compose up -d startet alle Services im Hintergrund.

Skalieren der Anwendung

Ein Vorteil der Verwendung von Docker Compose ist die einfache Skalierung Ihrer Services. Um beispielsweise den web-Service auf 3 Replikate zu skalieren, können Sie Folgendes ausführen:

docker-compose scale web=3

Dies erstellt zwei weitere Instanzen des web-Services, und Docker Compose verteilt den Traffic automatisch auf diese.

graph LR client[Client] --> load_balancer[Load Balancer] load_balancer --> web1[Web Service] load_balancer --> web2[Web Service] load_balancer --> web3[Web Service] web1 --> db[Database Service] web2 --> db web3 --> db

Verwalten und Skalieren des Docker Swarm Stacks

Nachdem Sie Ihre Multi-Service-Anwendung als Docker Swarm Stack bereitgestellt haben, können Sie verschiedene Befehle verwenden, um sie zu verwalten und zu skalieren.

Bereitstellen des Stacks

Um Ihre Anwendung als Docker Swarm Stack bereitzustellen, können Sie den Befehl docker stack deploy verwenden:

docker stack deploy -c docker-compose.yml my-app

Dies erstellt die Swarm-Services basierend auf den Konfigurationen in Ihrer docker-compose.yml-Datei.

Überwachen des Stacks

Sie können die folgenden Befehle verwenden, um den Status Ihres Swarm Stacks zu überwachen:

## Liste der laufenden Services
docker stack services my-app

## Liste der Tasks (Container-Instanzen) für einen Service
docker service ps my-app_web

## Anzeigen der Logs für einen Service
docker service logs my-app_web

Skalieren des Stacks

Um einen Service in Ihrem Swarm Stack zu skalieren, können Sie den Befehl docker service scale verwenden:

## Skalieren des "web"-Services auf 5 Replikate
docker service scale my-app_web=5

Dies erstellt 4 weitere Instanzen des web-Services, und Docker Swarm verteilt den Traffic automatisch auf diese.

graph LR client[Client] --> load_balancer[Load Balancer] load_balancer --> web1[Web Service] load_balancer --> web2[Web Service] load_balancer --> web3[Web Service] load_balancer --> web4[Web Service] load_balancer --> web5[Web Service] web1 --> db[Database Service] web2 --> db web3 --> db web4 --> db web5 --> db

Aktualisieren des Stacks

Um Ihren Swarm Stack mit einer neuen Version eines Services zu aktualisieren, können Sie den Befehl docker service update verwenden:

## Aktualisieren des "web"-Services auf ein neues Image
docker service update my-app_web --image labex/web-app:v2

Dies führt eine Roll-Update des web-Services durch, wobei die alten Container durch die neuen ersetzt werden, ohne den Service zu unterbrechen.

Mit diesen Befehlen können Sie Ihren Docker Swarm Stack effektiv verwalten und skalieren, um die hohe Verfügbarkeit und Leistung Ihrer Multi-Service-Anwendung sicherzustellen.

Zusammenfassung

Am Ende dieses Tutorials haben Sie ein fundiertes Verständnis von Docker Swarm und seiner Verwendung zur Bereitstellung und Verwaltung einer Multi-Service-Anwendung. Sie werden in der Lage sein, einen Docker Swarm Cluster einzurichten, die Services Ihrer Anwendung mithilfe von Docker Compose zu definieren und den gesamten Stack als ein skalierbares und robustes System bereitzustellen.