Multi-Environment Setups: dev/stage/prod mit Docker Compose

Multi-Environment Setups mit Docker Compose ermöglichen die konsistente Verwaltung von Entwicklungs-, Staging- und Produktionsumgebungen. Jede Umgebung hat unterschiedliche Anforderungen in Bezug auf Ressourcen, Debugging, Logging und Sicherheit. Mit gezieltem Einsatz von Basis-Compose-Dateien und Overrides lassen sich dev/stage/prod sauber trennen und automatisierte Deployments sicher durchführen.

Warum Multi-Environment Setups wichtig sind

Unterschiedliche Umgebungen dienen spezifischen Zwecken:

  • Development: Debugging, Hot-Reload, Testdaten und ausführliche Logs
  • Staging: Testumgebung, die Produktion möglichst realistisch simuliert
  • Production: Stabile Versionen, minimal exponierte Ports, Ressourcenlimits und Secrets

Die Trennung verhindert, dass Debug-Features oder unsichere Ports in die Produktion gelangen und erleichtert Rollbacks und Updates.

Basis-Compose-Datei

Eine zentrale Basisdatei docker-compose.base.yml definiert gemeinsame Services, Netzwerke und Volumes:

version: "3.9"

services:
  web:
    image: myorg/web:1.0.0
    networks:
      - frontend
  api:
    image: myorg/api:2.0.0
    networks:
      - backend
  db:
    image: postgres:16
    volumes:
      - db_data:/var/lib/postgresql/data

networks:
  frontend:
  backend:

volumes:
  db_data:
  • Minimiert Redundanz zwischen Umgebungen
  • Grundkonfiguration für alle Environments
  • Services können in Overrides erweitert oder angepasst werden

Development Override

In Development werden zusätzliche Features aktiviert:

version: "3.9"

services:
  web:
    build: ./web
    ports:
      - "3000:3000"
    volumes:
      - ./web/src:/app/src
    environment:
      - DEBUG=true
  api:
    build: ./api
    ports:
      - "5000:5000"
    environment:
      - DEBUG=true
  • Hot-Reload durch lokale Volumes
  • Debugging aktiviert via Environment Variables
  • Exponierte Ports für lokale Tests

Staging Override

Staging simuliert die Produktionsumgebung mit stabilen Images, jedoch ohne Live-Traffic:

version: "3.9"

services:
  web:
    image: myorg/web:1.0.0
    environment:
      - DEBUG=false
    deploy:
      replicas: 2
      restart_policy:
        condition: on-failure
  api:
    image: myorg/api:2.0.0
    environment:
      - DEBUG=false
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
  • Simuliert Produktion ohne Produktionsdaten
  • Healthchecks prüfen Stabilität
  • Externe Ports werden minimal freigegeben

Production Override

In der Produktion sind Sicherheit und Skalierbarkeit entscheidend:

version: "3.9"

services:
  web:
    image: myorg/web:1.0.0
    environment:
      - DEBUG=false
    deploy:
      replicas: 3
      resources:
        limits:
          cpus: "1.0"
          memory: "512M"
      restart_policy:
        condition: on-failure
    ports:
      - "80:80"
    secrets:
      - db_password
  api:
    image: myorg/api:2.0.0
    environment:
      - DEBUG=false
    deploy:
      replicas: 2
      resources:
        limits:
          cpus: "0.5"
          memory: "256M"
      restart_policy:
        condition: on-failure
    secrets:
      - api_key

secrets:
  db_password:
    external: true
  api_key:
    external: true
  • Stabile Images mit Versionierung
  • Secrets für sensible Daten
  • Ressourcenlimits und Restart Policies aktiv
  • Skalierung über Replicas

Deployment mit Multi-Environment Compose

Docker Compose erlaubt die Kombination von Basis- und Override-Dateien:

# Entwicklungsstart
docker-compose -f docker-compose.base.yml -f docker-compose.override.dev.yml up -d

# Staging
docker-compose -f docker-compose.base.yml -f docker-compose.override.stage.yml up -d

# Produktion
docker-compose -f docker-compose.base.yml -f docker-compose.override.prod.yml up -d
  • Die zweite Datei überschreibt oder ergänzt die Basisdefinition
  • Ermöglicht konsistente Deployments in allen Umgebungen
  • Reduziert Fehler durch Duplizierung von Konfiguration

Netzwerk- und Portmanagement

  • Entwicklungs-Umgebung: Alle benötigten Ports für Debugging freigegeben
  • Staging: Minimale Portfreigaben, simuliert Produktion
  • Produktion: Nur notwendige Ports nach außen öffnen, z. B. 80/443
  • Netzwerke für Frontend und Backend strikt trennen

Best Practices für Multi-Environment Setups

  • Stabile, versionierte Images verwenden
  • Secrets statt Environment Variables für sensible Daten
  • Healthchecks in Staging und Produktion implementieren
  • Ressourcenlimits für CPU und RAM setzen
  • Automatisierte Tests vor Umschaltung in Produktion
  • Rollback-Mechanismen planen (Blue-Green oder Rolling Updates)
  • Logging und Monitoring auf Umgebung anpassen
  • Volumes in Development nur für Hot-Reload nutzen

Monitoring und Logging

Entwicklungs-, Staging- und Produktionsumgebungen unterscheiden sich beim Logging:

  • Development: ausführliche Logs, Debug-Informationen
  • Staging: Logs wie in Produktion, aber ohne Live-Traffic
  • Production: zentrale Logs, Healthchecks, Alerts
  • Monitoring-Tools: Prometheus, Grafana, ELK, Loki

Zusammenfassung

Multi-Environment Setups mit Docker Compose ermöglichen die konsistente Verwaltung von Development, Staging und Production. Durch Basis-Compose-Dateien und spezifische Overrides können Debugging, Hot-Reload und Tests in Development erfolgen, während Staging und Production stabil, abgesichert und skalierbar bleiben. Die Trennung reduziert Fehler, erleichtert Rollbacks und sorgt für wartbare, sichere Produktionsumgebungen.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles