Docker Compose für lokale Entwicklung
Wie man mit Docker Compose reproduzierbare lokale Entwicklungsumgebungen erstellt, die die Produktionsumgebung widerspiegeln.
Docker Compose für lokale Entwicklung
„Es läuft auf meinem Rechner" ist ein gelöstes Problem. Docker Compose ermöglicht es, den gesamten Entwicklungsstack als Code zu definieren – Datenbanken, Caches, Message Queues und die Anwendung selbst – alles in isolierten Containern.
Warum Docker Compose?
- Reproduzierbar — Jedes Teammitglied bekommt dieselbe Umgebung
- Isoliert — Keine Konflikte zwischen Projekten mit unterschiedlichen Dependency-Versionen
- Wegwerfbar — Umgebung in Sekunden zerstören und neu aufbauen
- Produktionsnah — Die Deployment-Topologie lokal abbilden
Ein praktisches Beispiel
Hier ist eine Compose-Datei für eine typische Webanwendung:
services:
app:
build:
context: .
target: development
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
environment:
DATABASE_URL: postgres://dev:dev@db:5432/myapp
REDIS_URL: redis://cache:6379
depends_on:
db:
condition: service_healthy
cache:
condition: service_started
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: dev
POSTGRES_PASSWORD: dev
POSTGRES_DB: myapp
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dev"]
interval: 5s
timeout: 5s
retries: 5
cache:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
pgdata:
Wichtige Patterns
Health Checks
Container nicht einfach starten – warten, bis sie bereit sind:
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dev"]
interval: 5s
timeout: 5s
retries: 5
Das verhindert, dass die App abstürzt, weil die Datenbank noch keine Verbindungen akzeptiert.
Volume Mounts für Hot Reload
Den Quellcode in den Container mounten für Live-Reloading:
volumes:
- .:/app # Quellcode
- /app/node_modules # Überschreiben der node_modules im Container verhindern
Das anonyme Volume für node_modules ist entscheidend – es verhindert, dass die Host-Module die plattformspezifischen Binaries des Containers überschreiben.
Umgebungsvariablen
Secrets gehören nicht in die Compose-Datei. Nutze .env-Dateien:
# .env (niemals committen)
POSTGRES_PASSWORD=dev
API_SECRET=local-dev-secret
env_file:
- .env
Häufige Befehle
# Alles starten
docker compose up -d
# Logs anzeigen
docker compose logs -f app
# Nach Dockerfile-Änderungen neu bauen
docker compose up -d --build
# Alles zurücksetzen
docker compose down -v
# Einmaligen Befehl ausführen
docker compose exec app npm run migrate
Tipps
- Alpine-Images verwenden — Sie sind 5–10x kleiner als Standard-Images
- Versionen pinnen —
postgres:16-alpine, nichtpostgres:latest - Named Volumes — Daten über Container-Neustarts hinweg persistieren
- Override-Dateien —
docker-compose.override.ymlfür persönliche Einstellungen nutzen - Profiles — Optionale Services gruppieren (Monitoring, Debugging-Tools)
Nächste Schritte
Im nächsten Artikel schauen wir uns Multi-Stage Dockerfiles für Produktions-Builds an und wie man seine CI/CD-Pipeline rund um Container strukturiert.
Docker Compose macht Infrastruktur zu Code. Behandle es mit derselben Sorgfalt wie jeden anderen Teil deiner Codebase.
Getting Started with Large Language Models
A practical introduction to LLMs — what they are, how they work, and how to start building with them today.
Wie man einen Finanz-Agenten baut
Eine Schritt-für-Schritt-Anleitung zum Aufbau eines KI-gestützten Finanzagenten — von Subagenten und Tool-Routing bis hin zu Scratchpads und Evaluierungen.