2.5 KiB
2.5 KiB
Optimierungsvorschläge für die Docker-Compose Umgebung
ToDo-Liste
-
Datenbank Passwörter & Secrets absichern
- Datenbankpasswörter nicht im Klartext in der YAML speichern, sondern
secrets-Mechanismus verwenden. .envWerte für Datenbanken statt statischer Angaben verwenden.- Beispiel:
MYSQL_ROOT_PASSWORD_FILEundMYSQL_PASSWORD_FILEsetzen und Secrets einbinden.
- Datenbankpasswörter nicht im Klartext in der YAML speichern, sondern
-
Performance & Caching verbessern
cache_fromundcache_toim Build-Prozess (BuildKit) einrichten.- Für PHP einen dedizierten Volume für den Composer-Cache nutzen.
- Nginx-Cache als eigenes Volume deklarieren.
- Die Vendor-Ordner aus Mounts ausschließen oder gesondert berücksichtigen, damit lokale Änderungen keine Build-Optimierungen verhindern.
-
Netzwerk- und Bind-Mounts optimieren
- Bei Nginx nur das Public-Verzeichnis (
public/) einbinden, nicht das gesamte Projektverzeichnis. - Nicht benötigte Verzeichnisse (wie z.B.
vendor/) explizit ausschließen. - Healthchecks und Startbedingungen konsistent definieren.
- Bei Nginx nur das Public-Verzeichnis (
-
Image-Versionen festlegen
- Keine
latest-Images nutzen, sondern möglichst immer eine feste Version angeben (z.B.mariadb:11.3stattmariadb:latest). - Gilt auch für Redis, PHP und weitere Services.
- Keine
-
Ressourcenlimits setzen
deploy.resourcesfür Speicher und CPU bei allen Services, nicht nur beim Worker.
-
Security-Best-Practices
- Nicht produktive Ports (z.B. bei Entwicklung) durch
.envvariabel und gezielt auf localhost begrenzen. - Feste Netzwerkbereiche und eigene Netzwerke für sensible Kommunikation (z.B. Backend, Cache).
- Nicht produktive Ports (z.B. bei Entwicklung) durch
-
Multi-Stage Builds in Dockerfiles nutzen
- Die Images im PHP- und Worker-Bereich sollten über Multi-Stage-Builds möglichst klein gehalten werden (z.B.
FROM php:X-cli AS base, dann Production-Image).
- Die Images im PHP- und Worker-Bereich sollten über Multi-Stage-Builds möglichst klein gehalten werden (z.B.
-
Environment-Konfiguration für Dev/Prod trennen
- Eine
docker-compose.override.ymlfür Entwicklung mit vollem Source-Mount und Debug-Konfiguration anlegen. - Für Produktion keine Source-Mounts, keine Debug-Variablen, optimierte Settings.
- Eine
-
Log-Rotation aktivieren
- Logging-Driver auf
json-fileeinstellen und Optionen für Größe/Rotation setzen.
- Logging-Driver auf
-
Monitoring & Healthchecks
- Für alle Services sinnvolle Healthchecks ergänzen.
- (Optional) Monitoring und/oder Alerting ergänzen.
Tipp: Die oben stehenden Punkte können Schritt für Schritt umgesetzt und pro optimiertem Bereich abgehakt werden.