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:

  1. Installare Docker e Docker Compose
  2. Scaricare Laravel e installare le dipendenze
  3. 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
  1. Costruire il progetto Laravel
  2. 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 update

Ora installa i pacchetti Docker e Docker Compose utilizzando il comando apt qui sotto.

sudo apt install docker.io -y  
sudo apt install docker-compose -y

I pacchetti Docker e Docker Compose dovrebbero ora essere installati sul sistema, controllalo utilizzando i seguenti comandi.

docker version  
docker-compose version

Come risultato, otterrai la versione di Docker e Docker Compose sul sistema.

Controlla la versione di docker

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 hakase

E dopo, accedi alla shell dell’utente ‘hakase’ ed esegui il comando docker ‘hello-world’.

su - hakase  
docker run hello-world

Ora verrà visualizzato il messaggio ‘Hello World’ da Docker e l’installazione di Docker è stata completata.

Aggiungi utente docker

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 install

Con 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.

Ottieni il framework Laravel

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

Cambia proprietario della directory app

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:  
      - mynet

Dettagli 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:  
      - mynet

Dettagli 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: local

Salva 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.conf
server {
    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 Dockerfile

Incolla 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

Costruisci Laravel con i servizi Nginx e MySQL

Quindi esegui di nuovo il seguente comando.

docker-compose up -d

Scaricherà tutte le immagini docker di cui abbiamo bisogno e poi costruirà i servizi contenitore basati sulla configurazione ‘docker-compose.yml’.

Scarica immagini docker

Quando è completo, verifica utilizzando il comando docker-compose qui sotto.

docker-compose ps

E 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 -plntu

Otterrai l’immagine docker personalizzata ‘hakase-labs/laravel’ nell’elenco, e le porte HTTP e HTTPS sono nello stato ‘LISTEN’.

Controlla la configurazione docker con netstat

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 .env

Cambia la configurazione del database come segue.

DB_CONNECTION=mysql  
DB_HOST=db  
DB_PORT=3306  
DB_DATABASE=laraveldb  
DB_USERNAME=laravel  
DB_PASSWORD=laravelpassworddb

Salva 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:cache

Dopo di che, migra il database utilizzando il seguente comando.

docker-compose exec app php artisan migrate

Assicurati che non ci siano errori.

Post installazione di Laravel

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.

Laravel con Docker installato con successo

Infine, la Dockerizzazione del progetto Laravel con il server web Nginx e il database MySQL è stata completata con successo.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.