12. Finalizar el archivo de docker-compose
Vamos a finalizar la configuración de nuestro archivo docker-compose.yml y configurar MySQL para nuestra aplicación Laravel.
Detener contenedores existentes
Primero, asegurémonos de que no haya contenedores corriendo:
docker psSi vemos el contenedor que creamos anteriormente ejecutándose, lo detenemos:
docker compose downVerificamos que esté abajo:
docker psCrear estructura de directorios
Creamos los directorios necesarios:
mkdir docker-compose
cd docker-compose
mkdir nginxConfigurar Nginx
Dentro del directorio nginx, creamos el archivo de configuración:
nano docker-compose/nginx/app.laravel.confCopiamos la siguiente configuración (boilerplate de la documentación oficial de Laravel):
server {
listen 80;
server_name localhost;
root /var/www/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}Puntos importantes a verificar:
Puerto: 80
Root:
/var/www/publicPuerto PHP-FPM: 9000
Configurar docker-compose.yml
Editamos nuestro archivo principal:
nano docker-compose.ymlAgregamos los servicios de nginx y MySQL:
services:
# Servicio de la aplicación PHP (existente)
app:
# ... configuración existente ...
# Servicio de Nginx
nginx:
image: nginx:alpine
restart: unless-stopped
ports:
- "8000:80"
volumes:
- .:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d
networks:
- laravel
# Servicio de base de datos MySQL
db:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
networks:
- laravel
networks:
laravel:
driver: bridgeConfigurar variables de entorno
Actualizamos el archivo .env:
nano .envDB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel_database
DB_USERNAME=laravel
DB_PASSWORD=secretNota importante: El DB_HOST debe ser db (el nombre del servicio en docker-compose), no localhost.
Verificación final
Nuestra configuración final de docker-compose.yml debería verse similar a esta:
services:
app:
build:
context: .
dockerfile: Dockerfile
image: laravel-app
container_name: laravel-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- .:/var/www
networks:
- laravel
nginx:
image: nginx:alpine
container_name: nginx-server
restart: unless-stopped
ports:
- "8000:80"
volumes:
- .:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d
networks:
- laravel
db:
image: mysql:8.0
container_name: mysql-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
networks:
- laravel
networks:
laravel:
driver: bridgePróximos pasos
En el siguiente video probaremos si toda esta configuración funciona correctamente. Si hay algún error, lo identificaremos y corregiremos.
Resumen de lo configurado:
✅ Servicio de aplicación PHP
✅ Servicio de Nginx (puerto 8000 expuesto)
✅ Servicio de MySQL 8.0
✅ Red bridge "laravel" para comunicación entre contenedores
✅ Variables de entorno configuradas
✅ Archivo de configuración de Nginx
¡Listo para probar nuestra aplicación Laravel con Docker! 🚀
Comentarios
Publicar un comentario