Saltar al contenido
Curso Docker y Laravel Sail desde cero
08/10 Laravel Sail por dentro Personalizar el Dockerfile de Laravel Sail con sail:publish y añadir Redis con sail:add
Tu lectura Quedan 15 min
Lección 8 de 10 · Laravel Sail por dentro

Personalizar el Dockerfile de Laravel Sail con sail:publish y añadir Redis con sail:add

15 min de lectura Docker Engine 29.8

Hola, bienvenido. En esta lección vamos a abrir la imagen de Sail y a añadir un servicio a sail-app. Para personalizar el Dockerfile de Laravel Sail hay que publicarlo con sail artisan sail:publish, que copia los archivos de la imagen a una carpeta docker/ del proyecto y cambia el compose.yaml para construir desde ahí. Y para añadir un servicio, sail artisan sail:add redis escribe su bloque en el compose.yaml y ajusta el .env. Vamos a hacer las 2 cosas: leer el Dockerfile con lo que ya sabes, cambiar un valor de su php.ini y añadir Redis.

Publicar los archivos de Sail con sail:publish

¿Por qué publicar? Hasta ahora, el build.context del compose.yaml apunta a vendor/laravel/sail/runtimes/8.5, dentro de vendor/. Ahí no conviene tocar nada, porque es una carpeta que gestiona Composer, y el próximo composer update que actualice Sail sobrescribiría tus cambios sin avisarte. sail:publish copia esos archivos a tu proyecto, donde sí son tuyos:

Terminal
sail artisan sail:publish
Salida
INFO Publishing [sail-docker] assets. Copying directory [vendor/laravel/sail/runtimes] to [docker] .. DONE INFO Publishing [sail-database] assets. Copying directory [vendor/laravel/sail/database] to [docker] .. DONE

Fíjate en que copia 2 carpetas de vendor/laravel/sail: los runtimes, que son los archivos de la imagen para cada versión de PHP, y los scripts de las bases de datos. Así queda docker/:

Estructura
docker/
├── 8.0/ … 8.4/ las otras versiones de PHP
├── 8.5/
│ ├── Dockerfile
│ ├── php.ini
│ ├── start-container
│ └── supervisord.conf
├── mariadb/
├── mysql/
│ └── create-testing-database.sh
└── pgsql/

Nosotros solo usamos docker/8.5 y docker/mysql. El resto no molesta, y si algún día cambias de versión de PHP, ya lo tienes a mano.

El comando también ha cambiado 2 rutas del compose.yaml: el build.context, que ahora es ./docker/8.5, y el script que crea la base de datos testing al inicializar MySQL, que se monta desde ./docker/mysql con el bind mount en /docker-entrypoint-initdb.d/ que ya usamos para el esquema de tasks/. Y vamos a hacer un cambio más por nuestra cuenta, que recomienda la documentación de Sail: darle a la imagen un nombre propio. ¿Por qué? Porque todos los proyectos con Sail y PHP 8.5 de tu máquina usan la imagen sail-8.5/app, y si construyes tu versión personalizada con ese nombre, los demás proyectos la usarán también la próxima vez que levanten sus contenedores. La llamamos sail-app/app:

sail-app/compose.yaml Modificado +3 −3
1services:
2 laravel.test:
3 build:
− context: './vendor/laravel/sail/runtimes/8.5'
+ context: './docker/8.5'
5 dockerfile: Dockerfile
6 args:
7 WWWGROUP: '${WWWGROUP}'
− image: 'sail-8.5/app'
+ image: 'sail-app/app'
9 extra_hosts:
10 - 'host.docker.internal:host-gateway'
11 ports:
37 MYSQL_EXTRA_OPTIONS: '${MYSQL_EXTRA_OPTIONS:-}'
38 volumes:
39 - 'sail-mysql:/var/lib/mysql'
− - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
+ - './docker/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
41 networks:
42 - sail
43 healthcheck:
Lo que queda de esta lección
  1. 02El Dockerfile de Sail leído con lo de la lección 3
  2. 03Cambiar un valor del php.ini y reconstruir
  3. 04Añadir Redis con sail:add
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.