Docker Compose: Mehrere Container gemeinsam starten
Kurz: Docker Compose beschreibt in einer Datei mehrere Container, Netze und Volumes und startet sie mit einem Befehl; ideal für Web-App mit Datenbank in Entwicklung und kleinen Servern.
Genauer: Eine Anwendung besteht oft aus mehreren Teilen: Web-App, Datenbank, Cache, Reverse-Proxy. Mit einzelnen docker run-Befehlen wird das unübersichtlich. Docker Compose fasst alles in einer compose.yaml zusammen.
Im Detail
Beispiel
services:
web:
build: .
ports:
- "127.0.0.1:3000:3000"
environment:
DATABASE_URL: postgres://app:geheim@db:5432/app
depends_on:
db:
condition: service_healthy
db:
image: postgres:16
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: geheim
POSTGRES_DB: app
volumes:
- dbdaten:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app"]
interval: 5s
volumes:
dbdaten:Die Dienste erreichen sich über ihren Namen (db). Compose legt ein gemeinsames Netzwerk an.
Wichtige Befehle
docker compose up -d # starten (im Hintergrund)
docker compose logs -f web # Logs verfolgen
docker compose ps # Status
docker compose exec db psql -U app # Befehl im Container
docker compose down # stoppen und entfernen
docker compose down -v # zusätzlich Volumes löschen (Daten weg!)
docker compose up --build # neu bauenÄltere Syntax: docker-compose (mit Bindestrich).
Konfiguration und Sicherheit
- Geheimnisse nicht ins Repository schreiben:
.env-Datei (in.gitignore),env_file:oder Docker Secrets. - Ports nur dort veröffentlichen, wo nötig; interne Dienste (Datenbank) nicht nach außen öffnen (
127.0.0.1:oder gar keine Portfreigabe). - Volumes für persistente Daten; Backups einplanen.
- Versionen festlegen (
postgres:16stattlatest). - Healthchecks und
restart: unless-stoppedfür Stabilität. - Mit Profilen und Override-Dateien (
compose.override.yaml) trennt man Entwicklung und Produktion.
Grenzen
Compose läuft auf einem Rechner. Für viele Server, automatische Skalierung und Ausfallsicherheit nutzt man Kubernetes oder Docker Swarm. Für Heimserver und kleine Projekte ist Compose meist ideal. Lerne zuerst Docker-Grundlagen, dann Compose.
Siehe auch: Docker, Docker Volumes und Netzwerke, Kubernetes-Grundlagen, Docker: port is already allocated, env-Dateien