Logo de Schweis
Schweis
Volver al blog
DevOps 2026-01-30

Cómo optimizar los contenedores Docker para aplicaciones PHP de alto rendimiento

Cómo optimizar los contenedores Docker para aplicaciones PHP de alto rendimiento

Contenerización bien hecha

Docker ha revolucionado el despliegue, pero el simple hecho de envolver una aplicación lenta en un contenedor solo te da un contenedor lento. En Schweis, tratamos nuestro `Dockerfile` como una parte crítica de nuestra base de código. Optimizar Docker para PHP no es solo una cuestión de tamaño de archivo; es una cuestión de eficiencia en tiempo de ejecución, seguridad y velocidad de construcción.

1. Elección de la imagen base

Siempre empezamos con `alpine`. La imagen `php:8.3-fpm-alpine` es nuestro estándar de oro. Proporciona una superficie de ataque mínima. Menos bibliotecas significan menos vulnerabilidades (CVE). Nos obliga a ser explícitos sobre exactamente qué bibliotecas instalamos, evitando que el "bloatware" se cuele en producción.

2. Ajuste de OpCache

PHP es un lenguaje interpretado, lo que significa que compilar los scripts en cada petición es un desperdicio de ciclos de CPU. En nuestras configuraciones de contenedores, ajustamos OpCache de forma agresiva:


opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

Esta configuración garantiza que el código de nuestra aplicación se compile una vez y permanezca en memoria. Para un sitio con mucha lectura, como un blog, esto reduce los tiempos de respuesta a velocidades similares a las de los archivos estáticos.

3. Construcciones multietapa y caché de capas

Confiamos en las construcciones multietapa (multi-stage builds) para mantener nuestras imágenes de producción impecables. Las herramientas de construcción y las dependencias de desarrollo viven en una etapa de "constructor" (builder) y nunca llegan a la imagen final. También ordenamos cuidadosamente los comandos del `Dockerfile`. Copiar los archivos de asılılık antes del código fuente garantiza que la caché de capas de Docker no reinstale todo cada vez que cambiamos una línea de CSS.

Contextos de seguridad

Nunca ejecutamos contenedores como root. Nuestros Dockerfiles cambian explícitamente a `www-data` o a un usuario personalizado. Utilizamos sistemas de archivos de solo lectura siempre que es posible y eliminamos todos los privilegios (capabilities) excepto los estrictamente necesarios. En un entorno de alta seguridad, el límite del contenedor es la última línea de defensa; lo convertimos en una fortaleza.

Schweis Team

Schweis Project

Collective Intelligence