Tutorial > Come eseguire Laravel in un container Docker tramite Laravel Sail

Come eseguire Laravel in un container Docker tramite Laravel Sail

Pubblicato il: 11 giugno 2021

Docker Laravel Sviluppo

Introduzione

Docker è uno strumento scelto da molti programmatori per via del supporto che offre nello sviluppo di applicazioni. Il tool permette, infatti, di creare dei containers che rendono le applicazioni indipendenti dall'ambiente di sviluppo o dal sistema operativo con cui vengono eseguite.

Docker ci viene in aiuto in combinazione con il framework Laravel. Nella guida potrai scoprire l'utilizzo di Sail, un pacchetto che ti permetterà di usare Laravel in versione dockerizzata, lasciando a lui il compito di creare un ambiente di sviluppo con Docker, senza dover creare manualmente i container.

L'ambiente creato fornirà in automatico una installazione di PHP, MySQL e Redis. Questo è un grande vantaggio se sei uno sviluppatore Laravel, perchè non dovrai preoccuparti di installare questi pacchetti sul tuo OS o controllare che essi siano correttamente aggiornati. Avrai infatti la possibilità di creare ed eliminare container compatibili con diverse versioni, per poterli adattare allo sviluppo che desideri per la tua applicazione.

Un altro vantaggio è la possibilità di condividere l'ambiente di sviluppo del progetto con i tuoi collaboratori, senza rendere necessaria l'installazione di altri software sul loro sistema operativo.

Con il pacchetto di Sail, avrai solo due file:

  • docker-compose.yml , che gestirà i containers per la tua applicazione;
  • Un file che servirà a definire le interazioni con i containers.

Pre-requisiti

L'unico requisito necessario per utilizzare Sail è avere installato Docker sul proprio sistema operativo. Se non hai già installato Docker e utilizzi Ubuntu, puoi seguire la nostra guida su Come installare Docker su Ubuntu 18.04.

Installazione e Configurazione di Sail

Comincia creando una nuova applicazione Laravel tramite il comando:

$ curl -s https://laravel.build/my_sailapplication | bash

Con questo codice, avrai creato un nuovo progetto Laravel in una directory chiamata, come nell'esempio, "my_sailapplication".

Ora, spostati nella directory del progetto:

$ cd new-sail-application

Ora, occorre lanciare Sail:

$ ./vendor/bin/sail up

Aggiungere Sail a una applicazione già esistente

Tramite il comando composer, ti sarà possibile aggiungere Sail a una applicazione già esistente. Per farlo, usa il comando:

$ composer require laravel/sail --dev

A installazione completata, puoi inserire il file docker-compose.yml di Sail nella tua directory di progetto, tramite il comando:

$ php artisan sail:install

Infine, come prima, lancia Sail:

$ ./vendor/bin/sail up

Analisi del tuo ambiente di sviluppo

I tre container principali che troverai nel tuo ambiente di sviluppo, riguarderanno i tre servizi installati di default con Sail: PHP, MySQL e Redis.

All'interno della directory di progetto, potrai trovare il file docker-compose.yml, già citato precedentemente. Questo file conterrà una sezione dedicata ai 3 servizi sopracitati: laravel.test (per il PHP), mysql e redis.

Iniziamo col vedere, passo passo, le configurazioni dei vari servizi.

MySQL

Nella configurazione del database, la prima voce in cui ti imbatterai è image, la quale indica l'immagine e la versione di MySQL che verrà istanziata nel tuo container.

Le immagini sono fornite da Docker Hub, una enorme libreria di immagini sul web che, qualora non conoscessi, ti consigliamo di visitare per esplorarne le possibilità e i dettagli.

Un'altra voce importante è ports, che serve a sincronizzare la porta del container con quella locale. Infatti, l'istruzione ${FORWARD_DB_PORT:-3306}:3306 servirà proprio a svolgere questa funzione.

Alla voce environment, troverai invece il database selezionato e le sue credenziali.

Ma la distruzione di un container e del suo ambiente, porterà alla distruzione dei dati persistenti come il database? La risposta, per fortuna, è no. Il docker salva i dati persistenti in un percorso esterno a cui poi i containers possono fare riferimento. Il vantaggio, quindi, è anche la possibilità di far riferire più containers alla stessa "banca dati".

I dati sono di solito salvati nei volumi. Nella istruzione volumes: - 'sailmysql:/var/lib/mysql' , sarà specificato l'uso di un volume di nome sailmysql per salvare i dati nella directory var/lib/mysql.

I servizi del tuo container dovranno, ovviamente, cooperare sulla stessa rete (in tal caso, quella di Sail.). il parametro network con la voce sail, indica proprio questo.

Infine, la voce healthcare specifica i comandi da lanciare per permettere al Docker di eseguire un controllo sul corretto funzionamento dei tuoi containers.

PHP

La sezione laravel.test è dedicata ai servizi collegati al linguaggio PHP.

Il primo parametro che incontri è build. Il parametro contiene il percorso a un file Docker, contenente le istruzioni per creare l'immagine che verrà istanziata.

Il parametro image punta all'immagine che verrà istanziata, creata dal parametro build. ports svolge la funzione di collegare il container e la porta locale.

In environments sono descritte le credenziali da usare nel codice PHP, volumes è usato per salvare nei volumi delle informazioni che debbano essere permanenti, come spiegato prima. Mentre networks specifica la rete a cui il servizio dovrebbe esser connesso.

Il parametro depends_on specifica infine quali servizi dovrebbero essere in esecuzione prima che la tua applicazione inizi.

Redis

Redis ha dei parametri simili a quelli di MySQL.

Sostanzialmente, viene istanziata una immagine, dopodichè le porte tra il localhost e il container vengono sincronizzate. Tramite il volume, invece, si salvano i dati che devono essere persistenti.

Ritroverai, infine, il parametro networks e healthcheck per stabilire su quale rete operare e per controllare il funzionamento corretto di Redis.

Primi comandi di Sail

Dovendo usare spesso vendor/bin/sail, è opportuno assegnare questa stringa a un alias più breve.

$ alias sail='bash vendor/bin/sail'

Per mandare in esecuzione i containers dal docker-compose.yml :

$ sail up

Per eseguire un container in background, usa allora il comando:

$ sail up -d

Per interrompere l'esecuzione, invece, premi CTRL+C e, per terminare i processi in background, esegui il comando:

$ sail down

Per altri comandi come quelli di artisan, composer o npm, è opportuno aggiungere l'alias sail come prefisso di questi comandi.

Per esempio:

$ sail composer require laravel/sanctum

Conclusioni

A questo punto, sarai stato in grado di creare e configurare la tua prima applicazione con Sail, e di comprenderne il funzionamento e il significato delle diverse voci nel file docker-compose.yml e nei servizi offerti.