Files
michaelschiemer/docker/DOCKER-TODO.md

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.
    • .env Werte für Datenbanken statt statischer Angaben verwenden.
    • Beispiel: MYSQL_ROOT_PASSWORD_FILE und MYSQL_PASSWORD_FILE setzen und Secrets einbinden.
  • Performance & Caching verbessern

    • cache_from und cache_to im 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.
  • Image-Versionen festlegen

    • Keine latest-Images nutzen, sondern möglichst immer eine feste Version angeben (z.B. mariadb:11.3 statt mariadb:latest).
    • Gilt auch für Redis, PHP und weitere Services.
  • Ressourcenlimits setzen

    • deploy.resources für Speicher und CPU bei allen Services, nicht nur beim Worker.
  • Security-Best-Practices

    • Nicht produktive Ports (z.B. bei Entwicklung) durch .env variabel und gezielt auf localhost begrenzen.
    • Feste Netzwerkbereiche und eigene Netzwerke für sensible Kommunikation (z.B. Backend, Cache).
  • 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).
  • Environment-Konfiguration für Dev/Prod trennen

    • Eine docker-compose.override.yml für Entwicklung mit vollem Source-Mount und Debug-Konfiguration anlegen.
    • Für Produktion keine Source-Mounts, keine Debug-Variablen, optimierte Settings.
  • Log-Rotation aktivieren

    • Logging-Driver auf json-file einstellen und Optionen für Größe/Rotation setzen.
  • 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.