Docker es una herramienta poderosa para garantizar entornos consistentes y portátiles, y hoy vamos a usarla para crear una imagen ligera que nos permita instalar proyectos Laravel con facilidad.
En este tutorial, te mostraré cómo construir una imagen basada en Alpine Linux con PHP 8.3, Composer y el instalador de Laravel, optimizada para pesar muy pocas megas. Esta imagen es ideal para generar nuevos proyectos que luego puedes complementar con un entorno más completo usando docker-compose.yml.
¿Por qué usar Docker para el instalador de Laravel?
Portabilidad: Lleva tu instalador a cualquier máquina con Docker.
Ligereza: Usamos Alpine para mantener el tamaño bajo control.
Sin PHP: No dependemos de tener instalado PHP y composer en tu entorno local.
Permisos correctos: Los proyectos generados pertenecerán a tu usuario local, no a root.
Requisitos previos
– Docker instalado en tu sistema (puedes verificarlo con docker –version).
– Conocimientos básicos de terminal y comandos Docker.
– Un editor de texto para crear el Dockerfile.
Paso 1: Crear el Dockerfile
El corazón de este tutorial es el Dockerfile. Aquí está la versión optimizada que hemos perfeccionado:
# Usar una imagen base de PHP 8.3 con Alpine
FROM php:8.3-cli-alpine
# Instalar dependencias del sistema y extensiones de PHP
RUN apk add --no-cache \
git \
curl \
libpng \
libxml2 \
oniguruma \
postgresql-libs \
zip \
unzip \
nodejs \
npm && \
apk add --no-cache --virtual .build-deps \
libpng-dev \
libxml2-dev \
oniguruma-dev \
postgresql-dev \
&& docker-php-ext-install pdo_mysql pdo_pgsql mbstring exif pcntl bcmath gd && \
apk del .build-deps && \
rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
# Instalar Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Configurar Composer para el usuario appuser
ARG USER_ID=1000
ARG GROUP_ID=1000
RUN addgroup -g ${GROUP_ID} appgroup && \
adduser -u ${USER_ID} -G appgroup -s /bin/sh -D appuser && \
mkdir -p /home/appuser/.composer && \
chown -R appuser:appgroup /home/appuser
# Cambiar al usuario appuser antes de instalar Composer globalmente
USER appuser
ENV COMPOSER_HOME=/home/appuser/.composer
ENV PATH="${COMPOSER_HOME}/vendor/bin:${PATH}"
# Instalar laravel/installer globalmente
RUN composer config -g process-timeout 600 && \
composer global require laravel/installer --prefer-dist --no-progress --ignore-platform-reqs
# Establecer el directorio de trabajo
WORKDIR /app
# Comando por defecto
CMD ["sh"]
¿Qué hace este Dockerfile?
– Usa PHP 8.3 sobre Alpine para mantenerlo ligero.
– Instala Node.js y npm por si necesitas manejar assets frontend al crear el proyecto.
– Incluye extensiones de PHP como pdo_pgsql y gd para compatibilidad con Laravel.
– Configura un usuario (appuser) con tu UID/GID para evitar problemas de permisos.
– Instala el instalador de Laravel globalmente con Composer.
Paso 2: Construir la Imagen
Con el Dockerfile listo, construye la imagen ejecutando este comando en el mismo directorio:
docker build --build-arg USER_ID=$(id -u) --build-arg GROUP_ID=$(id -g) -t laravel-installer-alpine .
–build-arg USER_ID=$(id -u) y GROUP_ID=$(id -g): Ajustan los permisos al usuario de tu sistema.
-t laravel-installer-alpine: Etiqueta la imagen para identificarla fácilmente.
Paso 3: Crear un Proyecto Laravel
docker run -it -v $(pwd):/app laravel-installer-alpine laravel new example-app
-v $(pwd):/app: Monta tu directorio actual en /app dentro del contenedor.
laravel new example-app: Crea un proyecto llamado example-app.
Paso 4 (Opcional): Hacerlo Global con un Alias en Zsh/bash
Si usas Zsh/bash y quieres simplificar el comando, puedes añadir un alias:
1. Edita tu archivo ~/.zshrc o ~/.bashrc
vim ~/.zshrc
o
vim ~/.bashrc
2. Añade esta línea al final:
alias laravel-new='docker run -it -v "$(pwd)":/app laravel-installer-alpine laravel new'
3. Recarga la configuración:
source ~/.zshrc
o
source ~/.bashrc
Ahora, simplemente escribe:
laravel-new example-app

Resultados
– Tamaño: ~200 MB, optimizado con Alpine.
– Funcionalidad: Genera proyectos Laravel listos para usar con docker-compose.yml.
– Permisos: Archivos creados con tu usuario local.
Puedes verificar las versiones incluidas
docker run -it laravel-installer-alpine php -v
docker run -it laravel-installer-alpine node -v
docker run -it laravel-installer-alpine npm -v
Conclusión
Con este enfoque, tienes un instalador de Laravel ligero, portable y fácil de usar. Es perfecto para iniciar proyectos que luego puedes expandir con un entorno completo (PHP-FPM, Nginx, MySQL/PostgreSQL, etc.) usando docker-compose.yml. ¿Lo has probado? ¡Cuéntame cómo te fue en los comentarios o compárteme tu propio Dockerfile optimizado!