Umgebungsvariablen in Docker Compose: Sicher und sauber einsetzen

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.

Related Articles