In modernen Docker-Setups wird es zunehmend wichtig, Compose-Dateien modular, wartbar und sicher zu gestalten. Die Kombination aus Base-, Override- und Secret-Dateien ermöglicht eine klare Trennung von Standardkonfiguration, Umgebungsanpassungen und sensiblen Daten. Dies ist besonders in Teams und produktiven Umgebungen relevant, um Wiederverwendbarkeit und Sicherheit zu gewährleisten.
1. Aufbau einer Multi-Compose Architektur
Eine Multi-Compose Architektur besteht aus drei Hauptbestandteilen:
- Base-Datei: Enthält die generelle Konfiguration der Services, Netzwerke und Volumes.
- Override-Datei: Überschreibt oder ergänzt die Base-Konfiguration für spezifische Umgebungen wie
dev,stageoderprod. - Secrets-Datei: Hält sensible Daten getrennt von der Konfiguration, um Sicherheitsrisiken zu minimieren.
Beispielhafte Struktur
project/
├─ docker-compose.yml # Base
├─ docker-compose.override.yml # Environment-spezifisch
├─ secrets.env # Umgebungsvariablen und Passwörter
2. Base-Compose Datei
Die Base-Datei definiert die Kernservices und Standardwerte, die für alle Umgebungen gelten. Ziel ist es, einen stabilen Ausgangspunkt zu schaffen.
Base-Datei Beispiel
version: "3.9"
services:
app:
image: myapp:latest
ports:
- "8080: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:
Die Base-Datei ist unabhängig von der Umgebung und enthält keine sensiblen Daten.
3. Override-Datei
Die Override-Datei dient dazu, die Base-Konfiguration für spezifische Einsatzszenarien anzupassen, z. B. unterschiedliche Ports, Replikas oder Debug-Optionen für Entwicklungsumgebungen.
Override-Datei Beispiel
version: "3.9"
services:
app:
ports:
- "8081:80"
environment:
- APP_ENV=development
command: ["npm", "run", "dev"]
db:
environment:
- POSTGRES_PASSWORD=devpassword
Die Override-Datei wird automatisch von Docker Compose geladen, wenn sie im gleichen Verzeichnis liegt, oder explizit angegeben:
docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d
4. Secrets Management
Secrets trennen sensible Informationen wie Passwörter oder API-Keys von der Compose-Konfiguration. Sie können direkt in Docker Compose integriert oder über externe Dateien bereitgestellt werden.
Beispiel mit secrets in Compose
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.env
In secrets.env könnte stehen:
supersecurepassword
Vorteile von Secrets
- Trennung von sensiblen Daten und Versionskontrolle
- Minimierung von Leak-Risiken
- Einfaches Austauschen der Secrets ohne Änderung der Compose-Datei
5. Kombination von Base, Override und Secrets
Durch die Kombination dieser drei Komponenten lassen sich Stacks flexibel für unterschiedliche Umgebungen betreiben, ohne dass sensible Daten in Versionskontrolle gelangen oder Base-Definitionen dupliziert werden müssen.
Startbefehl für Multi-Compose Setup
docker-compose -f docker-compose.yml
-f docker-compose.override.yml
--env-file secrets.env up -d
Damit werden alle Services gestartet, die Base-Definitionen geladen, durch die Override-Datei angepasst und Secrets sicher eingebunden.
6. Best Practices
- Base-Datei als unveränderliche Standardkonfiguration nutzen.
- Override-Dateien für spezifische Umgebungen (dev, stage, prod) anlegen.
- Secrets niemals direkt in Base- oder Override-Dateien speichern.
- Dokumentiere, welche Services von welchem Profile und Secrets abhängig sind.
- Regelmäßig
docker-compose confignutzen, um die endgültige Konfiguration zu prüfen. - Versionskontrolle nur für Base- und Override-Dateien, niemals für Secrets.
7. Troubleshooting
Typische Fehlerquellen bei Multi-Compose Setups:
- Falsche Pfade zu Secrets oder fehlende Rechte.
- Überschreibungen in Override-Dateien nicht wie erwartet, z. B. bei Arrays wie
portsoderenvironment. - Vergessene Profile, wodurch Services nicht starten.
- Konflikte zwischen Base und Override, z. B. Ports oder Volume-Mounts.
Debugging Tipps
docker-compose config: Zeigt die zusammengeführte Konfiguration an.docker-compose logs <service>: Prüft die Logs der einzelnen Services.docker inspect <container>: Zeigt Container-Mounts, Netzwerke und Secrets.- Profiles gezielt aktivieren:
--profile dev
8. Fazit
Eine Multi-Compose Architektur mit Base, Override und Secrets ermöglicht modular, sicher und wartbar Docker-Stacks zu betreiben. Teams profitieren von klarer Struktur, reduzierter Redundanz und besserer Trennung sensibler Daten. Durch konsequentes Profil-, Override- und Secret-Management lassen sich Umgebungen zuverlässig steuern und flexibel anpassen.
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.











