¿Sigues usando WAMP? Docker ya te espera en la barra
En serio, ¿aún levantas WAMP?
WAMP, XAMPP o MAMP nos sacaron de apuros cuando trasteábamos PHP en 2010, pero hoy son como bares que sirven refresco sin gas. ¿Quieres una stack parecida a producción en local? ¿Versionar la configuración? ¿Evitar la ruleta de puertos cuando llevas tres proyectos? Docker marcó todas las casillas mientras tu instalador de Apache seguía parpadeando en rojo.
Las molestias eternas de WAMP/XAMPP/MAMP
- Entornos congelados: cada paquete impone su versión de PHP, MySQL y Apache. ¿Quieres probar PHP 8.3? Prepárate para romper los otros tres proyectos.
- Configuración imposible de compartir: ¿tu plan es pegar
.inien Slack para el equipo o el CI? Tierno, inútil. - Sin aislamiento: activas un módulo de Apache y se filtra a todos los proyectos. Hola, bugs fantasma.
Docker cambia todas las reglas
- Stacks descritas en YAML: un
compose.ymlversionado recrea el entorno en cualquier portátil o pipeline CI con un solo comando. - Servicios aislados: cada contenedor trae su versión exacta de PHP, Redis, PostgreSQL, lo que necesites. Mezcla, combina, borra.
- Observabilidad de serie: logs, métricas, healthchecks… no más adivinar si
mysqlddespertó. - Portabilidad: Linux, macOS, Windows, ARM, x86… Docker sólo exige un kernel capaz de lanzar contenedores.
Compose moderno, no más docker-compose.yml polvorientos
La doc oficial lo repite: usa compose.yml, olvida el campo version, guarda variables en .env y describe los servicios de forma declarativa. Aquí tienes un snippet listo:
yaml
Detalles clave:
namefacilita la lectura dedocker compose lsy los logs.pull_policy: alwaysevita quedarte con imágenes obsoletas cuando evoluciona la stack.depends_onconcondition: service_healthyespera a que MariaDB esté lista antes de arrancar FrankenPHP.- Declarar los volúmenes al final mantiene tus datos de MySQL vivos entre despliegues.
FrankenPHP, el relevo insolente de Apache
¿Por qué encadenarte a Apache o Nginx dentro de un contenedor si FrankenPHP combina SAPI moderna, worker HTTP y soporte nativo de Symfony/Laravel?
- Rendimiento: modo worker persistente, OPCache precalentado, HTTP/2 y pronto HTTP/3.
- Simplicidad: nada de 14 archivos
.conf; sueltas la app en/app, expones el puerto 80 y listo. - Integración dev: olvida
symfony serve; FrankenPHP mantiene el ciclo de recarga.
CI/CD sin el mantra “en mi máquina funciona”
Ejecuta docker compose run --rm lint para comprobar el código y despliega la misma stack en producción. Sin entornos mutantes ni cacerías del puerto 3306.
Cierre cínico pero honesto
Puedes seguir acariciando el icono verde de WAMP si disfrutas sufrir. Pero si quieres entregar más rápido, versionar tu infra y montar combinaciones absurdas (Redis + Meilisearch + FrankenPHP + PostgreSQL) en tres líneas, Docker ya te espera. Tira los instaladores prehistóricos, versiona tu compose.yml y vuelve cuando tu onboarding dure cinco minutos.