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,stageoderprod. - 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 confignutzen, 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 -fprü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.











