PASO 1 → Crear el Dockerfile
VARIABLE 2: SERVIDOR WEB (las 2 opciones) Empezar rápido, proyectos chicos
Opción A — Apache (1 solo contenedor, todo integrado) ✅ Más simple
dockerfile:
FROM php:8.4-apache
# [CONSTANTE] Librerías de sistema
RUN apt-get update && apt-get install -y \
libzip-dev libpng-dev libjpeg-dev libfreetype6-dev unzip git curl \
&& rm -rf /var/lib/apt/lists/*
# [VARIABLE 3] Extensiones → cambia según tu BD (ver sección siguiente)
RUN docker-php-ext-install zip \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd opcache
# [CONSTANTE] Composer + tu proyecto
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . /var/www/html
# [SOLO APACHE] Apuntar a /public y activar rewrite
RUN sed -ri -e 's!/var/www/html!/var/www/html/public!g' \
/etc/apache2/sites-available/*.conf \
/etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf \
&& a2enmod rewrite
WORKDIR /var/www/html
RUN composer install --optimize-autoloader --no-dev \
&& chown -R www-data:www-data storage bootstrap/cache
EXPOSE 80
________________________________________________________________________________________
Opción B — Nginx + PHP-FPM (2 contenedores) ✅ Más profesional Producción, alto tráfico
Dockerfile (igual pero con FPM en vez de Apache):
FROM php:8.4-fpm-alpine
RUN apk add --no-cache libzip-dev libpng-dev icu-dev postgresql-dev
RUN docker-php-ext-install zip pdo_pgsql opcache
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . /var/www/html
WORKDIR /var/www/html
RUN composer install --optimize-autoloader --no-dev \
&& chown -R www-data:www-data storage bootstrap/cache
EXPOSE 9000
CMD ["php-fpm"]
______________________________________________________________________________________
docker/nginx/nginx.conf (solo existe en esta opción):
server {
listen 80;
index index.php index.html;
root /var/www/html/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass app:9000; # "app" = nombre del servicio
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
PASO 2 → Crear el .dockerignore
PASO 3 → Crear el docker-compose.yml
services:
app:
build: .
volumes:
- ./:/var/www/html
webserver: # ← contenedor extra que solo tiene Apache
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./:/var/www/html
- ./docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
PASO 4 → (solo si usas Nginx) crear nginx.conf
PASO 5 → Configurar el .env de Laravel
PASO 6 → Construir: docker-compose up -d --build
PASO 7 → Migrar: docker-compose exec app php artisan migrate
PASO 8 → Verificar: docker-compose exec app php -m
lo que siempre se repite
-.dockerignore vendor, node_modules, .git, .env
-Composer desde imagen oficial COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
-Tu proyecto dentro del contenedor COPY . /var/www/html
-Permisos Laravel chown -R www-data:www-data storage bootstrap/cache
-Instalar dependencias composer install --optimize-autoloader --no-dev
-Regla de oro BD DB_HOST = nombre del servicio en compose, NUNCA localhost
-Regla de oro extensiones apt instala librerías de sistema → docker-php-ext-install compila la extensión PHP
-Comando de construcción docker-compose up -d --build
-Comando de migración docker-compose exec app php artisan migrate
-Comando de verificación docker-compose exec app php -v / php -m
-Apache: activar rewrite a2enmod rewrite
-Nginx: enviar PHP a FPM fastcgi_pass app:9000
┌──────────────────────────────┐
VARIABLE 1 → │ Versión PHP (8.3 / 8.4) │
VARIABLE 2 → │ Servidor web (Apache/Nginx)│
VARIABLE 3 → │ Base de datos (MySQL/PgSQL/ │
│ SQLite) │
└──────────────────────────────┘
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter