Docker Compose – Einsteiger-Leitfaden zur Installation und Verwendung

DockerDockerBeginner
Jetzt üben

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

Einführung

Dieser Einsteigerleitfaden führt Sie durch die Installation von Docker und Docker Compose und zeigt Ihnen, wie Sie Compose verwenden, um Ihre Anwendungen zu definieren, bereitzustellen und zu verwalten. Sie lernen die wichtigsten Funktionen und Konfigurationsoptionen von Docker Compose kennen sowie Best Practices für die Skalierung und Lastverteilung Ihrer Compose-Anwendungen.

Was ist Docker Compose?

Docker Compose ist ein Werkzeug, mit dem Sie multi-container Docker-Anwendungen definieren und ausführen können. Es vereinfacht den Prozess der Verwaltung und Orchestrierung mehrerer Docker-Container, indem es eine deklarative Möglichkeit bietet, die Services, Netzwerke und Volumes der Anwendung zu definieren.

Mit Docker Compose können Sie:

Die Services Ihrer Anwendung definieren

Sie können die verschiedenen Services, aus denen Ihre Anwendung besteht, wie z. B. einen Webserver, eine Datenbank und eine Message Queue, in einer einzigen YAML-Datei definieren. Diese Datei, die als "Compose-Datei" bezeichnet wird, beschreibt die Konfiguration für jeden Service, einschließlich des zu verwendenden Docker-Images, der zu exportierenden Netzwerkports und aller Umgebungsvariablen oder zu mountenden Volumes.

Den Lebenszyklus Ihrer Anwendung verwalten

Docker Compose bietet Befehle zum Starten, Stoppen und Verwalten des gesamten Lebenszyklus Ihrer Anwendung. Mit docker-compose up können Sie alle in Ihrer Compose-Datei definierten Services erstellen und starten, und mit docker-compose down können Sie sie stoppen und entfernen.

Entwicklung und Tests vereinfachen

Docker Compose ist besonders nützlich während der Entwicklung und Testphase Ihrer Anwendung. Es ermöglicht Ihnen, einfach eine vollständige Entwicklungsumgebung mit allen notwendigen Services hochzufahren, wodurch das Testen Ihrer Anwendung auf konsistente und reproduzierbare Weise vereinfacht wird.

graph TD A[Entwickler] --> B[Docker Compose] B --> C[Webserver] B --> D[Datenbank] B --> E[Message Queue]

Durch die Verwendung von Docker Compose können Sie sicherstellen, dass Ihre Anwendung in verschiedenen Umgebungen, von der Entwicklung bis zur Produktion, gleich funktioniert, wodurch das Risiko umgebungsspezifischer Probleme reduziert wird.

Service Image Ports Umgebungsvariablen
Webserver nginx:latest 80:80 -
Datenbank mysql:5.7 3306:3306 MYSQL_ROOT_PASSWORD=password
Message Queue rabbitmq:3-management 5672:5672, 15672:15672 -

Zusammenfassend lässt sich sagen, dass Docker Compose ein leistungsstarkes Werkzeug ist, das die Verwaltung und Bereitstellung von multi-container Docker-Anwendungen vereinfacht und die Entwicklung, das Testen und den Betrieb komplexer Anwendungen auf konsistente und reproduzierbare Weise erleichtert.

Installation von Docker und Docker Compose

Bevor Sie Docker Compose verwenden können, müssen Docker und Docker Compose auf Ihrem System installiert sein. In diesem Abschnitt führen wir Sie durch den Installationsvorgang auf einem Ubuntu 22.04 System.

Installation von Docker

  1. Aktualisieren Sie das Paketindex:
sudo apt-get update
  1. Installieren Sie die notwendigen Pakete, damit APT einen Repository über HTTPS verwenden kann:
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  1. Fügen Sie den offiziellen Docker GPG-Schlüssel hinzu:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. Richten Sie das Docker Repository ein:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Installieren Sie Docker Engine:
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. Überprüfen Sie die Installation, indem Sie den folgenden Befehl ausführen:
sudo docker run hello-world

Installation von Docker Compose

Docker Compose wird im Rahmen der Docker Engine-Installation auf Ubuntu 22.04 installiert. Wenn Sie jedoch eine bestimmte Version von Docker Compose installieren müssen, können Sie diese Schritte ausführen:

  1. Laden Sie die neueste Version von Docker Compose herunter:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. Erteilen Sie dem Docker Compose-Binary die Ausführungsrechte:
sudo chmod +x /usr/local/bin/docker-compose
  1. Überprüfen Sie die Installation, indem Sie den folgenden Befehl ausführen:
docker-compose --version

Nachdem Docker und Docker Compose installiert sind, können Sie beginnen, Ihre Multi-Container-Anwendungen mit Docker Compose zu definieren und bereitzustellen.

Definition von Services in einer Compose-Datei

Das Herzstück einer Docker Compose-Anwendung ist die Compose-Datei, die im YAML-Format geschrieben ist. In dieser Datei definieren Sie die verschiedenen Services, aus denen Ihre Anwendung besteht, zusammen mit ihren Konfigurationen.

Service-Definition

Jeder Service in Ihrer Compose-Datei wird als oberster Schlüssel definiert, z. B. web, db oder redis. Unter jedem Service können Sie verschiedene Konfigurationsoptionen angeben, wie z. B. das zu verwendende Docker-Image, die zu exportierenden Netzwerkports, Umgebungsvariablen und mehr.

Hier ist ein Beispiel für eine einfache Compose-Datei mit drei Services:

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./app:/usr/share/nginx/html

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - db-data:/var/lib/mysql

  redis:
    image: redis:latest
    ports:
      - 6379:6379

volumes:
  db-data:

In diesem Beispiel haben wir drei Services:

  1. web: Führt die neueste Version des Nginx-Webservers aus, ordnet Port 80 des Hosts dem Port 80 im Container zu und mountt den Ordner ./app des Hosts auf den Ordner /usr/share/nginx/html im Container.

  2. db: Führt die MySQL 5.7-Datenbank aus, setzt die Umgebungsvariable MYSQL_ROOT_PASSWORD auf password und mountt ein benanntes Volume db-data, um die Datenbankdaten zu speichern.

  3. redis: Führt die neueste Version des Redis-In-Memory-Datenbankspeichers aus und ordnet Port 6379 des Hosts dem Port 6379 im Container zu.

Volumes und Netzwerke

Zusätzlich zur Definition der Services ermöglicht die Compose-Datei auch die Definition von gemeinsam genutzten Volumes und Netzwerken, die von den Services verwendet werden können.

Im obigen Beispiel haben wir ein benanntes Volume db-data definiert, um die MySQL-Datenbankdaten zu speichern. Dieses Volume kann zwischen mehreren Services geteilt werden, um sicherzustellen, dass die Daten bestehen bleiben, auch wenn die Container gestoppt oder neu erstellt werden.

Sie können auch benutzerdefinierte Netzwerke definieren, um die Konnektivität zwischen Ihren Services zu steuern. Dies ist nützlich, wenn Sie bestimmte Services isolieren oder eine komplexere Netzwerktopologie erstellen möchten.

Mit einer Compose-Datei können Sie die verschiedenen Komponenten Ihrer Anwendung einfach definieren und verwalten, wodurch die Bereitstellung, Skalierung und Wartung Ihrer Multi-Container-Docker-Anwendungen vereinfacht wird.

Bereitstellung und Verwaltung von Compose-Anwendungen

Sobald Sie Ihre Services in einer Compose-Datei definiert haben, können Sie Docker Compose-Befehle verwenden, um Ihre Anwendung bereitzustellen und zu verwalten.

Bereitstellung der Anwendung

Um Ihre Anwendung bereitzustellen, navigieren Sie zum Verzeichnis, das Ihre Compose-Datei enthält, und führen Sie den folgenden Befehl aus:

docker-compose up -d

Der Flag -d führt die Container im detachierten Modus aus, d. h. sie werden im Hintergrund ausgeführt.

Docker Compose liest die Compose-Datei, erstellt das notwendige Docker-Netzwerk und die Volumes und startet alle definierten Services.

Verwaltung des Anwendungslebenszyklus

Nach der Bereitstellung Ihrer Anwendung können Sie die folgenden Docker Compose-Befehle verwenden, um ihren Lebenszyklus zu verwalten:

  • docker-compose stop: Stoppt alle laufenden Services.
  • docker-compose start: Startet die gestoppten Services.
  • docker-compose restart: Startet alle laufenden Services neu.
  • docker-compose down: Stoppt und entfernt alle Services, Netzwerke und Volumes.

Um die Anwendung beispielsweise zu stoppen, können Sie Folgendes ausführen:

docker-compose stop

Und um sie erneut zu starten, können Sie Folgendes ausführen:

docker-compose start

Skalierung von Services

Docker Compose ermöglicht es Ihnen, Ihre Services einfach hoch- oder herunterzuskalieren. Um einen bestimmten Service zu skalieren, können Sie den Befehl scale verwenden:

docker-compose scale web=3 db=2

Dies skaliert den Service web auf 3 Instanzen und den Service db auf 2 Instanzen.

Sie können auch den Befehl up mit dem Flag --scale verwenden, um Services beim Bereitstellen der Anwendung zu skalieren:

docker-compose up --scale web=3 --scale db=2 -d

Anzeigen der Logs

Um die Logs Ihrer Anwendung anzuzeigen, können Sie den Befehl logs verwenden:

docker-compose logs

Dies zeigt die Logs aller Services an. Sie können auch die Logs eines bestimmten Services anzeigen, indem Sie den Service-Namen angeben:

docker-compose logs web

Mit diesen Docker Compose-Befehlen können Sie Ihre Multi-Container-Anwendungen einfach bereitstellen, verwalten und skalieren, wodurch die Entwicklung, der Test und der Betrieb komplexer Anwendungen auf konsistente und reproduzierbare Weise vereinfacht werden.

Erweiterte Compose-Funktionen und Konfiguration

Während die grundlegende Compose-Dateistruktur und -Befehle leistungsstark sind, bietet Docker Compose auch eine Reihe erweiterter Funktionen und Konfigurationsoptionen, um komplexere und robustere Anwendungen zu erstellen.

Umgebungsvariablen und Geheimnisse

Sie können Umgebungsvariablen verwenden, um Konfigurationseinstellungen an Ihre Services zu übergeben. Docker Compose unterstützt sowohl Umgebungsvariablen zur Buildzeit als auch zur Laufzeit, die auf Service- oder globaler Ebene definiert werden können.

Zusätzlich können Sie Docker Secrets verwenden, um vertrauliche Informationen wie Datenbankpasswörter oder API-Schlüssel sicher zu speichern und Ihren Services zugänglich zu machen.

version: "3"
services:
  web:
    image: myapp/web
    environment:
      - DATABASE_URL=mysql://root:${DB_PASSWORD}@db/myapp
    secrets:
      - db-password

secrets:
  db-password:
    file: ./db-password.txt

Abhängigkeitsverwaltung und Health Checks

Docker Compose ermöglicht es Ihnen, Service-Abhängigkeiten zu definieren, um sicherzustellen, dass Services in der richtigen Reihenfolge gestartet werden und dass abhängige Services gesund sind, bevor andere Services gestartet werden.

Sie können auch Health Checks für Ihre Services konfigurieren, die Compose ermöglichen, den Zustand Ihrer Container zu überwachen und entsprechende Aktionen auszuführen, z. B. das Neustarten ungesunder Container.

version: "3"
services:
  web:
    image: myapp/web
    depends_on:
      db:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 5

  db:
    image: mysql:5.7
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 30s
      timeout: 10s
      retries: 5

Netzwerk und Service-Entdeckung

Docker Compose erstellt automatisch ein Standardnetzwerk für Ihre Anwendung, aber Sie können auch benutzerdefinierte Netzwerke definieren und die Netzwerkkonfiguration für Ihre Services steuern.

Zusätzlich bietet Compose eine integrierte Service-Entdeckung, die es Ihren Services ermöglicht, sich mithilfe der in der Compose-Datei definierten Service-Namen zu finden und miteinander zu kommunizieren.

version: "3"
services:
  web:
    image: myapp/web
    networks:
      - frontend
    environment:
      - DB_HOST=db

  db:
    image: mysql:5.7
    networks:
      - backend

networks:
  frontend:
  backend:

Durch die Nutzung dieser erweiterten Funktionen können Sie komplexere, robustere und skalierbare Docker Compose-Anwendungen erstellen, die den Anforderungen Ihres Unternehmens entsprechen.

Skalierung und Lastverteilung mit Compose

Ein wesentlicher Vorteil der Verwendung von Docker Compose ist die einfache Skalierung Ihrer Services und die Implementierung der Lastverteilung. In diesem Abschnitt werden wir untersuchen, wie diese Funktionen erreicht werden.

Skalierung von Services

Wie bereits erwähnt, können Sie Ihre Services mit dem Befehl scale hoch- oder herunter skalieren. Dies ist besonders nützlich, wenn Sie erhöhten Traffic oder Ressourcenanforderungen gerecht werden müssen.

Nehmen wir beispielsweise an, Sie haben einen Web-Service in Ihrer Compose-Datei definiert:

version: "3"
services:
  web:
    image: myapp/web
    ports:
      - 80:80

Um den Service web auf 3 Instanzen zu skalieren, können Sie den folgenden Befehl ausführen:

docker-compose scale web=3

Dies erstellt zwei zusätzliche Instanzen des Services web, sodass Sie die Last auf mehrere Container verteilen können.

Lastverteilung

Docker Compose bietet auch integrierte Lastverteilungsfunktionen. Wenn Sie mehrere Instanzen eines Services definieren, verteilt Compose die eingehenden Anfragen automatisch auf die verfügbaren Container.

version: "3"
services:
  web:
    image: myapp/web
    ports:
      - 80:80
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure

In diesem Beispiel haben wir den Service web mit 3 Replikaten definiert. Wenn Sie docker-compose up ausführen, erstellt Compose drei Instanzen des Services web und verteilt die eingehenden Anfragen auf diese.

Sie können auch zusätzliche Lastverteilungsoptionen konfigurieren, z. B. die Neustartrichtlinie, um sicherzustellen, dass Ihre Anwendung hochverfügbar bleibt.

graph TD A[Client] --> B[Load Balancer] B --> C[Web Service 1] B --> D[Web Service 2] B --> E[Web Service 3]

Durch die Nutzung der Skalierungs- und Lastverteilungsfunktionen von Docker Compose können Sie hochskalierbare und robuste Anwendungen erstellen, die erhöhten Traffic- und Ressourcenanforderungen gerecht werden können.

Fehlerbehebung und Best Practices

Wie bei jeder Technologie können auch bei der Arbeit mit Docker Compose Probleme oder Herausforderungen auftreten. In diesem Abschnitt behandeln wir einige gängige Schritte zur Fehlerbehebung und Best Practices, um Ihre Compose-basierten Anwendungen effektiv zu verwalten.

Fehlerbehebung

  1. Protokollprüfung: Wenn Probleme mit Ihrer Compose-Anwendung auftreten, ist der erste Schritt die Überprüfung der Protokolle mithilfe des Befehls docker-compose logs. Dies hilft Ihnen, Fehler oder Probleme mit Ihren Services zu identifizieren.

  2. Containerprüfung: Sie können den Befehl docker-compose ps verwenden, um die laufenden Container und ihren Status aufzulisten. Dies kann Ihnen helfen, Container zu identifizieren, die nicht wie erwartet funktionieren.

  3. Service-Debugging: Wenn ein bestimmter Service sich nicht wie erwartet verhält, können Sie den Befehl docker-compose exec verwenden, um auf den Container zuzugreifen und das Problem zu beheben. Beispielsweise gibt docker-compose exec web bash Ihnen eine Shell innerhalb des Containers des Services web.

  4. Konfigurationsüberprüfung: Überprüfen Sie Ihre Compose-Datei sorgfältig, um sicherzustellen, dass die Service-Definitionen, Netzwerkkonfigurationen und Volume-Einstellungen korrekt sind. Sie können den Befehl docker-compose config verwenden, um die Syntax und Struktur Ihrer Compose-Datei zu validieren.

Best Practices

  1. Verwendung von Umgebungsvariablen: Nutzen Sie Umgebungsvariablen, um Konfigurationseinstellungen wie Datenbankanmeldeinformationen oder API-Schlüssel zu speichern. Dies erleichtert die Verwaltung sensibler Informationen und die Anpassung Ihrer Anwendung an verschiedene Umgebungen.

  2. Trennung der Verantwortlichkeiten: Betrachten Sie die Trennung Ihrer Anwendung in kleinere, besser zu verwaltende Services. Dies erleichtert die Skalierung, Wartung und das Testen einzelner Komponenten Ihrer Anwendung.

  3. Implementierung von Health Checks: Konfigurieren Sie Health Checks für Ihre Services, um sicherzustellen, dass die Container korrekt funktionieren. Dies hilft Compose, den Zustand Ihrer Anwendung zu überwachen und entsprechende Maßnahmen zu ergreifen, z. B. das Neustarten fehlerhafter Container.

  4. Versionierung Ihrer Compose-Datei: Speichern Sie Ihre Compose-Datei in einem Versionskontrollsystem wie Git. Dies hilft Ihnen, Änderungen zu verfolgen, mit Teammitgliedern zusammenzuarbeiten und konsistente Bereitstellungen in verschiedenen Umgebungen sicherzustellen.

  5. Klugere Verwendung von Netzwerken: Nutzen Sie benutzerdefinierte Netzwerke, um die Konnektivität zwischen Ihren Services zu isolieren und zu steuern. Dies kann die Sicherheit und Leistung Ihrer Anwendung verbessern.

  6. Nutzung von LabEx: Erwägen Sie die Verwendung von LabEx, einer leistungsstarken Plattform, die zusätzliche Funktionen und Tools bietet, um Ihr Docker Compose-Erlebnis zu verbessern. LabEx kann Ihnen helfen, die Bereitstellung, Überwachung und Verwaltung Ihrer Compose-basierten Anwendungen zu optimieren.

Indem Sie diese Schritte zur Fehlerbehebung und Best Practices befolgen, können Sie Ihre Docker Compose-Anwendungen effektiv verwalten und warten und sicherstellen, dass sie in verschiedenen Umgebungen reibungslos und zuverlässig funktionieren.

Zusammenfassung

Am Ende dieses Tutorials verfügen Sie über ein fundiertes Verständnis der Installation und Verwendung von Docker Compose, um die Bereitstellung und Verwaltung Ihrer Anwendung zu optimieren. Sie werden in der Lage sein, Ihre Services zu definieren, Ihre Compose-Anwendungen bereitzustellen und zu verwalten sowie auftretende Probleme zu beheben. Ob Sie Docker-Neuling sind oder Ihre Compose-Kenntnisse verbessern möchten, dieser Leitfaden bietet Ihnen das Wissen und die Tools, die Sie benötigen, um mit Docker Compose zu beginnen.