Die Verwaltung einzelner Docker-Container mit langen docker run-Befehlen wird schnell unpraktisch, wenn Ihre Anwendung mehrere miteinander verbundene Dienste erfordert. Docker Compose loest dieses Problem, indem es Ihnen ermoeglicht, Multi-Container-Anwendungen mit einer einzigen deklarativen YAML-Datei zu definieren und zu verwalten.
Voraussetzungen
- Docker Engine auf Ihrem System installiert
- Grundlegendes Verstaendnis der Docker-Konzepte
- Ein Texteditor und Terminal-Zugang mit sudo-Rechten
Was ist Docker Compose?
Docker Compose ist ein Werkzeug zum Definieren und Ausfuehren von Multi-Container-Docker-Anwendungen. Anstatt mehrere docker run-Befehle auszufuehren, beschreiben Sie Ihren gesamten Anwendungs-Stack in einer docker-compose.yml-Datei und starten alles mit einem einzigen Befehl.
Compose V2 vs. V1
| Merkmal | Compose V1 (Veraltet) | Compose V2 (Aktuell) |
|---|---|---|
| Befehl | docker-compose | docker compose |
| Sprache | Python | Go |
| Status | Veraltet | Aktive Entwicklung |
Haeufige Docker Compose Befehle
# Alle Dienste im Hintergrund starten
docker compose up -d
# Alle Dienste stoppen
docker compose down
# Logs aller Dienste anzeigen
docker compose logs
# Einen bestimmten Dienst neu starten
docker compose restart php
# Befehl in laufendem Container ausfuehren
docker compose exec mysql mysql -u root -p
Produktionsueberlegungen
Neustart-Richtlinien
services:
web:
restart: unless-stopped
Health Checks
services:
api:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
Ressourcenlimits
services:
worker:
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
Sicherheits-Best-Practices
- Container nie als root ausfuehren, es sei denn unbedingt noetig
read_only: truesetzen fuer Container, die nicht schreiben muessen- Unnoetige Linux-Faehigkeiten entfernen mit
cap_drop: [ALL]
Fazit
Docker Compose transformiert die Art und Weise, wie Systemadministratoren Multi-Container-Anwendungen bereitstellen und verwalten. Durch die Definition Ihrer Infrastruktur in einer deklarativen YAML-Datei gewinnen Sie Reproduzierbarkeit, Versionskontrolle und einen Ein-Befehl-Deployment-Workflow.