Preview:
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)      │
                 └──────────────────────────────┘
   
  
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