In der modernen Softwareentwicklung ist Docker längst mehr als nur ein Trend – es ist Standard geworden. Während viele Entwickler die Grundlagen wie Container, Images oder Dockerfiles bereits kennen, sind Themen wie Konfigurationsverwaltung (Configuration Management) und Umgang mit geheimen Daten (Secrets Handling) häufig noch unscharf oder vernachlässigt. Dieser Beitrag beleuchtet beide Aspekte praxisnah und ausführlich.
⚙️ Teil 1: Configuration Management mit Docker
🔍 Was bedeutet Configuration Management?
Konfigurationsmanagement bezeichnet die Verwaltung und Trennung von Konfigurationen und Code. Die Idee: Der Anwendungscode bleibt gleich, die Umgebungskonfiguration variiert je nach Einsatzort (Entwicklung, Test, Produktion).
Warum ist das wichtig?
- Wiederverwendbarkeit: Gleicher Code für mehrere Umgebungen
- Flexibilität: Konfiguration ändert sich, ohne den Container neu zu bauen
- Sicherheit: Sensible Einstellungen nicht fest im Code verankert
📦 Methoden der Konfigurationsverwaltung in Docker
1. Umgebungsvariablen (Environment Variables)
Umgebungsvariablen sind der einfachste und flexibelste Weg, Konfigurationen in einen Container zu bringen.
Beispiel:
docker run -e DB_HOST=localhost -e DB_PORT=5432 myapp
Oder in einer docker-compose.yml
:
services:
web:
image: myapp
environment:
- DB_HOST=db
- DB_PORT=5432
Best Practice: Nutze .env
-Dateien, um Variablen auszulagern.
.env
-Datei:
DB_HOST=localhost
DB_PORT=5432
docker-compose.yml
:
env_file: .env
2. Mounts und Volumes für Konfigurationsdateien
Wenn deine Anwendung eine Konfigurationsdatei (z. B. .yaml
, .json
, .ini
) nutzt, kannst du sie beim Start als Volume mounten:
docker run -v $(pwd)/config.yaml:/app/config.yaml myapp
Vorteil: Die Datei bleibt außerhalb des Containers und kann leicht angepasst werden.
3. Docker Configs (nur mit Docker Swarm)
Docker Swarm erlaubt es, Konfigurationsdateien direkt als „Config Objects“ im Cluster zu verwalten.
docker config create my_config ./config.yaml
Anschließend im Service:
docker service create \
--name myapp \
--config source=my_config,target=/app/config.yaml \
myimage
🔐 Teil 2: Secrets Handling – Der sichere Umgang mit sensiblen Daten
Was sind „Secrets“?
Secrets sind sensible Daten, die nicht im Klartext im Code oder in Konfigurationsdateien stehen sollten. Dazu zählen:
- Datenbank-Passwörter
- API-Schlüssel
- Tokens
- SSH-Keys
❌ Was du NICHT tun solltest:
- Secrets in Git repos pushen
- Secrets in Umgebungsvariablen dauerhaft speichern
- Secrets ins Dockerfile schreiben (
ENV SECRET=...
)
✅ Best Practices für Secrets Handling
1. Docker Secrets (in Swarm Mode)
Wenn du Docker Swarm nutzt, kannst du Secrets direkt als Objekte verwalten.
Beispiel:
echo "supergeheimespasswort" | docker secret create db_password -
Dann den Service starten mit:
docker service create \
--name myapp \
--secret db_password \
myimage
Im Container erscheint das Secret als Datei unter:
/run/secrets/db_password
Deine App kann den Inhalt dieser Datei zur Laufzeit lesen.
2. Externe Secret Stores nutzen
In größeren Systemen oder Kubernetes-Umgebungen ist es empfehlenswert, einen zentralen Secrets Manager zu verwenden:
- HashiCorp Vault
- AWS Secrets Manager
- Azure Key Vault
- 1Password Secrets Automation
Diese Systeme ermöglichen:
- Versionsverwaltung
- Zugriffskontrolle (RBAC)
- Audit Logs
- Automatische Rotation von Secrets
3. .dockerignore und Build Hygiene
Wenn du z. B. secrets.json
lokal hast, vergiss nicht, diese Datei in .dockerignore
aufzunehmen:
secrets.json
.env
*.key
So verhinderst du, dass sensible Daten ungewollt in Images gelangen.
🧠 Zusätzlicher Tipp: Multi-Stage Builds & Build-Time Secrets
Docker bietet Multi-Stage Builds, mit denen du Secrets nur im Build-Prozess verwenden kannst – sie landen nicht im finalen Image.
FROM node:18 AS builder
COPY secret.key /tmp/secret.key
RUN build-my-app --key /tmp/secret.key
FROM node:18
COPY --from=builder /app /app
Dabei wird die secret.key
nur im builder
verwendet – sie taucht nicht im finalen Image auf.
🧾 Fazit
Gutes Configuration Management und sicherer Umgang mit Secrets sind essentielle Grundlagen für stabile, wartbare und sichere Container-Anwendungen.
Merke dir:
- Konfiguration = flexibel, austauschbar
- Secrets = sensibel, geschützt
Docker bietet viele Möglichkeiten, beides sauber zu trennen und professionell zu verwalten – man muss sie nur kennen und nutzen.
Wenn du möchtest, kann ich dir gerne eine vollständige Projektstruktur mit Beispielen für .env
, docker-compose.yml
, Secret-Files und einem kleinen Node- oder Python-Service bauen. Sag einfach Bescheid!