0Pricing
PHP Academy · Lección

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/cache

Compilació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=mysql

Comandos 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:work

Comprobaciones 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 1

Compilació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.0

Implementació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

  1. Configuración de Nginx y PHP-FPM
  2. Variables de entorno y archivos .env
  3. Despliegue con GitHub Actions
  4. Contenerización de una aplicación PHP
← Volver a PHP Academy