14-Prueba y Verificación del Entorno Docker con Laravel
Prueba y Verificación del Entorno Docker con Laravel
Introducción
En este tutorial verificaremos que todos los servicios configurados (PHP, Nginx y MySQL) funcionan correctamente juntos, probaremos la conexión a la base de datos y ejecutaremos migraciones de Laravel.
Paso 1: Levantar los Contenedores
1.1 Comando actualizado (Docker Compose V2)
# Limpiar la pantalla clear # Levantar servicios en segundo plano docker compose up -d
1.2 Verificar contenedores activos
docker compose ps
Salida esperada:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS laravel_app laravel-app "docker-php-entrypoi…" app 2 minutes ago Up 2 minutes 9000/tcp laravel_nginx nginx:alpine "/docker-entrypoint.…" nginx 2 minutes ago Up 2 minutes 0.0.0.0:8000->80/tcp laravel_db mysql:8.0 "docker-entrypoint.s…" db 2 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcp
Paso 2: Acceder a la Aplicación
2.1 Desde el navegador
Abrir en el navegador:
http://localhost:8000
O usando la IP local:
http://192.168.1.200:8000
Resultado esperado: La página de inicio de Laravel se muestra correctamente.
2.2 Verificar el estado de la aplicación
# Verificar que la aplicación responde curl -I http://localhost:8000
Paso 3: Acceder al Contenedor de MySQL
3.1 Identificar el contenedor de base de datos
docker compose ps | grep db
3.2 Entrar al contenedor de MySQL
# Método moderno con docker compose docker compose exec db bash
Nota: Si usas Docker Compose V2, el comando es docker compose exec (sin guión).
3.3 Conectar a MySQL desde el contenedor
# Dentro del contenedor mysql -u laravel -psecret
Alternativa con usuario root:
mysql -u root -prootsecret
3.4 Verificar bases de datos
SHOW DATABASES;
Salida esperada:
+--------------------+ | Database | +--------------------+ | information_schema | | laravel | | mysql | | performance_schema | | sys | +--------------------+
Paso 4: Ejecutar Migraciones de Laravel
4.1 Desde el host (recomendado)
# Ejecutar migraciones directamente docker compose exec app php artisan migrate
Salida esperada:
Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (xx.xxms) Migrating: 2014_10_12_100000_create_password_reset_tokens_table Migrated: 2014_10_12_100000_create_password_reset_tokens_table (xx.xxms) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (xx.xxms) Migrating: 2019_12_14_000001_create_personal_access_tokens_table Migrated: 2019_12_14_000001_create_personal_access_tokens_table (xx.xxms)
4.2 Para Laravel 11+ (actualización 2025-2026)
# Verificar migraciones específicas de Laravel 11+ docker compose exec app php artisan migrate --pretend
Paso 5: Verificar las Migraciones en MySQL
5.1 Entrar al contenedor de MySQL
docker compose exec db mysql -u root -prootsecret
5.2 Seleccionar la base de datos y listar tablas
USE laravel; SHOW TABLES;
Salida esperada:
+---------------------+ | Tables_in_laravel | +---------------------+ | cache | | cache_locks | | failed_jobs | | jobs | | migrations | | password_reset_tokens| | personal_access_tokens| | sessions | | users | +---------------------+
5.3 Verificar estructura de una tabla
DESCRIBE users;
Salida esperada:
+-------------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------------+------------------+------+-----+---------+----------------+ | id | bigint unsigned | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | email | varchar(255) | NO | UNI | NULL | | | email_verified_at | timestamp | YES | | NULL | | | password | varchar(255) | NO | | NULL | | | remember_token | varchar(100) | YES | | NULL | | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +-------------------+------------------+------+-----+---------+----------------+
Paso 6: Resolución de Problemas Comunes
⚠️ Error: "Unknown database 'laravel'"
Causa: La base de datos no se creó correctamente.
Solución:
# Verificar variables de entorno en el contenedor docker compose exec db env | grep MYSQL # Crear base de datos manualmente docker compose exec db mysql -u root -prootsecret -e "CREATE DATABASE IF NOT EXISTS laravel;"
⚠️ Error: "Access denied for user 'laravel'@'%'"
Causa: Credenciales incorrectas.
Solución:
# Verificar credenciales en .env cat .env | grep DB_ # Crear usuario manualmente docker compose exec db mysql -u root -prootsecret -e " CREATE USER IF NOT EXISTS 'laravel'@'%' IDENTIFIED BY 'secret'; GRANT ALL PRIVILEGES ON laravel.* TO 'laravel'@'%'; FLUSH PRIVILEGES; "
⚠️ Error: "Could not find driver"
Causa: Extensión PDO MySQL no instalada.
Solución:
# Verificar extensiones PHP instaladas docker compose exec app php -m | grep pdo
Paso 7: Comandos Útiles para Pruebas
7.1 Ver logs en tiempo real
# Logs de todos los servicios docker compose logs -f # Logs de un servicio específico docker compose logs app -f docker compose logs nginx -f docker compose logs db -f
7.2 Ejecutar comandos en el contenedor de la app
# Ver variables de entorno docker compose exec app env # Ver versión de PHP docker compose exec app php -v # Ver extensiones instaladas docker compose exec app php -m # Ejecutar comando de Artisan docker compose exec app php artisan route:list docker compose exec app php artisan optimize
7.3 Ver estadísticas de Docker
# Ver uso de recursos docker stats # Ver información del sistema docker system info # Ver uso de espacio en disco docker system df
Paso 8: Actualizaciones y Mejoras (2024-2026)
✅ Docker Compose V2
Todos los comandos usan la sintaxis sin guión:
# ❌ Obsoleto docker-compose up -d docker-compose exec app bash # ✅ Actual docker compose up -d docker compose exec app bash
✅ Nuevo comando: docker compose logs
# Ver logs con timestamps docker compose logs --timestamps # Ver últimos N líneas docker compose logs --tail=50
✅ Health Checks en servicios
Agregar al docker-compose.yml para verificar automáticamente:
db: healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 app: healthcheck: test: ["CMD", "php", "-r", "exit(0);"] interval: 30s timeout: 10s retries: 3
✅ Comando de prueba de conexión
# Verificar conexión a la base de datos desde la app docker compose exec app php artisan db:show # Verificar conexión con comando específico docker compose exec app php -r " try { new PDO('mysql:host=db;dbname=laravel', 'laravel', 'secret'); echo 'Conexión exitosa\n'; } catch (PDOException \$e) { echo 'Error: ' . \$e->getMessage() . '\n'; } "
Paso 9: Guardar Configuración como Plantilla
9.1 Crear un repositorio de plantilla
Para no repetir el proceso de configuración:
# Inicializar repositorio git init git add . git commit -m "Configuración base Docker + Laravel" # Crear repositorio en GitHub y subir git remote add origin https://github.com/tu-usuario/laravel-docker-template.git git push -u origin main
9.2 Estructura de plantilla recomendada
laravel-docker-template/ ├── .env.example # Variables de entorno de ejemplo ├── Dockerfile ├── docker-compose.yml ├── docker/ │ └── nginx/ │ └── app.conf ├── .gitignore └── README.md
9.3 Script de inicio rápido
Crear setup.sh:
#!/bin/bash # setup.sh - Script de inicialización # Copiar .env.example a .env cp .env.example .env # Levantar contenedores docker compose up -d # Instalar dependencias docker compose exec app composer install # Generar key docker compose exec app php artisan key:generate # Ejecutar migraciones docker compose exec app php artisan migrate echo "✅ Entorno listo! Accede a http://localhost:8000"
Comentarios
Publicar un comentario