Docker Laravel · 9 min read · Nov 25, 2025
Dockerizzare Laravel con Nginx MySQL e Docker Compose su Ubuntu 18.04 LTS

Laravel è un framework PHP gratuito e open source che implementa il pattern di design MVC (Model-View-Controller). È progettato per essere facile da usare e consente agli sviluppatori di creare applicazioni sia semplici che complesse in poco tempo. Laravel è stato creato da Taylor Otwell nel 2011, come tentativo di fornire un’alternativa avanzata al framework CodeIgniter (CI). Nel 2011, Laravel ha rilasciato la versione 1 e la versione 2, e l’ultima versione 5.6 include più funzionalità migliorate come il supporto per la riga di comando (CLI) chiamato ‘artisan’, supporto per diversi sistemi di database, miglioramenti delle route, ecc.
In questa guida, ti mostreremo come Dockerizzare il progetto Laravel con PHP-FPM, database MySQL e il server web Nginx utilizzando Docker Compose su Ubuntu Server 18.04. Creeremo una nuova immagine docker per il progetto Laravel e poi creeremo lo script docker-compose.yml che contiene alcuni servizi tra cui, l’App/Laravel stesso, il server web Nginx e il database MySQL.
Prerequisiti
- Ubuntu 18.04
- Privilegi di root
Cosa faremo:
- Installare Docker e Docker Compose
- Scaricare Laravel e installare le dipendenze
- Dockerizzare il progetto Laravel - Definire il servizio App Laravel
- Definire il servizio HTTP Nginx
- Definire il servizio database MySQL
- Creare un host virtuale Nginx per Laravel
- Creare un Dockerfile per l’App Laravel
- Costruire il progetto Laravel
- Post-installazione di Laravel
Passo 1 - Installare Docker e Docker Compose
Innanzitutto, installeremo i pacchetti Docker e Docker Compose sul sistema Ubuntu. E utilizzeremo i pacchetti Docker dal repository ufficiale di Ubuntu.
Prima di procedere, dobbiamo aggiornare i repository sul sistema Ubuntu. Basta eseguire il seguente comando.
sudo apt updateOra installa i pacchetti Docker e Docker Compose utilizzando il comando apt qui sotto.
sudo apt install docker.io -y
sudo apt install docker-compose -yI pacchetti Docker e Docker Compose dovrebbero ora essere installati sul sistema, controllalo utilizzando i seguenti comandi.
docker version
docker-compose versionCome risultato, otterrai la versione di Docker e Docker Compose sul sistema.

Successivamente, dobbiamo assegnare l’utente non root al gruppo docker per poter eseguire il contenitore Docker per utenti non root.
In questo caso, aggiungeremo l’utente chiamato ‘hakase’ al gruppo docker eseguendo il seguente comando.
usermod -a -G docker hakaseE dopo, accedi alla shell dell’utente ‘hakase’ ed esegui il comando docker ‘hello-world’.
su - hakase
docker run hello-worldOra verrà visualizzato il messaggio ‘Hello World’ da Docker e l’installazione di Docker è stata completata.

Passo 2 - Scaricare Laravel e installare le dipendenze
In questo passo, scaricheremo il framework web Laravel nella directory home di ‘hakase’ e poi installeremo le dipendenze di Laravel utilizzando l’immagine docker PHP ‘composer’. Assicurati di essere connesso al server come utente non root.
Scarica il progetto Laravel nella directory ‘myapp’ e accedi ad essa.
git clone https://github.com/laravel/laravel.git myapp/
cd myapp/Ora esegui il seguente comando docker per installare le dipendenze di Laravel.
docker run --rm -v $(pwd):/app composer installCon il comando sopra, eseguiremo un nuovo contenitore docker temporaneo e monteremo la directory del progetto ‘myapp’ nella directory ‘/app’ sul contenitore. Il contenitore è basato sull’immagine docker ‘composer’, e stiamo installando le dipendenze di Laravel utilizzando il comando ‘composer’ all’interno di quel contenitore temporaneo.

Una volta completata l’installazione delle dipendenze di Laravel, dobbiamo cambiare il proprietario della directory ‘myapp’ al nostro utente utilizzando il comando sudo qui sotto.
sudo chown -R $USER:$USER ~/myapp
Passo 3 - Dockerizzare il progetto Laravel
Dopo aver scaricato Laravel e installato le sue dipendenze, creeremo un nuovo script docker-compose.yml e un nuovo Dockerfile per il progetto Laravel.
cd myapp/
vim docker-compose.yml- Definire il servizio App Laravel
Innanzitutto, definiremo il progetto Laravel stesso e costruiremo l’immagine docker per il progetto Laravel utilizzando il Dockerfile.
Incolla lo script di composizione docker al suo interno.
version: '3'
services:
#App Laravel
app:
build:
context: .
dockerfile: Dockerfile
image: hakase-labs/laravel
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www/html
volumes:
- ./:/var/www/html
networks:
- mynetDettagli del servizio contenitore Laravel:
- Il servizio contenitore Laravel sarà chiamato ‘app’. È basato sulla nostra immagine docker personalizzata che sarà creata con il nostro ‘Dockerfile’, e la nuova immagine sarà chiamata ‘hakase-labs/laravel’.
- Vogliamo montare la directory del progetto ‘myapp’ nella directory ‘/var/www/html’ all’interno del servizio contenitore.
- Stiamo utilizzando la rete docker personalizzata per la nostra configurazione, la rete sarà chiamata ‘mynet’.
- Definire il servizio HTTP Nginx
Ora definiremo il servizio contenitore nginx.
Incolla la seguente configurazione dopo la riga del servizio contenitore ‘app’.
#Servizio Nginx
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www/html
- ./nginx/conf.d/:/etc/nginx/conf.d/
- ./nginx/ssl/:/etc/nginx/ssl/
networks:
- mynetDettagli della configurazione del servizio contenitore nginx:
- Vogliamo creare un nuovo contenitore chiamato ‘nginx’ basato sull’immagine docker ‘nginx:alpine’.
- Il servizio contenitore aprirà le porte HTTP e HTTPS.
- Il contenitore monterà tre volumi diversi. La directory del progetto ‘myapp’ nella directory ‘/var/www/html’, la configurazione dell’host virtuale nginx ‘nginx/conf.d/‘ nella directory ‘/etc/nginx/conf.d’, e monterà i file di certificato ‘nginx/ssl/‘ nella directory ‘/etc/nginx/ssl’ sul contenitore.
- Il servizio contenitore utilizzerà la stessa rete chiamata ‘mynet’.
- Definire il servizio database MySQL
E infine, definiamo il servizio database MySQL.
Incolla la seguente configurazione dopo la riga del servizio contenitore ‘nginx’.
#Servizio MySQL
db:
image: mysql:5.7
container_name: db
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: laraveldb
MYSQL_USER: laravel
MYSQL_PASSWORD: laravelpassworddb
MYSQL_ROOT_PASSWORD: rootpasswordmysql
volumes:
- mysqldata:/var/lib/mysql/
networks:
- mynet
#Reti Docker
networks:
mynet:
driver: bridge
#Volumi
volumes:
mysqldata:
driver: localSalva e chiudi la configurazione.
Dettagli del servizio contenitore MySQL:
- Il servizio contenitore MySQL sarà chiamato ‘db’, basato sull’immagine docker ‘mysql:5.7’.
- Il servizio ‘db’ aprirà la porta MySQL predefinita ‘3306’.
- Il progetto Laravel utilizzerà il database, l’utente e la password basati sulla variabile di ambiente del servizio ‘db’.
- Il servizio MySQL ‘db’ monterà il volume chiamato ‘mysqldata’, e avrà la stessa rete ‘mynet’.
- E definiamo la rete personalizzata ‘mynet’ con il driver ‘bridge’, e il volume ‘mysqldata’ utilizzerà il driver ‘local’.
Di seguito è riportata la configurazione completa di ‘docker-compose.yml’:
version: '3'
services:
#App Laravel
app:
build:
context: .
dockerfile: Dockerfile
image: hakase-labs/laravel
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www/html
volumes:
- ./:/var/www/html
networks:
- mynet
#Servizio Nginx
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www/html
- ./nginx/conf.d/:/etc/nginx/conf.d/
- ./nginx/ssl/:/etc/nginx/ssl/
networks:
- mynet
#Servizio MySQL
db:
image: mysql:5.7
container_name: db
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: laraveldb
MYSQL_USER: laravel
MYSQL_PASSWORD: laravelpassworddb
MYSQL_ROOT_PASSWORD: rootpasswordmysql
volumes:
- mysqldata:/var/lib/mysql/
networks:
- mynet
#Reti Docker
networks:
mynet:
driver: bridge
#Volumi
volumes:
mysqldata:
driver: local- Creare un host virtuale Nginx per Laravel
All’interno della directory del progetto ‘myapp’, crea una nuova directory chiamata ‘nginx’ che conterrà altre due directory ‘conf.d’ e ‘ssl’. Quindi crea una nuova configurazione dell’host virtuale nginx ‘laravel.conf’ all’interno della directory ‘conf.d’.
Esegui il seguente comando.
mkdir -p nginx/{conf.d,ssl}
vim nginx/conf.d/laravel.confserver {
listen 80;
server_name laravel.hakase-labs.io;
return 301 https://laravel.hakase-labs.io$request_uri;
}
server {
listen 443 ssl http2;
server_name laravel.hakase-labs.io;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# File di log per il debug
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
# Directory radice web di Laravel
root /var/www/html/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
# Nginx passa le richieste a PHP-FPM
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}Salva e chiudi.
Dopo di che, copia il tuo file di certificato ssl nella directory ‘nginx/ssl/‘.
sudo cp /path/to/ssl/fullchain.pem nginx/ssl/
sudo cp /path/to/ssl/privkey.pem nginx/ssl/- Creare un Dockerfile per l’App Laravel
Successivamente, crea un nuovo Dockerfile per il progetto Laravel.
Esegui il seguente comando.
vim DockerfileIncolla la configurazione qui sotto.
# Imposta l'immagine master
FROM php:7.2-fpm-alpine
# Copia composer.lock e composer.json
COPY composer.lock composer.json /var/www/html/
# Imposta la directory di lavoro
WORKDIR /var/www/html
# Installa dipendenze aggiuntive
RUN apk update && apk add --no-cache \
build-base shadow vim curl \
php7 \
php7-fpm \
php7-common \
php7-pdo \
php7-pdo_mysql \
php7-mysqli \
php7-mcrypt \
php7-mbstring \
php7-xml \
php7-openssl \
php7-json \
php7-phar \
php7-zip \
php7-gd \
php7-dom \
php7-session \
php7-zlib
# Aggiungi e abilita le estensioni PHP-PDO
RUN docker-php-ext-install pdo pdo_mysql
RUN docker-php-ext-enable pdo_mysql
# Installa PHP Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Rimuovi la cache
RUN rm -rf /var/cache/apk/*
# Aggiungi UID '1000' a www-data
RUN usermod -u 1000 www-data
# Copia i permessi della directory dell'applicazione esistente
COPY --chown=www-data:www-data . /var/www/html
# Cambia l'utente corrente in www
USER www-data
# Espone la porta 9000 e avvia il server php-fpm
EXPOSE 9000
CMD ["php-fpm"]Salva e chiudi la configurazione.
E siamo pronti a costruire il progetto Laravel ‘myapp’ e avviare i servizi contenitore che abbiamo definito.
Passo 4 - Costruire Laravel con i servizi Nginx e MySQL
Costruisci l’immagine docker personalizzata per il nostro progetto Laravel utilizzando il seguente comando.
docker-compose build
Quindi esegui di nuovo il seguente comando.
docker-compose up -dScaricherà tutte le immagini docker di cui abbiamo bisogno e poi costruirà i servizi contenitore basati sulla configurazione ‘docker-compose.yml’.

Quando è completo, verifica utilizzando il comando docker-compose qui sotto.
docker-compose psE come risultato, otterrai i tre servizi contenitore attivi e funzionanti. L’ ‘app’ che è in esecuzione sulla porta predefinita ‘9000’ PHP-FPM, il servizio ‘nginx’ è sulle porte HTTP e HTTPS, e il servizio MySQL ‘db’ sulla porta MySQL predefinita ‘3306’.
Dopo di che, verifica di nuovo tutte le immagini docker disponibili e le porte aperte sul sistema.
docker-compose images
netstat -plntuOtterrai l’immagine docker personalizzata ‘hakase-labs/laravel’ nell’elenco, e le porte HTTP e HTTPS sono nello stato ‘LISTEN’.

Passo 5 - Post-installazione di Laravel
Fino a questo punto, il progetto Laravel è attivo e funzionante come contenitore Docker. E ora creeremo un nuovo file ‘.env’, genereremo la chiave e migreremo i dati di Laravel utilizzando la riga di comando di Laravel ‘artisan’.
Copia l’esempio del file ‘.env’ ed editalo all’interno del contenitore.
cp .env.example .env
docker-compose exec app vim .envCambia la configurazione del database come segue.
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=laravel
DB_PASSWORD=laravelpassworddbSalva e chiudi.
Successivamente, genera la chiave dell’applicazione Laravel e cancella la configurazione della cache.
docker-compose exec app php artisan key:generate
docker-compose exec app php artisan config:cacheDopo di che, migra il database utilizzando il seguente comando.
docker-compose exec app php artisan migrateAssicurati che non ci siano errori.

Ora apri il tuo browser web e digita il nome di dominio del tuo progetto.
http://laravel.hakase-labs.io/
E verrai reindirizzato alla connessione HTTPS sicura e verrà visualizzata la pagina principale predefinita di Laravel come di seguito.

Infine, la Dockerizzazione del progetto Laravel con il server web Nginx e il database MySQL è stata completata con successo.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.