Docker Laravel · 10 min read · Nov 25, 2025
Dockeriser Laravel avec Nginx MySQL et Docker Compose sur Ubuntu 18.04 LTS

Laravel est un framework PHP gratuit et open source qui implémente le modèle de conception MVC (Modèle-Vue-Contrôleur). Il est conçu pour être facile à utiliser et permet aux développeurs de créer des applications simples et complexes en un rien de temps. Laravel a été créé par Taylor Otwell en 2011, dans le but de fournir une alternative avancée au framework CodeIgniter (CI). En 2011, Laravel a publié la version 1 et la version 2, et la dernière version 5.6 est livrée avec plus de fonctionnalités améliorées telles que le support de la ligne de commande (CLI) nommé ‘artisan’, le support de différents systèmes de base de données, des améliorations de routage, etc.
Dans ce guide, nous allons vous montrer comment dockeriser le projet Laravel avec PHP-FPM, la base de données MySQL et le serveur web Nginx en utilisant Docker Compose sur le serveur Ubuntu 18.04. Nous allons créer une nouvelle image Docker pour le projet Laravel, puis créer le script docker-compose.yml qui contient certains services, y compris l’application Laravel elle-même, le serveur web Nginx et la base de données MySQL.
Prérequis
- Ubuntu 18.04
- Privilèges root
Ce que nous allons faire :
- Installer Docker et Docker Compose
- Télécharger Laravel et installer les dépendances
- Dockeriser le projet Laravel - Définir le service d’application Laravel
- Définir le service HTTP Nginx
- Définir le service de base de données MySQL
- Créer un hôte virtuel Nginx pour Laravel
- Créer un Dockerfile pour l’application Laravel
- Construire le projet Laravel
- Post-installation de Laravel
Étape 1 - Installer Docker et Docker Compose
Tout d’abord, nous allons installer les paquets Docker et Docker Compose sur le système Ubuntu. Et nous utiliserons les paquets Docker du dépôt officiel d’Ubuntu.
Avant d’aller plus loin, nous devons mettre à jour les dépôts sur le système Ubuntu. Il suffit d’exécuter la commande suivante.
sudo apt updateMaintenant, installez les paquets Docker et Docker Compose en utilisant la commande apt ci-dessous.
sudo apt install docker.io -y
sudo apt install docker-compose -yLes paquets Docker et Docker Compose devraient maintenant être installés sur le système, vérifiez-le en utilisant les commandes suivantes.
docker version
docker-compose versionEn conséquence, vous obtiendrez la version de Docker et de Docker Compose sur le système.

Ensuite, nous devons assigner l’utilisateur non-root au groupe docker afin de pouvoir exécuter le conteneur Docker pour les utilisateurs non-root.
Dans ce cas, nous allons ajouter l’utilisateur appelé ‘hakase’ au groupe docker en exécutant la commande suivante.
usermod -a -G docker hakaseEt après cela, connectez-vous au shell de l’utilisateur ‘hakase’ et exécutez la commande docker ‘hello-world’.
su - hakase
docker run hello-worldMaintenant, vous verrez le message ‘Hello World’ de Docker, et l’installation de Docker est terminée.

Étape 2 - Télécharger Laravel et installer les dépendances
Dans cette étape, nous allons télécharger le framework web Laravel dans le répertoire personnel de ‘hakase’ et ensuite installer les dépendances de Laravel en utilisant l’image docker PHP ‘composer’. Assurez-vous donc que vous êtes connecté au serveur en tant qu’utilisateur non-root.
Téléchargez le projet Laravel dans le répertoire ‘myapp’ et entrez dans celui-ci.
git clone https://github.com/laravel/laravel.git myapp/
cd myapp/Maintenant, exécutez la commande docker suivante afin d’installer les dépendances de Laravel.
docker run --rm -v $(pwd):/app composer installAvec la commande ci-dessus, nous allons exécuter un nouveau conteneur docker temporaire et monter le répertoire du projet ‘myapp’ dans le répertoire ‘/app’ sur le conteneur. Le conteneur est basé sur l’image docker ‘composer’, et nous installons les dépendances de Laravel en utilisant la commande ‘composer’ à l’intérieur de ce conteneur temporaire.

Une fois l’installation des dépendances de Laravel terminée, nous devons changer le propriétaire du répertoire ‘myapp’ pour notre propre utilisateur en utilisant la commande sudo ci-dessous.
sudo chown -R $USER:$USER ~/myapp
Étape 3 - Dockeriser le projet Laravel
Après avoir téléchargé Laravel et installé ses dépendances, nous allons créer un nouveau script docker-compose.yml et créer un nouveau Dockerfile pour le projet Laravel.
cd myapp/
vim docker-compose.yml- Définir le service d’application Laravel
Tout d’abord, nous allons définir le projet Laravel lui-même et construire l’image docker pour le projet Laravel en utilisant le Dockerfile.
Collez le script de composition docker dedans.
version: '3'
services:
#Application 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:
- mynetDétails du service de conteneur Laravel :
- Le service de conteneur Laravel sera nommé ‘app’. Il est basé sur notre image docker personnalisée qui sera créée avec notre ‘Dockerfile’, et la nouvelle image sera nommée ‘hakase-labs/laravel’.
- Nous voulons monter le répertoire du projet ‘myapp’ dans le répertoire ‘/var/www/html’ à l’intérieur du service de conteneur.
- Nous utilisons le réseau docker personnalisé pour notre configuration, le réseau sera nommé ‘mynet’.
- Définir le service HTTP Nginx
Maintenant, nous allons définir le service de conteneur nginx.
Collez la configuration suivante après la ligne de service de conteneur ‘app’.
#Service 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:
- mynetDétails de la configuration du service de conteneur nginx :
- Nous voulons créer un nouveau conteneur nommé ‘nginx’ basé sur l’image docker ‘nginx:alpine’.
- Le service de conteneur ouvrira les ports HTTP et HTTPS.
- Le conteneur montera trois volumes différents. Le répertoire du projet ‘myapp’ dans le répertoire ‘/var/www/html’, la configuration de l’hôte virtuel nginx ‘nginx/conf.d/‘ dans le répertoire ‘/etc/nginx/conf.d’, et montera les fichiers de certificat ‘nginx/ssl/‘ dans le répertoire ‘/etc/nginx/ssl’ sur le conteneur.
- Le service de conteneur utilisera le même réseau appelé ‘mynet’.
- Définir le service de base de données MySQL
Et enfin, nous définissons le service de base de données MySQL.
Collez la configuration suivante après la ligne de service de conteneur ‘nginx’.
#Service 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
#Réseaux Docker
networks:
mynet:
driver: bridge
#Volumes
volumes:
mysqldata:
driver: localEnregistrez et fermez la configuration.
Détails du service de conteneur MySQL :
- Le service de conteneur MySQL sera nommé ‘db’, basé sur l’image docker ‘mysql:5.7’.
- Le service ‘db’ ouvrira le port MySQL par défaut ‘3306’.
- Le projet Laravel utilisera la base de données, l’utilisateur et le mot de passe basés sur la variable d’environnement du service ‘db’.
- Le service MySQL ‘db’ montera le volume nommé ‘mysqldata’, et aura le même réseau ‘mynet’.
- Et nous définissons le réseau personnalisé ‘mynet’ avec le pilote ‘bridge’, et le volume ‘mysqldata’ utilisera le pilote ‘local’.
Voici la configuration complète ‘docker-compose.yml’ :
version: '3'
services:
#Application 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
#Service 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
#Service 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
#Réseaux Docker
networks:
mynet:
driver: bridge
#Volumes
volumes:
mysqldata:
driver: local- Créer un hôte virtuel Nginx pour Laravel
Dans le répertoire du projet ‘myapp’, créez un nouveau répertoire nommé ‘nginx’ qui contiendra deux autres répertoires ‘conf.d’ et ‘ssl’. Ensuite, créez une nouvelle configuration d’hôte virtuel nginx ‘laravel.conf’ à l’intérieur du répertoire ‘conf.d’.
Exécutez la commande suivante.
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;
# Fichiers de log pour le débogage
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
# Répertoire racine web de Laravel
root /var/www/html/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
# Nginx passe les requêtes à 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;
}
}Enregistrez et fermez.
Après cela, copiez votre fichier de certificat ssl dans le répertoire ‘nginx/ssl/‘.
sudo cp /path/to/ssl/fullchain.pem nginx/ssl/
sudo cp /path/to/ssl/privkey.pem nginx/ssl/- Créer un Dockerfile pour l’application Laravel
Ensuite, créez un nouveau Dockerfile pour le projet Laravel.
Exécutez la commande suivante.
vim DockerfileCollez la configuration ci-dessous.
# Définir l'image maître
FROM php:7.2-fpm-alpine
# Copier composer.lock et composer.json
COPY composer.lock composer.json /var/www/html/
# Définir le répertoire de travail
WORKDIR /var/www/html
# Installer des dépendances supplémentaires
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
# Ajouter et activer les extensions PHP-PDO
RUN docker-php-ext-install pdo pdo_mysql
RUN docker-php-ext-enable pdo_mysql
# Installer PHP Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Supprimer le cache
RUN rm -rf /var/cache/apk/*
# Ajouter l'UID '1000' à www-data
RUN usermod -u 1000 www-data
# Copier les permissions du répertoire d'application existant
COPY --chown=www-data:www-data . /var/www/html
# Changer l'utilisateur actuel en www
USER www-data
# Exposer le port 9000 et démarrer le serveur php-fpm
EXPOSE 9000
CMD ["php-fpm"]Enregistrez et fermez la configuration.
Et nous sommes prêts à construire le projet Laravel ‘myapp’ et à exécuter les services de conteneur que nous avons définis.
Étape 4 - Construire Laravel avec les services Nginx et MySQL
Construisez l’image docker personnalisée pour notre projet Laravel en utilisant la commande suivante.
docker-compose build
Puis exécutez à nouveau la commande suivante.
docker-compose up -dCela téléchargera toutes les images docker dont nous avons besoin, puis construira les services de conteneur basés sur la configuration ‘docker-compose.yml’.

Lorsque c’est terminé, vérifiez en utilisant la commande docker-compose ci-dessous.
docker-compose psEt en conséquence, vous verrez que les trois services de conteneur sont en cours d’exécution. L’application ‘app’ qui fonctionne sur le port par défaut ‘9000’ PHP-FPM, le service ‘nginx’ sur les ports HTTP et HTTPS, et le service MySQL ‘db’ sur le port MySQL par défaut ‘3306’.
Après cela, vérifiez à nouveau toutes les images docker disponibles et les ports ouverts sur le système.
docker-compose images
netstat -plntuVous obtiendrez l’image docker personnalisée ‘hakase-labs/laravel’ dans la liste, et les ports HTTP et HTTPS sont en état ‘LISTEN’.

Étape 5 - Post-installation de Laravel
Jusqu’à cette étape, le projet Laravel est en cours d’exécution en tant que conteneur Docker. Et maintenant, nous allons créer un nouveau fichier ‘.env’, générer la clé et migrer les données de Laravel en utilisant la ligne de commande Laravel ‘artisan’.
Copiez l’exemple du fichier ‘.env’ et modifiez-le à l’intérieur du conteneur.
cp .env.example .env
docker-compose exec app vim .envChangez la configuration de la base de données comme ci-dessous.
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=laravel
DB_PASSWORD=laravelpassworddbEnregistrez et fermez.
Ensuite, générez la clé de l’application Laravel et videz la configuration du cache.
docker-compose exec app php artisan key:generate
docker-compose exec app php artisan config:cacheAprès cela, migrez la base de données en utilisant la commande suivante.
docker-compose exec app php artisan migrateAssurez-vous qu’il n’y a pas d’erreur.

Maintenant, ouvrez votre navigateur web et tapez le nom de domaine de votre projet.
http://laravel.hakase-labs.io/
Et vous serez redirigé vers la connexion HTTPS sécurisée et la page d’accueil par défaut de Laravel sera affichée comme ci-dessous.

Enfin, la dockerisation du projet Laravel avec le serveur web Nginx et la base de données MySQL a été complétée avec succès.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.