Du nutzt noch WAMP? Docker wartet längst an der Theke
Ernsthaft, du startest immer noch WAMP?
WAMP, XAMPP oder MAMP waren ok, als wir 2010 mit PHP spielten, aber heute wirken sie wie Kneipen mit abgestandenem Cola. Du willst lokal eine produktionsnahe Stack? Die Config versionieren? Die Hafenlotterie beenden, wenn drei Projekte gleichzeitig laufen? Docker hat all das gelöst, während dein Apache-Installer weiter rot blinkte.
Die Dauerprobleme von WAMP/XAMPP/MAMP
- Eingefrorene Umgebungen: jedes Bundle diktiert Versionen für PHP, MySQL und Apache. PHP 8.3 testen? Viel Spaß beim Sprengen der anderen Projekte.
- Unteilbare Config:
.ini-Dateien im Slack teilen – süß, aber sinnlos für Team und CI. - Null Isolation: ein Apache-Modul aktivierst du einmal und jeder Stack fängt sich die Nebenwirkungen ein. Hallo Geisterbugs.
Docker räumt auf
- Stacks als YAML: ein versioniertes
compose.ymlstellt das Umfeld auf jedem Laptop oder CI-Pipeline mit einem Kommando wieder her. - Dienst-Isolation: jeder Container bringt exakt seine Version von PHP, Redis, PostgreSQL etc. mit. Mischen, tauschen, entsorgen.
- Beobachtbarkeit ab Werk: Logs, Metriken, Healthchecks – kein Rätselraten mehr, ob
mysqldwach ist. - Portabilität: Linux, macOS, Windows, ARM, x86… Docker ist es egal, solange der Kernel Container versteht.
Modernes Compose statt staubigem docker-compose.yml
Die Docker-Doku hämmert es ein: Datei heißt compose.yml, kein version-Feld, Variablen in .env, Services deklarativ beschreiben. Hier ein fertiger Ausschnitt:
yaml
Merke dir:
namemachtdocker compose lsund Logs lesbar.pull_policy: alwaysverhindert vergessene Alt-Images beim Update der Stack.depends_onpluscondition: service_healthywartet, bis MariaDB bereit ist, bevor FrankenPHP startet.- Die unten deklarierten Volumes retten deine MySQL-Daten beim Redeploy.
FrankenPHP ersetzt Apache mit einem Grinsen
Warum Apache oder Nginx in Container schleppen, wenn FrankenPHP eine moderne SAPI, HTTP-Worker und nativen Symfony/Laravel-Support vereint?
- Performance: persistenter Worker-Modus, vorgewärmter OPCache, HTTP/2 und bald HTTP/3.
- Einfachheit: keine 14
.conf-Dateien; App nach/app, Port 80 freigeben, fertig. - Dev-Integration: Hot Reload ohne
symfony serve; FrankenPHP hält die Schleife am Leben.
CI/CD ohne „läuft auf meinem Rechner“-Zauber
docker compose run --rm lint prüft den Code, und du deployst exakt dieselbe Stack in Produktion. Keine mutierenden Umgebungen, keine Hafen-Schnitzeljagd nach Port 3306.
Zynisches, aber ehrliches Fazit
Streichle weiter das grüne WAMP-Icon, wenn Schmerz dein Hobby ist. Wenn du jedoch schneller liefern, Infra versionieren und absurde Kombinationen (Redis + Meilisearch + FrankenPHP + PostgreSQL) in drei Zeilen hochziehen willst, wartet Docker längst. Schmeiß die prähistorischen Installer weg, versioniere dein compose.yml und freu dich auf Onboardings in fünf Minuten.