Umgebungsvariablen sind ein zentrales Mittel, um Konfigurationen in Docker Compose flexibel zu gestalten. Sie ermöglichen es, denselben Compose-Stack in verschiedenen Umgebungen wie Entwicklung, Test und Produktion zu betreiben, ohne die Compose-Datei ändern zu müssen. Gleichzeitig müssen sensible Daten wie Passwörter und API-Keys sicher gehandhabt werden, um Leaks zu vermeiden.
Grundlagen von Umgebungsvariablen
Umgebungsvariablen werden genutzt, um Konfigurationswerte an Container zu übergeben. Docker Compose unterstützt die Definition direkt in der docker-compose.yml oder in externen .env-Dateien.
Direkte Definition in Compose-Datei
services:
web:
image: nginx
environment:
- WEB_PORT=8080
- DEBUG=false
Diese Methode ist einfach, eignet sich jedoch nicht für sensible Daten, da sie in Versionskontrollsystemen sichtbar sind.
Externe .env-Dateien
# .env-Datei
WEB_PORT=8080
DEBUG=false
DB_PASSWORD=secretpass
Compose-Datei
services:
web:
image: nginx
env_file:
- .env
- Trennt Konfiguration von Code
- Erleichtert unterschiedliche Umgebungen durch separate .env-Dateien
- Sensible Daten sollten nicht im Repository liegen
Secrets statt sensibler Umgebungsvariablen
Passwörter und API-Keys sollten nicht in .env-Dateien gespeichert werden. Docker Secrets bieten eine sichere Alternative.
services:
db:
image: mysql:8
secrets:
- db_password
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_password
secrets:
db_password:
file: ./db_password.txt
Secrets werden verschlüsselt verwaltet und nur dem Container zugänglich gemacht, der sie benötigt.
Variable Referenzen und Standardwerte
Docker Compose erlaubt Referenzen auf Variablen aus der Umgebung und die Angabe von Standardwerten:
services:
web:
image: nginx
environment:
WEB_PORT: "${WEB_PORT:-80}"
DEBUG: "${DEBUG:-false}"
- Ermöglicht flexible Overrides per Shell oder CI/CD
- Standardwerte verhindern Fehler, falls die Variable nicht gesetzt ist
Profiles und Umgebungsvariablen kombinieren
Mit Docker Compose Profiles lassen sich unterschiedliche Services und Variablen für Entwicklungs-, Test- oder Produktionsumgebungen definieren.
version: '3.8'
services:
web:
image: nginx
environment:
- ENVIRONMENT=dev
profiles:
- dev
web_prod:
image: nginx
environment:
- ENVIRONMENT=prod
profiles:
- prod
Beim Start wird nur das entsprechende Profil geladen:
docker-compose --profile dev up -d
Best Practices für sichere und saubere Nutzung
- Sensible Daten niemals direkt in der Compose-Datei oder im Repository speichern
- Secrets für Passwörter, Tokens oder API-Keys verwenden
- Standardwerte definieren, um Fehlkonfigurationen zu vermeiden
- Unterschiedliche .env-Dateien für Development, Test und Production nutzen
- CI/CD-Pipelines mit Umgebungsvariablen konfigurieren, um Builds reproduzierbar zu machen
- Variablen klar benennen und konsistent dokumentieren
- Logging und Monitoring berücksichtigen, um sicherheitsrelevante Änderungen nachzuvollziehen
Praxisbeispiele
Web-Service mit .env-Datei
# .env
WEB_PORT=8080
DEBUG=true
docker-compose.yml
services:
web:
image: nginx
env_file:
- .env
ports:
- "${WEB_PORT}:80"
MySQL-Service mit Secret
services:
db:
image: mysql:8
secrets:
- db_password
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_password
secrets:
db_password:
file: ./db_password.txt
Profile-basiertes Deployment
docker-compose --profile dev up -d
docker-compose --profile prod up -d
Zusammenfassung
Umgebungsvariablen in Docker Compose ermöglichen flexible und konfigurierbare Container-Deployments. Für sensible Daten sollten Secrets verwendet werden, während Standardwerte, Profile und externe .env-Dateien eine saubere Trennung von Konfiguration und Code gewährleisten. Durch die konsequente Umsetzung dieser Best Practices lassen sich Sicherheit, Wartbarkeit und Flexibilität in Multi-Container-Umgebungen erhöhen.
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.

