{
“@context”: “https://schema.org”,
“@type”: “TechArticle”,
“headline”: “So verwenden Sie Docker Compose für die lokale Entwicklung im Jahr 2026: Vollständiger Leitfaden”,
“description”: “Master Docker Compose für lokale Entwicklung im Jahr 2026 – Multi-Service-Setup, Hot-Reload, Netzwerk, Volumes, Geheimnisse und Produktionsparität.”,
“url”: “https://techpulsesite.com/how-to-use-docker-compose-for-local-deve-de/”,
“datePublished”: “2026-06-28T10:20:00+00:00”,
“dateModified”: “2026-06-29T04:14:19+00:00”,
“author”: {
“@type”: “Organization”,
“name”: “TechPulse Editorial Team”,
“url”: “https://techpulsesite.com”
},
“publisher”: {
“@type”: “Organization”,
“name”: “TechPulse”,
“url”: “https://techpulsesite.com”
},
“inLanguage”: “de”
}
{
“@context”: “https://schema.org”,
“@type”: “TechArticle”,
“headline”: “So verwenden Sie Docker Compose für die lokale Entwicklung im Jahr 2026: Vollständiger Leitfaden”,
“description”: “Master Docker Compose für lokale Entwicklung im Jahr 2026 – Multi-Service-Setup, Hot-Reload, Netzwerk, Volumes, Geheimnisse und Produktionsparität.”,
“url”: “https://techpulsesite.com/how-to-use-docker-compose-for-local-deve-de/”,
“datePublished”: “2026-06-28T10:20:00+00:00”,
“dateModified”: “2026-06-28T18:20:48+00:00”,
“author”: {
“@type”: “Organization”,
“name”: “TechPulse Editorial Team”,
“url”: “https://techpulsesite.com”
},
“publisher”: {
“@type”: “Organization”,
“name”: “TechPulse”,
“url”: “https://techpulsesite.com”
},
“inLanguage”: “de”
}
Docker Compose verwandelt die lokale Entwicklung von „funktioniert auf meinem Computer“ in reproduzierbare, produktionsähnliche Umgebungen, die jedes Teammitglied in wenigen Minuten einrichten kann. Im Jahr 2026 gibt es mit der in Docker Desktop und CLI integrierten Docker Compose v2 kein besseres Tool für die Verwaltung lokaler Multi-Service-Stacks.
📋 Table of Contents
- Warum Docker Compose für die Entwicklung?
- Projekt-Setup: Full-Stack-Anwendung
- Kern docker-compose.yml
- Entwicklungs-Docker-Datei für Hot Reload
- Datei für lokale Anpassung überschreiben
- muss nicht angegeben werden Wesentliche Befehle
- Geheimnisse richtig verwalten
- Vernetzung zwischen Diensten
- Gesundheitsprüfungen und Dienstabhängigkeiten
- Produktion vs. Entwicklung Dateien erstellen
- Häufig gestellte Fragen
- Fazit
Warum Docker Compose für die Entwicklung?
- Starten Sie Postgres, Redis, Ihre API und einen Warteschlangen-Worker mit einem Befehl
- Beseitigen Sie „es funktioniert auf meinem Computer“ – jeder Entwickler hat identische Umgebungen
- Passen Sie die Topologie des Produktionsdiensts lokal an, ohne Kubernetes auszuführen
- Wechseln Sie einfach zwischen Knotenversionen, Datenbankversionen oder Dienstkonfigurationen
Projekt-Setup: Full-Stack-Anwendung
Wir erstellen ein Compose-Setup für: Next.js-Frontend, FastAPI-Backend, PostgreSQL, Redis und einen Celery-Worker.
myapp/
├── docker-compose.yml
├── docker-compose.override.yml # local dev overrides
├── frontend/
│ ├── Dockerfile
│ └── ...
├── backend/
│ ├── Dockerfile
│ └── ...
└── .env.local
Kern docker-compose.yml
version: "3.9"
services:
# ── PostgreSQL ─────────────────────────────────────────────
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: ${DB_NAME:-myapp}
POSTGRES_USER: ${DB_USER:-postgres}
POSTGRES_PASSWORD: ${DB_PASS:-devpassword}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./backend/scripts/init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
# ── Redis ──────────────────────────────────────────────────
redis:
image: redis:7-alpine
ports:
- "6379:6379"
command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru
# ── FastAPI Backend ────────────────────────────────────────
backend:
build:
context: ./backend
dockerfile: Dockerfile.dev
volumes:
- ./backend:/app # hot reload: source mounted
ports:
- "8000:8000"
environment:
DATABASE_URL: postgresql://postgres:devpassword@db:5432/myapp
REDIS_URL: redis://redis:6379/0
ENV: development
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
# ── Celery Worker ──────────────────────────────────────────
worker:
build:
context: ./backend
dockerfile: Dockerfile.dev
volumes:
- ./backend:/app
environment:
DATABASE_URL: postgresql://postgres:devpassword@db:5432/myapp
REDIS_URL: redis://redis:6379/0
depends_on: [db, redis]
command: celery -A app.tasks worker --loglevel=info
# ── Next.js Frontend ───────────────────────────────────────
frontend:
build:
context: ./frontend
dockerfile: Dockerfile.dev
volumes:
- ./frontend:/app
- /app/node_modules # anonymous volume prevents override
ports:
- "3000:3000"
environment:
NEXT_PUBLIC_API_URL: http://localhost:8000
command: npm run dev
volumes:
postgres_data:
Entwicklungs-Docker-Datei für Hot Reload
# backend/Dockerfile.dev
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
# Don't copy source — it's mounted as volume for hot reload
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--reload"]
# frontend/Dockerfile.dev
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
# Source mounted as volume; node_modules stays in container
CMD ["npm", "run", "dev"]
Datei für lokale Anpassung überschreiben
# docker-compose.override.yml (not committed to git)
# Each developer's personal overrides
services:
backend:
environment:
DEBUG: "true"
LOG_LEVEL: debug
ports:
- "8000:8000"
- "5678:5678" # debugger port
db:
ports:
- "5432:5432" # expose to host for TablePlus/DBeaver access
Docker Compose führtdocker-compose.override.ymlautomatisch zusammen mit der Basisdatei –-f.
muss nicht angegeben werden Wesentliche Befehle
# Start everything
docker compose up -d
# View logs (all services)
docker compose logs -f
# View logs for one service
docker compose logs -f backend
# Run a command in a service
docker compose exec backend python manage.py migrate
docker compose exec db psql -U postgres -d myapp
# Rebuild a specific service after Dockerfile change
docker compose up -d --build backend
# Stop and remove everything (keep volumes)
docker compose down
# Stop, remove containers AND volumes (fresh slate)
docker compose down -v
# Scale a service
docker compose up -d --scale worker=3
Geheimnisse richtig verwalten
# .env.local (gitignored)
DB_PASS=mylocalsecretpassword
SECRET_KEY=dev-only-not-production
# docker-compose.yml references env vars
environment:
DB_PASS: ${DB_PASS}
# Or use Docker secrets for production-like setups
secrets:
db_password:
file: ./secrets/db_password.txt
services:
backend:
secrets: [db_password]
Vernetzung zwischen Diensten
Dienste in derselben Compose-Datei kommunizieren über den Dienstnamen. Ihr Backend stellt unterdb:5432eine Verbindung zu PostgreSQL her , nichtlocalhost:5432. Dies entspricht genau dem Produktionscontainer-Netzwerk:
# backend connects to other services by service name
DATABASE_URL=postgresql://postgres:pass@db:5432/myapp
REDIS_URL=redis://redis:6379/0
# NOT localhost — that would be the container itself
# NOT the host IP — that breaks portability
Gesundheitsprüfungen und Dienstabhängigkeiten
services:
backend:
depends_on:
db:
condition: service_healthy # waits for DB to pass healthcheck
redis:
condition: service_started # just waits for container to start
db:
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
retries: 5
start_period: 10s
Produktion vs. Entwicklung Dateien erstellen
# Use specific files explicitly
docker compose -f docker-compose.yml up -d # dev
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d # prod
# In production: remove volume mounts, use built images, add resource limits
# docker-compose.prod.yml
services:
backend:
image: myapp-backend:1.2.0 # pinned production image
restart: unless-stopped
deploy:
resources:
limits:
memory: 512m
Häufig gestellte Fragen
F: Docker Compose vs. Kubernetes für lokale Entwickler?
A: Docker Compose für die lokale Entwicklung. Kubernetes für die Produktion. Minikube oder k3d zum lokalen Testen von Kubernetes-Konfigurationen. Compose ist einfacher, schneller und für Entwicklungsworkflows ausreichend.
F: Warum wird meine Codeänderung auch bei Volume-Mounts nicht berücksichtigt?
A: Hot-Reload hängt vom Framework ab (FastAPI –reload, Next.js-Entwicklungsserver). Wenn es nicht funktioniert, überprüfen Sie, ob der Volume-Mount-Pfad korrekt ist und das Arbeitsverzeichnis des Containers übereinstimmt. Starten Sie außerdem den Dienst neu:docker compose restart backend.
F: Wie führe ich Datenbankmigrationen automatisch durch?
A: Fügen Sie Ihrem Dienst einen Befehl hinzu oder verwenden Sie einen separaten Migrationsdienst:docker compose run --rm backend alembic upgrade head. Oder fügen Sie es zu enterpoint.sh hinzu, bevor Sie den Server starten.
F: Wie teile ich Daten zwischen Diensten?
A: Über benannte Volumes für Datenbankdaten. Über Umgebungsvariablen zur Konfiguration. Über das Netzwerk zur Dienst-zu-Dienst-Kommunikation. Vermeiden Sie das Binden von Dateien zwischen Containern – verwenden Sie stattdessen die Service-API.
F: Wie debugge ich einen Dienst, der in Docker ausgeführt wird?
A: Ordnen Sie den Debugger-Port in Ihrer Compose-Datei zu, konfigurieren Sie Ihre IDE (VS Code’s Remote – Containers oder Python debugpy). Oder in den Container ausführen:docker compose exec backend bash.
Fazit
Docker Compose ist das definitive Tool für die lokale Multi-Service-Entwicklung im Jahr 2026. Das Setup in diesem Handbuch – Basis-Compose-Datei + Override-Datei + korrekte Volume-Mounts + Integritätsprüfungen – bietet Ihnen lokale Produktionsparität, Hot-Reload für eine schnelle Entwicklung und einen Start mit einem Befehl für neue Teammitglieder. Investieren Sie 2-3 Stunden in die ordnungsgemäße Einrichtung und sparen Sie Hunderte von Stunden Debugging „Es funktioniert auf meinem Computer“.
🔗 Share this article
✍️ Leave a Comment