Contenerización de aplicaciones PHP con Docker: guía completa para desarrolladores

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Por qué todo desarrollador PHP debería dominar Docker?

\n\n

¿Alguna vez te has encontrado con una situación en la que todo funciona perfectamente en local, pero en el servidor aparece la "pantalla blanca de la muerte"? ¿O, peor aún, cuando un colega dice: "A mí me funciona, actualiza composer" — y tu proyecto se convierte en una calabaza? ¿Te suena familiar? Entonces bienvenido al mundo de la contenerización de aplicaciones PHP con Docker.

\n\n

Docker no es solo una palabra de moda. Es una herramienta que cambiará para siempre tu enfoque del desarrollo. Imagina: ya no pierdes horas configurando el entorno. No necesitas instalar XAMPP, OpenServer ni sufrir con las versiones de PHP. Un docker-compose up — y tu aplicación vive en un mundo aislado y predecible. Y ese mundo se puede compartir con un colega, subir al servidor o incluso vender al cliente. En este artículo, desglosaremos la contenerización de aplicaciones PHP de la A a la Z: desde el Dockerfile básico hasta la optimización para producción.

\n\n

¿Qué es la contenerización y por qué es importante para PHP?

\n\n

La contenerización es una forma de empaquetar una aplicación junto con todas sus dependencias (PHP, extensiones, servidor web, base de datos) en un entorno aislado: un contenedor. A diferencia de las máquinas virtuales, los contenedores son ligeros, se inician en segundos y consumen un mínimo de recursos.

\n\n

Para PHP, esto es especialmente relevante. ¿Por qué? Porque una aplicación PHP típica es una combinación de: PHP-FPM, Nginx o Apache, MySQL/PostgreSQL, Redis, cola de tareas. Configurar manualmente este ecosistema en cada máquina es un infierno. Pero con Docker, describes toda la infraestructura en código (Infrastructure as Code) y la reproduces con un solo comando.

\n\n

Principales ventajas de la contenerización para el desarrollador PHP:

\n
    \n
  • Uniformidad de entornos: entorno local = staging = producción. Olvídate del "a mí me funciona".
  • \n
  • Aislamiento de dependencias: un proyecto en PHP 7.4 coexiste tranquilamente con un proyecto en PHP 8.3 en la misma máquina host.
  • \n
  • Despliegue rápido: basta con subir la imagen al registry y actualizar el contenedor en el servidor.
  • \n
  • Escalabilidad: es fácil añadir otro contenedor con PHP-FPM bajo carga.
  • \n
\n\n

Creando nuestro primer Dockerfile para una aplicación PHP

\n\n

Empecemos con lo más importante: el Dockerfile. Esta es la instrucción para construir la imagen de tu aplicación. Supongamos que tenemos una aplicación PHP simple en Laravel o Symfony (el principio es el mismo para cualquier framework).

\n\n
# Usamos la imagen oficial de PHP 8.2 con FPM\nFROM php:8.2-fpm-alpine\n\n# Instalamos dependencias del sistema\nRUN apk add --no-cache \\\n    nginx \\\n    supervisor \\\n    libpng-dev \\\n    libjpeg-turbo-dev \\\n    freetype-dev \\\n    && docker-php-ext-configure gd --with-freetype --with-jpeg \\\n    && docker-php-ext-install -j$(nproc) pdo_mysql gd opcache\n\n# Copiamos las configuraciones\nCOPY ./docker/nginx.conf /etc/nginx/http.d/default.conf\nCOPY ./docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf\nCOPY ./docker/php.ini /usr/local/etc/php/conf.d/custom.ini\n\n# Instalamos Composer\nCOPY --from=composer:latest /usr/bin/composer /usr/bin/composer\n\n# Copiamos el código fuente de la aplicación\nCOPY . /var/www/html\nWORKDIR /var/www/html\n\n# Instalamos las dependencias de PHP\nRUN composer install --no-dev --optimize-autoloader\n\n# Permisos de acceso\nRUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache\n\nEXPOSE 80\n\nCMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
\n\n

Desglosando paso a paso:

\n
    \n
  • FROM php:8.2-fpm-alpine — tomamos una imagen ligera basada en Alpine Linux. Pesa ~50 MB en lugar de los 200+ MB de las imágenes de escritorio.
  • \n
  • docker-php-ext-install — el comando mágico para instalar extensiones de PHP directamente dentro del contenedor.
  • \n
  • COPY --from=composer:latest — construcción multi-etapa. Tomamos el binario listo de Composer de la imagen oficial, sin necesidad de instalar PHP por separado.

Blogs

Book Recommendations