Einführung
Docker Compose ist ein unverzichtbares Werkzeug für Entwickler, die die Containerverwaltung und die Anwendungsbereitstellung optimieren möchten. Dieses umfassende Tutorial beleuchtet die Grundlagen von Docker Compose und bietet Einblicke in die Erstellung, Konfiguration und Verwaltung komplexer Multi-Container-Umgebungen über eine einzige, deklarative Konfigurationsdatei.
Docker Compose Grundlagen
Einführung in Docker Compose
Docker Compose ist ein leistungsstarkes Werkzeug zur Container-Orchestrierung, das Entwicklern ermöglicht, Multi-Container-Anwendungen über eine einzige Konfigurationsdatei zu definieren und zu verwalten. Es vereinfacht den Prozess der Ausführung komplexer Anwendungsarchitekturen, indem es Ihnen erlaubt, Services, Netzwerke und Volumes deklarativ zu beschreiben.
Kernkonzepte und Architektur
Docker Compose verwendet YAML-Dateien zur Konfiguration von Anwendungsservices und bietet einen optimierten Ansatz zur Konfiguration von Container-Services. Die primäre Konfigurationsdatei wird typischerweise docker-compose.yml genannt.
graph TD
A[Docker Compose] --> B[YAML-Konfiguration]
B --> C[Service-Definitionen]
B --> D[Netzwerkeinstellungen]
B --> E[Volume-Zuordnungen]
Struktur der Konfigurationsdatei
Eine typische Docker Compose-Konfiguration umfasst wichtige Elemente:
| Element | Beschreibung | Beispiel |
|---|---|---|
| version | Compose-Dateiversion | version: '3.8' |
| services | Container-Definitionen | Mehrere Service-Konfigurationen |
| networks | Benutzerdefinierte Netzwerkeinstellungen | Bridge-, Host-Netzwerke |
| volumes | Persistente Datenspeicherung | Benannte oder host-gemountte Volumes |
Praktisches Beispiel: Webanwendungsaufbau
Hier ist eine umfassende Docker Compose-Konfiguration für eine typische Webanwendung:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: secretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Befehle der Kommandozeile
Wichtige Docker Compose-Befehle zur Verwaltung von Multi-Container-Anwendungen:
## Starten der in docker-compose.yml definierten Services
docker-compose up -d
## Stoppen und Entfernen von Containern
docker-compose down
## Anzeigen der laufenden Container
docker-compose ps
## Anzeigen der Service-Logs
docker-compose logs web
Verwaltung von Service-Abhängigkeiten
Docker Compose ermöglicht die Definition von Service-Abhängigkeiten zur Steuerung der Startsequenz:
services:
web:
depends_on:
- database
restart: on-failure
Diese Konfiguration stellt sicher, dass der Datenbank-Service vor dem Web-Service gestartet wird, mit automatischen Neustartfunktionen.
Volumenverwaltung
Docker-Volumen verstehen
Docker-Volumes bieten persistente Speichermechanismen für Container, die die Datenspeicherung und -freigabe zwischen Hostsystemen und containerisierten Anwendungen ermöglichen. Sie lösen kritische Herausforderungen der Datenpersistenz und Zustandsverwaltung in containerisierten Umgebungen.
Vergleich der Volumtypen
| Volumtyp | Eigenschaften | Anwendungsfall |
|---|---|---|
| Benannte Volumes | Von Docker verwaltet | Persistente Anwendungsdaten |
| Bind Mounts | Zuordnung des Host-Dateisystems | Entwicklungs-Umgebungen |
| Tmpfs Mounts | Speicher im Arbeitsspeicher | Temporäre, sensible Daten |
Arbeitsablauf der Volumenverwaltung
graph TD
A[Volumen erstellen] --> B[An Container mounten]
B --> C[Daten persistent speichern]
C --> D[Sicherungskopie/Migration]
Docker Compose Volumenkonfiguration
version: "3.8"
services:
database:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
- ./backup:/database_backup
volumes:
postgres_data:
driver: local
Erweiterte Volumenverwaltungsbefehle
## Erstellen eines benannten Volumens
docker volume create myapp_data
## Auflisten vorhandener Volumen
docker volume ls
## Details des Volumens anzeigen
docker volume inspect myapp_data
## Entfernen nicht verwendeter Volumen
docker volume prune
Beispiel für die Konfiguration von Bind Mounts
services:
web:
image: nginx:latest
volumes:
- ./website:/usr/share/nginx/html:ro
Diese Konfiguration ordnet ein lokales Verzeichnis einem Container zu, mit schreibgeschützten Berechtigungen, was einen nahtlosen Entwicklungsablauf ermöglicht.
Erweiterte Bereitstellung
Konfiguration für mehrere Umgebungen
Docker Compose unterstützt ausgefeilte Bereitstellungsstrategien durch umgebungsspezifische Konfigurationen, die nahtlose Übergänge zwischen Entwicklungs-, Staging- und Produktionsumgebungen ermöglichen.
Umgebungskonfigurationsstrategie
version: "3.8"
services:
web:
image: myapp:${TAG:-latest}
environment:
- DATABASE_HOST=${DATABASE_HOST:-localhost}
- DEBUG=${DEBUG:-false}
Skalierungsmechanismen für Services
graph TD
A[Basis-Service] --> B[Horizontale Skalierung]
B --> C[Mehrere Container-Instanzen]
C --> D[Lastausgeglichen]
Netzwerkkonfigurationsoptionen
| Netzwerktyp | Geltungsbereich | Anwendungsfall |
|---|---|---|
| Bridge | Container-zu-Container | Interne Kommunikation |
| Host | Direkte Host-Netzwerkverbindung | Performance-kritische Apps |
| Overlay | Netzwerk über mehrere Hosts | Verteilte Systeme |
Erweiterliches Netzwerkbeispiel
version: "3.8"
services:
web:
networks:
- frontend
database:
networks:
- backend
networks:
frontend:
backend:
Befehle für den Bereitstellungsprozess
## Erstellen von Images mit spezifischer Konfiguration
docker-compose build
## Bereitstellung im losgelösten Modus
docker-compose up -d
## Skalieren spezifischer Services
docker-compose up --scale web=3
## Durchführen von Roll-Updates
docker-compose up -d --no-deps --build web
Konfiguration von Health Checks
services:
web:
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
Zusammenfassung
Durch die Beherrschung von Docker Compose können Entwickler komplexe Anwendungsarchitekturen effizient orchestrieren, Service-Interaktionen definieren, Netzwerkkonfigurationen verwalten und eine konsistente Bereitstellung über verschiedene Umgebungen hinweg gewährleisten. Der Tutorial behandelt Kernkonzepte, praktische Konfigurationsstrategien und essentielle Befehle der Kommandozeile, die Entwicklern ermöglichen, Containerisierungstechnologien effektiv zu nutzen.



