🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

So verwenden Sie Docker Compose für die lokale Entwicklung im Jahr 2026: Vollständiger Leitfaden

⏱️6 min read  ·  1,178 words

{
“@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.

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“.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা