Saltar al contenido
Curso Docker y Laravel Sail desde cero
07/10 Laravel Sail por dentro Laravel Sail en Docker: qué crea y su compose.yaml pieza a pieza
Tu lectura Quedan 12 min
Lección 7 de 10 · Laravel Sail por dentro

Laravel Sail en Docker: qué crea y su compose.yaml pieza a pieza

12 min de lectura Docker Engine 29.8

Hola, bienvenido. Empezamos la segunda sección del curso, y en esta lección vamos a crear un proyecto Laravel 13 con Laravel Sail y a abrir su compose.yaml pieza a pieza. Laravel Sail es Docker por debajo: un archivo compose.yaml con los servicios de tu aplicación y un script, vendor/bin/sail, que traduce sus comandos a docker compose. Si has montado tasks/ a mano en la primera sección, vas a reconocer casi todo lo que hay en ese archivo, y lo poco que cambia tiene un motivo que ya conoces.

Para seguir la lección necesitas lo mismo que hasta ahora: Docker en marcha y una terminal, que en Windows es la de WSL2, con el proyecto dentro de tu carpeta de Linux. No necesitas PHP ni Composer en tu máquina. Lo que sí necesitas son los puertos 80, 3306 y 5173 libres (el último es el de Vite), y tasks/ publica su MySQL en el 3306 desde la lección Redes y puertos en Docker Compose, y los comandos del día a día. Así que, si lo tienes levantado, páralo antes desde su carpeta:

Terminal
docker compose stop

Crear el proyecto con laravel.build

La forma oficial de crear un proyecto nuevo con Sail es un script que se descarga de laravel.build y se ejecuta con bash. Antes de lanzar cualquier curl | bash conviene leer lo que vas a ejecutar, y aquí además vas a reconocer lo que hace. Si quitas el | bash, curl te enseña el script en la terminal sin ejecutar nada:

Terminal
curl -s "https://laravel.build/sail-app?with=mysql"

Esta es la parte que nos interesa, tal como la devuelve en octubre de 2026:

Ejemplo Extracto del script de laravel.build
docker run --rm \
--pull=always \
-v "$(pwd)":/opt \
-w /opt \
laravelsail/php84-composer:latest \
bash -c "laravel new sail-app --no-interaction && cd sail-app && composer show laravel/sail 2>/dev/null || composer require laravel/sail --dev && php ./artisan sail:install --with=mysql "
cd sail-app
# Allow build with no additional services..
if [ "mysql" == "none" ]; then
./vendor/bin/sail build
else
./vendor/bin/sail pull mysql
./vendor/bin/sail build
fi

Fíjate en que no hay nada que no hayamos visto. Es un docker run --rm como los de la lección Comandos básicos de Docker: docker pull, docker run, docker ps, docker exec y docker logs: un contenedor efímero con PHP y Composer que monta tu carpeta actual en /opt con un bind mount, ejecuta laravel new, instala Sail con Composer y lanza sail:install --with=mysql, que escribe el compose.yaml y ajusta el .env. Ese contenedor lleva PHP 8.4, pero solo sirve para generar el proyecto: la aplicación correrá con la imagen de PHP 8.5 que construye Sail. Después, el script descarga la imagen de MySQL y construye la de la aplicación.

Antes de todo eso, el script comprueba con docker info que Docker está arrancado, y al final ejecuta chown -R $USER: . con sudo. ¿Por qué? Porque el contenedor ha creado todos los archivos como root, que es el problema de los archivos de root de la lección Volúmenes y bind mounts en Docker Compose: persistir MySQL y editar el código sin reconstruir. Por eso te pide la contraseña al terminar: para dejar el proyecto a tu nombre.

Con with=mysql le pedimos solo MySQL. Redis lo vamos a añadir en la siguiente lección con sail:add, para ver qué cambia en el archivo cuando se añade un servicio. Ahora sí, lo ejecutamos desde la carpeta donde tengas tasks/:

Terminal
curl -s "https://laravel.build/sail-app?with=mysql" | bash

La primera vez tarda unos minutos, porque descarga las imágenes y construye la de la aplicación. Si quieres ver la instalación con más detalle o con otros servicios, la tienes en el artículo Laravel Sail, dockeriza tu entorno de desarrollo Laravel (se abre en una pestaña nueva). Y si lo que tienes es un proyecto que ya existe, el script hace los mismos 2 pasos que harías tú: composer require laravel/sail --dev y php artisan sail:install, como cuenta Instalar Laravel Sail en un proyecto existente (se abre en una pestaña nueva).

Lo que queda de esta lección
  1. 02El alias sail y lo que ha aparecido en Docker
  2. 03El compose.yaml de Sail pieza a pieza
  3. 04Lo que Sail hace distinto: sin Nginx ni PHP-FPM
Sigue leyendo gratis Este curso es gratuito. Déjanos tu email y te enviamos un enlace para leerlo entero, junto con el resto de cursos gratuitos.

¿Ya lo habías pedido o entras desde otro dispositivo? Escribe el mismo email: recuperas tu acceso y tu avance.