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.



