Docker Compose für Multi-Container-Anwendungen konfigurieren

DockerDockerBeginner
Jetzt üben

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

Einführung

Docker Compose ist ein unverzichtbares Werkzeug für Entwickler und DevOps-Experten, die die Containerverwaltung und die Anwendungsbereitstellung optimieren möchten. Dieses umfassende Tutorial bietet eine schrittweise Anleitung zum Verständnis und zur Implementierung von Docker Compose, von der grundlegenden Konfiguration bis hin zu fortgeschrittenen Bereitstellungstechniken in verschiedenen Umgebungen.

Docker Compose Grundlagen

Einführung in Docker Compose

Docker Compose ist ein leistungsstarkes Werkzeug zur Definition und Ausführung von Multi-Container-Docker-Anwendungen. Es ermöglicht Entwicklern, eine YAML-Datei zur Konfiguration von Anwendungsservices, Netzwerken und Volumes zu verwenden, wodurch der Prozess der Container-Orchestrierung vereinfacht wird.

Kernkonzepte

graph TD A[Docker Compose] --> B[Service Definition] A --> C[Multi-Container-Management] A --> D[Umgebungskonfiguration]
Schlüsselkonzept Beschreibung
Service Einzelne Container in der Anwendung
docker-compose.yml Konfigurationsdatei, die Services definiert
Volumes Dauerhafte Datenspeicherung für Container
Netzwerke Inter-Container-Kommunikation

Beispielkonfiguration für Docker Compose

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./website:/usr/share/nginx/html
  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: mysecretpassword

Praktisches Beispiel unter Ubuntu 22.04

Docker Compose installieren:

sudo apt update
sudo apt install docker-compose-plugin
docker compose version

Eine Multi-Container-Anwendung ausführen:

docker compose up -d
docker compose ps
docker compose down

Anwendungsfälle

Docker Compose eignet sich ideal für:

  • Lokale Entwicklungsumgebungen
  • Automatisierte Testumgebungen
  • Bereitstellungen von Anwendungen auf einem einzelnen Host
  • Microservices-Architektur

Konfiguration und Bereitstellung

Struktur der Docker Compose-Datei

graph TD A[docker-compose.yml] --> B[Version] A --> C[Services] A --> D[Netzwerke] A --> E[Volumes]

Umfassendes Konfigurationsbeispiel

version: "3.8"
services:
  web:
    image: python:3.9
    build:
      context: ./app
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    volumes:
      - ./app:/app
    environment:
      - DEBUG=true
    depends_on:
      - database

  database:
    image: postgres:13
    environment:
      POSTGRES_DB: myapp
      POSTGRES_PASSWORD: secretpassword
    volumes:
      - postgres_data:/var/lib/postgresql/data

networks:
  default:
    driver: bridge

volumes:
  postgres_data:

Verwaltung der Umgebungskonfiguration

Konfigurationstyp Beschreibung Verwendung
Umgebungsvariablen Laufzeitkonfiguration Sensible Daten, Verbindungsstrings
.env-Dateien Externe Umgebungskonfiguration Trennung der Konfiguration vom Code
Docker Secrets Sichere Speicherung sensibler Daten Passwörter, Token

Bereitstellungsbefehle unter Ubuntu 22.04

Konfiguration prüfen:

docker compose config

Dienste starten:

docker compose up -d

Dienste skalieren:

docker compose up -d --scale web=3

Dienste überwachen:

docker compose ps
docker compose logs

Containernetzwerkstrategien

graph LR A[Containernetzwerk] --> B[Bridge-Netzwerk] A --> C[Host-Netzwerk] A --> D[Overlay-Netzwerk]

Techniken zur Volumenverwaltung

## Benannte Volumes erstellen
docker volume create myvolume

## Volumes auflisten
docker volume ls

## Volumendetails anzeigen
docker volume inspect myvolume

Erweiterte Compose-Techniken

Skalierung von Diensten und Lastverteilung

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

Skalierungs-Konfiguration

version: "3.8"
services:
  web:
    image: nginx:latest
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
    ports:
      - "80:80"

Dynamische Dienstverwaltung

Technik Befehl Beschreibung
Skalierung von Diensten docker compose up --scale web=5 Dynamische Anpassung der Containeranzahl
Rollende Updates docker compose up --force-recreate Aktualisierung von Diensten mit minimaler Ausfallzeit
Selektive Bereitstellung docker compose up service1 service2 Bereitstellung spezifischer Dienste

Produktionsreife Bereitstellungsstrategien

## Konfiguration prüfen
docker compose config

## Trockenlauf-Bereitstellung
docker compose up --dry-run

## Produktionsbereitstellung
docker compose up -d --remove-orphans

Container-Gesundheitsüberprüfungen

services:
  web:
    image: myapp:latest
    healthcheck:
      test: ["CMD", "curl", "-f", "
      interval: 30s
      timeout: 10s
      retries: 3

Erweiterte Netzwerkfunktionen

graph LR A[Benutzerdefiniertes Netzwerk] --> B[Interne Kommunikation] A --> C[Externer Zugriff] A --> D[Dienstfindung]

Überwachung und Protokollierung

## Echtzeit-Dienstprotokolle
docker compose logs -f

## Ressourcenüberwachung
docker compose top

## Leistungsmetriken
docker stats

Konfiguration für mehrere Umgebungen

version: "3.8"
services:
  web:
    image: myapp:${ENV:-development}
    environment:
      - DATABASE_URL=${DATABASE_URL}

Geheimhaltungsverwaltung

## Docker-Secrets erstellen
echo "database_password" | docker secret create db_password -

## Verwendung von Secrets in der Compose-Datei
services:
database:
secrets:
- db_password

Zusammenfassung

Durch die Beherrschung von Docker Compose können Entwickler komplexe Anwendungsarchitekturen vereinfachen, die Bereitstellung konsistenter gestalten und skalierbarere sowie wartbarere containerisierte Lösungen erstellen. Das Tutorial zeigt, wie YAML-Konfigurationen genutzt, Dienste, Netzwerke und Volumes verwaltet und multi-containerisierte Anwendungen effizient und einfach orchestriert werden können.