Docker Tutorial: Configuration Management & Secrets Handling verständlich erklärt

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!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert