Saltar al contenido
Curso Docker y Laravel Sail desde cero
04/10 Dockerizar una aplicación PHP a mano Nginx, PHP-FPM y MySQL en Docker Compose: compose.yaml, healthcheck y .env
Tu lectura Quedan 11 min
Lección 4 de 10 · Dockerizar una aplicación PHP a mano

Nginx, PHP-FPM y MySQL en Docker Compose: compose.yaml, healthcheck y .env

11 min de lectura Docker Engine 29.8

Hola, bienvenido. Docker Compose describe en un solo archivo, compose.yaml, todos los contenedores de un proyecto y cómo se relacionan. Para una aplicación PHP son 3 servicios: PHP-FPM con nuestra imagen, Nginx delante para recibir las peticiones HTTP y MySQL para los datos, cada uno con sus puertos, sus variables y su orden de arranque. Con docker compose up -d se levantan los 3 a la vez.

En esta lección vamos a escribir ese compose.yaml para tasks, con la configuración de Nginx, el healthcheck de MySQL y las credenciales en un .env, y al terminar vamos a ver por fin la aplicación respondiendo con sus tareas.

Por qué Docker Compose

Con lo que vimos en la lección de comandos básicos podríamos levantar el stack a mano: un docker network create para que los contenedores se vean, un docker run para MySQL con 4 variables de entorno, otro para PHP con las suyas y otro para Nginx con su puerto y su configuración. Funciona, pero es una ristra de comandos larga que tienes que repetir igual cada vez, en el mismo orden y sin equivocarte en ninguna opción.

Compose convierte esa ristra en un archivo. Cada contenedor es un servicio con su configuración, y el comando docker compose lee el archivo y se encarga de crear la red, construir las imágenes y arrancar los contenedores en el orden correcto. Compose sigue aceptando el nombre antiguo, docker-compose.yml, pero el preferido es compose.yaml, que es el que usa Laravel Sail.

Vamos a ir por partes. Primero PHP y Nginx, para ver que se hablan, y después MySQL. Empezamos por la configuración de Nginx, en docker/nginx/default.conf:

tasks/docker/nginx/default.conf Nuevo +14
1server {
2 listen 80;
3 root /var/www/html/public;
4
5 location / {
6 try_files $uri /index.php$is_args$args;
7 }
8
9 location ~ \.php$ {
10 fastcgi_pass app:9000;
11 include fastcgi_params;
12 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
13 }
14}

Nginx escucha en el puerto 80 y busca los archivos en /var/www/html/public. Cualquier ruta que no sea un archivo que exista acaba en index.php, y todo lo que termina en .php se lo pasa a PHP-FPM por FastCGI. Fíjate en fastcgi_pass app:9000: app es el nombre del servicio de PHP que vamos a definir en Compose, y 9000 el puerto en el que escucha PHP-FPM, como vimos en la lección anterior. La línea de SCRIPT_FILENAME le dice a PHP-FPM qué archivo ejecutar, y hay que ponerla a mano porque el fastcgi_params que trae la imagen de Nginx no la incluye.

Lo que queda de esta lección
  1. 02PHP y Nginx en el compose.yaml
  2. 03MySQL con su healthcheck
  3. 04Las credenciales en el .env
  4. 05Levantar el stack y cargar el esquema
  5. 06Connection refused o Access denied
Sigue leyendo gratis Este curso es gratuito. Déjanos tu email y te enviamos un enlace para leerlo entero, junto con el resto de cursos gratuitos.

¿Ya lo habías pedido o entras desde otro dispositivo? Escribe el mismo email: recuperas tu acceso y tu avance.