Contenerización de una aplicación PHP
Cree una imagen de Docker para PHP + Nginx y orquéstela con Docker Compose.
Contenerización de una aplicación PHP es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.
¿Por qué utilizar Docker para PHP?
Docker empaqueta su aplicación y sus dependencias en una imagen de contenedor portátil. La misma imagen se ejecuta de forma idéntica en desarrollo, CI y producción, lo que elimina los problemas de «en mi máquina sí funciona».
Dockerfile básico para PHP
Un Dockerfile mínimo para una aplicación PHP + Nginx.
# Dockerfile
FROM php:8.3-fpm-alpine
# Install extensions
RUN docker-php-ext-install pdo pdo_mysql opcache
# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
COPY . .
RUN chown -R www-data:www-data /app/storage /app/bootstrap/cacheCompilación en varias etapas
Utilice compilaciones en varias etapas para mantener pequeña la imagen final: instale las herramientas de compilación en una etapa y copie únicamente los artefactos a la imagen final.
# Stage 1: builder
FROM composer:2 AS builder
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
# Stage 2: runtime
FROM php:8.3-fpm-alpine
WORKDIR /app
COPY --from=builder /app/vendor ./vendor
COPY . .docker-compose.yml
Orqueste varios servicios (PHP-FPM, Nginx, MySQL y Redis) con Docker Compose.
# docker-compose.yml
services:
app:
build: .
volumes:
- .:/app
nginx:
image: nginx:alpine
ports: ["80:80"]
volumes:
- .:/app
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
mysql:
image: mysql:8
environment:
MYSQL_DATABASE: myapp
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
db_data:Configuración del contenedor de Nginx
Monte una configuración personalizada de Nginx para establecer un proxy hacia las solicitudes de PHP-FPM.
# docker/nginx.conf
server {
listen 80;
root /app/public;
index index.php;
location / { try_files $uri /index.php?$query_string; }
location ~ \.php$ {
fastcgi_pass app:9000; # service name from docker-compose
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}Variables de entorno
Pase variables de entorno a los contenedores; nunca incluya secretos directamente en las imágenes.
# docker-compose.yml:
services:
app:
env_file: .env
# or explicit:
environment:
- APP_ENV=production
- DB_HOST=mysqlComandos de Laravel Artisan
Ejecute comandos de Artisan dentro del contenedor.
$ docker compose exec app php artisan migrate
$ docker compose exec app php artisan config:cache
$ docker compose exec app php artisan queue:workComprobaciones de estado
Añada comprobaciones de estado para que los orquestadores (Kubernetes, ECS) sepan cuándo está listo el contenedor.
# Dockerfile:
HEALTHCHECK --interval=30s --timeout=5s \
CMD curl -f http://localhost/health || exit 1Compilación y publicación de imágenes
Compile y publique su imagen en un registro (Docker Hub, ECR, GHCR).
$ docker build -t myorg/myapp:1.0.0 .
$ docker push myorg/myapp:1.0.0Implementación en Kubernetes
En Kubernetes, defina un recurso Deployment y un recurso Service utilizando su imagen. Implemente nuevas versiones con kubectl set image o actualice el YAML y aplíquelo.
Refuerzo de la seguridad en producción
Prácticas recomendadas para Docker en producción: utilice un usuario que no sea root, un sistema de archivos raíz de solo lectura y una imagen base mínima (Alpine); no incluya dependencias de desarrollo, fije las etiquetas de las imágenes y busque CVE con docker scout.
Resumen
Cree un Dockerfile para PHP-FPM + Composer. Utilice docker-compose para el desarrollo local con servicios de Nginx, MySQL y Redis. En producción, use compilaciones en varias etapas, inyecte las variables de entorno y ejecute la aplicación mediante Kubernetes o ECS.
Comprobación rápida
¿Cuál es la principal ventaja de las compilaciones de Docker en varias etapas?
Preguntas frecuentes
¿La lección «Contenerización de una aplicación PHP» es gratis?
Sí — el texto completo de «Contenerización de una aplicación PHP» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Contenerización de una aplicación PHP»?
Cree una imagen de Docker para PHP + Nginx y orquéstela con Docker Compose. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar PHP Academy?
No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Contenerización de una aplicación PHP»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de PHP Academy?
Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Configuración de Nginx y PHP-FPM
- Variables de entorno y archivos .env
- Despliegue con GitHub Actions
- Contenerización de una aplicación PHP