Compose für Multi-Environment: dev/stage/prod ohne Config-Drift

In modernen DevOps-Umgebungen ist die Verwaltung mehrerer Docker-Umgebungen wie dev, stage und prod entscheidend, um Config-Drift zu vermeiden und konsistente Deployments sicherzustellen. Docker Compose bietet Mechanismen, um Multi-Environment-Setups sauber zu strukturieren, sodass Basis-Services, Umgebungsvariablen und Secrets klar getrennt werden können.

1. Grundlagen von Multi-Environment Setups

Ein Multi-Environment Setup trennt die Konfigurationen in:

  • Base Compose Datei: Enthält die generelle Service-Definition, Volumes und Netzwerke, die in allen Umgebungen gleich bleiben.
  • Override Dateien: Überschreiben spezifische Einstellungen für dev, stage oder prod.
  • Environment Dateien: Halten sensible Daten und umgebungsspezifische Parameter wie Datenbankpasswörter oder API-Keys.

Vorteile einer sauberen Trennung

  • Vermeidung von Config-Drift zwischen Umgebungen.
  • Einfaches Testen in Entwicklungs- und Staging-Umgebungen.
  • Sichere Handhabung sensibler Daten durch getrennte Secrets.

2. Base Compose Datei erstellen

Die Base-Datei definiert die Kernservices, Volumes und Netzwerke. Sie sollte keine environment-spezifischen Anpassungen enthalten.

version: "3.9"

services:
  web:
    image: myapp:latest
    ports:
      - "80:80"
    volumes:
      - app-data:/var/lib/myapp
    environment:
      - APP_ENV=production

  db:
    image: postgres:15
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=admin

volumes:
  app-data:
  db-data:

3. Override Dateien für jede Umgebung

Override-Dateien erlauben es, Einstellungen gezielt zu ändern, ohne die Base-Datei zu verändern.

Development Override Beispiel

version: "3.9"

services:
web:
ports:
- "8080:80"
environment:
- APP_ENV=development
command: ["npm", "run", "dev"]

db:
environment:
- POSTGRES_PASSWORD=devpassword

Staging Override Beispiel

version: "3.9"

services:
web:
environment:
- APP_ENV=staging

db:
environment:
- POSTGRES_PASSWORD=stagepassword

Override-Dateien können beim Start explizit angegeben werden:

docker-compose -f docker-compose.yml -f docker-compose.override.dev.yml up -d

4. Environment Dateien nutzen

Environment-Dateien halten sensitive Daten getrennt von der Compose-Konfiguration.

Beispiel env-Datei .env.dev

POSTGRES_PASSWORD=devsecret
API_KEY=devapikey

In der Compose-Datei referenziert:

environment:
  - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
  - API_KEY=${API_KEY}

Docker Compose lädt die Datei automatisch, wenn sie .env heißt, oder kann explizit angegeben werden:

docker-compose --env-file .env.dev up -d

5. Secrets für sensible Daten

Secrets bieten eine zusätzliche Sicherheitsebene, da Passwörter und Tokens nicht als Environment-Variable im Container sichtbar sind.

version: "3.9"

services:
  db:
    image: postgres:15
    secrets:
      - db_password
    environment:
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD_FILE=/run/secrets/db_password

secrets:
  db_password:
    file: ./secrets/db_password.txt

6. Konsistente Deployments sicherstellen

  • Regelmäßig docker-compose config nutzen, um die zusammengeführte Konfiguration zu prüfen.
  • Nur Base- und Override-Dateien in Git versionieren, niemals Secrets oder Environment-Dateien mit sensiblen Daten.
  • Automatisierte Tests für jede Umgebung einsetzen, um Drift früh zu erkennen.

7. Profile für selektive Services

Mit Compose-Profilen lassen sich Services nur in bestimmten Umgebungen starten.

services:
  debug:
    image: myapp-debug
    profiles:
      - dev

Starten mit aktiviertem Profil:

docker-compose --profile dev up -d

8. Best Practices

  • Base-Datei als unveränderliche Standardbasis verwenden.
  • Override-Dateien sauber nach Umgebungen trennen.
  • Secrets und Environment-Dateien getrennt halten.
  • Dokumentation über Service-Abhängigkeiten, Ports und Profile führen.
  • Automatisierte CI/CD Pipelines für Testing und Deployment einsetzen.

9. Troubleshooting

Typische Probleme:

  • Config-Drift: Unterschiedliche Ports oder Env-Variablen zwischen dev, stage und prod.
  • Secrets nicht gefunden: Falscher Pfad oder fehlende Rechte.
  • Override-Dateien wirken nicht: Reihenfolge beim docker-compose -f prüfen.
  • Profile nicht aktiviert: Services starten nicht in gewünschter Umgebung.

Debugging Tipps

  • docker-compose config – zeigt die zusammengeführte Konfiguration an.
  • docker-compose logs <service> – prüft die Logs einzelner Services.
  • docker inspect <container> – prüft Mounts, Netzwerke und Secrets.

10. Zusammenfassung

Multi-Environment Setups mit Base, Override, Environment-Dateien und Secrets verhindern Config-Drift, verbessern Sicherheit und erhöhen die Wartbarkeit von Compose Stacks. Durch gezielte Profil- und Override-Nutzung lassen sich Services flexibel anpassen und Deployments zuverlässig automatisieren.

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