Docker Compose-Setups optimieren
Was dieser Artikel über Compose-Optimierung behandelt
- Wie man Compose-Dateien übersichtlich hält.
- Overrides und Umgebungsvariablen.
- Healthchecks und Restart-Policies.
- Netzwerk- und Volume-Optimierung.
- Tipps für schnellere und sicherere Setups.
Einleitung: Docker Compose-Setups optimieren
Grosse Compose-Dateien werden schnell unübersichtlich. Mit der Zeit sammeln sich alte Umgebungsvariablen, ungenutzte Ports und veraltete Images an. Eine gute Compose-Struktur trennt Standard- und Umgebungs-Konfiguration, nutzt Healthchecks und hält die Dateien lesbar. Wer sein Setup gezielt optimiert, spart Zeit bei Updates und Fehlersuche.
Dieser Artikel zeigt bewährte Wege, Docker Compose-Setups zu verbessern.
Wichtige Begriffe
- Override-Datei:
docker-compose.override.yml. - .env: Datei mit Umgebungsvariablen.
- Healthcheck: Selbstüberprüfung des Containers.
- Depends_on: Startabfolge.
- Profiles: Auswahl von Diensten beim Start.
- Secrets: Sichere Verwaltung von Passwörtern.
- Templating: Variablen in Compose.
- Extends: Konfiguration teilen.
Basis- und Override-Dateien
# docker-compose.yml
services:
web:
image: nginx
ports:
- "80:80"
# docker-compose.override.yml
services:
web:
ports:
- "8080:80"
docker compose up lädt automatisch beide Dateien.
Umgebungsvariablen
.env:
APP_PORT=8080
DB_PASSWORD=geheim
services:
web:
ports:
- "${APP_PORT}:80"
db:
image: postgres
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
Healthchecks
services:
web:
image: nginx
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80"]
interval: 30s
timeout: 10s
retries: 3
Profilen
services:
test:
image: busybox
profiles:
- test
docker compose --profile test up -d
Restart-Policies
services:
db:
image: postgres
restart: unless-stopped
Ressourcenlimits
services:
app:
image: mein-app
deploy:
resources:
limits:
cpus: '1'
memory: 512M
Netzwerke sauber trennen
services:
web:
networks:
- frontend
db:
networks:
- backend
networks:
frontend:
backend:
internal: true
Volumes gezielt wählen
services:
db:
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Named Volumes statt Bind Mounts, wo möglich.
Tipps
- Ein Service pro Aufgabe.
- Klare Namen verwenden.
- Override-Dateien für Entwicklung/Produktion.
.env.examplefür Teams bereitstellen.- Nicht alle Services in einer Datei definieren.
- Healthchecks für kritische Dienste.
- Logging-Limits setzen.
- Versionen fixieren.
- Unnötige Umgebungsvariablen entfernen.
.envnicht ins Git einchecken.
Typische Stolpersteine
- Monolitische Compose-Dateien: Schwer wartbar.
- Fehlende .env: Container starten nicht.
- Keine Healthchecks: Ausfälle werden spät erkannt.
- Ports im Überfluss: Sicherheitslücken.
- Alte Image-Tags:
latestin Produktion. - Fehlende Limits: Container beanspruchen alles.
- Ungetestete Overrides: Konflikte beim Zusammenführen.
Weiterführende Links und Infos
- BotServ.de Docker Compose
- BotServ.de Docker Container-Neustarts
- BotServ.de Docker Ressourcenlimits
- BotServ.de Docker Healthchecks
FAQ: Docker Compose optimieren
Was ist eine Override-Datei?
Eine zusätzliche docker-compose.override.yml, die die Hauptdatei ergänzt.
Soll ich .env nutzen? Ja, für portierbare Konfiguration und geheime Werte.
Sind Healthchecks sinnvoll? Ja, besonders für kritische Dienste wie Datenbanken.
Wann Profiles verwenden? Wenn nicht immer alle Dienste gestartet werden sollen.
Was verbessert Netzwerk-Isolation? Getrennte Netzwerke für Frontend, Backend und Datenbank.
Quellen und weiterführende Literatur
- Compose File Reference: https://docs.docker.com/compose/compose-file/
- Compose Multiple Files: https://docs.docker.com/compose/multiple-compose-files/
Zusammenfassung: Docker Compose-Setups optimieren
Gut optimierte Compose-Setups nutzen Overrides, Umgebungsvariablen, Healthchecks, Ressourcenlimits und Netzwerk-Isolation. Profilen und klaren Benennungen machen Dateien übersichtlich. Versionierte Images, getestete .env-Dateien und saubere Netzwerke verbessern Sicherheit und Wartbarkeit. Wer regelmässig aufräumt, behält auch bei wachsender Anzahl an Containern den Überblick.


