Cómo Crear una Imagen Docker Ligera para el Instalador de Laravel

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!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *