Docker LEMP · 7 min read · Sep 24, 2025

Dockeriser la pile LEMP avec Docker-Compose sur Ubuntu

Docker-Compose est un outil en ligne de commande pour définir et gérer des applications docker multi-conteneurs. Compose est un script python, il peut être installé facilement avec la commande pip (pip est la commande pour installer des logiciels Python à partir du dépôt de paquets python). Avec compose, nous pouvons exécuter plusieurs conteneurs docker avec une seule commande. Cela vous permet de créer un conteneur en tant que service, idéal pour votre environnement de développement, de test et de mise en scène.

Dans ce tutoriel, je vais vous guider étape par étape pour utiliser docker-compose afin de créer un environnement de pile LEMP (LEMP = Linux - Nginx - MySQL - PHP). Nous exécuterons tous les composants dans différents conteneurs Docker, nous mettrons en place un conteneur Nginx, un conteneur PHP, un conteneur PHPMyAdmin et un conteneur MySQL/MariaDB.

Prérequis

  • Serveur Ubuntu 16.04 -64 bits
  • Privilèges root

Étape 1 - Installer Docker

Dans cette étape, nous allons installer Docker. Docker est disponible dans le dépôt Ubuntu, il suffit de mettre à jour votre dépôt et ensuite de l’installer.

Mettre à jour le dépôt ubuntu et mettre à niveau :

sudo apt-get update  
sudo apt-get upgrade

Installer la dernière version de Docker à partir du dépôt ubuntu.

sudo apt-get install -y docker.io

Démarrer docker et l’activer pour qu’il démarre au démarrage :

systemctl start docker  
systemctl enable docker

Les services Docker sont en cours d’exécution.

Ensuite, vous pouvez essayer d’utiliser docker avec la commande ci-dessous pour le tester :

docker run hello-world

Bonjour le monde depuis docker.

Hello Docker

Étape 2 - Installer Docker-Compose

Dans la première étape, nous avons déjà installé Docker. Maintenant, nous allons installer docker-compose.

Nous avons besoin de python-pip pour l’installation de compose, installez python et python-pip avec apt :

sudo apt-get install -y python python-pip

Lorsque l’installation est terminée, installez docker-compose avec la commande pip.

pip install docker-compose

Maintenant, vérifiez la version de docker-compose :

docker-compose --version

Docker-compose a été installé.

Étape 3 - Créer et configurer l’environnement Docker

Dans cette étape, nous allons construire notre environnement docker-compose. Nous allons utiliser un utilisateur non-root, donc nous devons créer cet utilisateur maintenant.

Ajoutez un nouvel utilisateur nommé ‘hakase‘ (choisissez votre propre nom d’utilisateur ici si vous le souhaitez) :

useradd -m -s /bin/bash hakase  
passwd hakase

Ensuite, ajoutez le nouvel utilisateur au groupe ‘docker‘ et redémarrez docker.

usermod -a -G docker hakase  
sudo systemctl restart docker

Maintenant, l’utilisateur ‘hakase‘ peut utiliser docker sans sudo.

Ensuite, depuis l’utilisateur root, connectez-vous à l’utilisateur ‘hakase’ avec su.

su - hakase

Créez un nouveau répertoire pour l’environnement compose.

mkdir lemp-compose/  
cd lemp-compose/

Ceci est notre environnement docker-compose, tous les fichiers qui doivent être dans le conteneur Docker doivent être dans ce répertoire. Lorsque nous utilisons docker-compose, nous avons besoin d’un fichier .yml nommé ‘docker-compose.yml‘.

Dans le répertoire ‘lemp-compose’, créez quelques nouveaux répertoires et un fichier docker-compose.yml :

touch docker-compose.yml  
mkdir -p {logs,nginx,public,db-data}
  • logs : Répertoire pour les fichiers journaux Nginx.
  • nginx : contient la configuration Nginx comme l’hôte virtuel, etc.
  • public : répertoire pour les fichiers web, index.html et fichier d’informations PHP.
  • db-data : volume du répertoire de données MariaDB.

Créez les fichiers journaux error.log et access.log dans le répertoire ‘logs‘.

touch logs/{error,access}.log

Créez un nouveau fichier de configuration d’hôte virtuel nginx dans le répertoire ‘nginx‘ :

vim nginx/app.conf

Collez la configuration ci-dessous :

upstream php {  
        server phpfpm:9000;  
}  
   
server {  
   
        server_name 193.70.36.50;  
   
        error_log "/opt/bitnami/nginx/logs/myapp-error.log";  
        access_log  "/opt/bitnami/nginx/logs/myapp-access.log";  
   
        root /myapps;  
        index index.php index.html;  
   
        location / {  
   
                try_files $uri $uri/ /index.php?$args;  
        }  
   
        location ~ \.php$ {  
   
                include fastcgi.conf;  
                fastcgi_intercept_errors on;  
                fastcgi_pass php;  
        }  
   
        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {  
                expires max;  
                log_not_found off;  
        }  
}

Enregistrez le fichier et quittez vim.

Créez un nouveau fichier index.html et un fichier d’informations PHP dans le répertoire ‘public‘.

echo '

LEMP Docker-Compose

hakase-labs' > public/index.html echo '' > public/info.php

Maintenant, vous pouvez voir le répertoire de l’environnement comme indiqué ci-dessous :

tree

Environnement du projet Docker compose

Étape 4 - Configuration du fichier docker-compose.yml

Dans l’étape précédente, nous avons créé les répertoires et fichiers nécessaires pour nos conteneurs. Dans cette étape, nous voulons éditer le fichier ‘docker-compose.yml‘. Dans le fichier docker-compose.yml, nous allons définir nos services pour la pile LEMP, les images de base pour chaque conteneur et les volumes docker.

Connectez-vous à l’utilisateur ‘hakase‘ et éditez le fichier docker-compose.yml avec vim :

su - hakase  
cd lemp-compose/  
vim docker-compose.yml

- Définir les services Nginx

Collez la configuration nginx ci-dessous :

nginx:  
    image: 'bitnami/nginx'  
    ports:  
        - '80:80'  
    links:  
        - phpfpm  
    volumes:  
        - ./logs/access.log:/opt/bitnami/nginx/logs/myapp-access.log  
        - ./logs/error.log:/opt/bitnami/nginx/logs/myapp-error.log  
        - ./nginx/app.conf:/bitnami/nginx/conf/vhosts/app.conf  
        - ./public:/myapps

Dans cette configuration, nous avons déjà défini :

  • nginx : nom des services
  • image : nous utilisons les images docker ‘bitnami/nginx
  • ports : expose le port conteneur 80 au port hôte 80
  • links : lie le conteneur de service ‘nginx‘ au conteneur ‘phpfpm
  • volumes : monte des répertoires locaux dans le conteneur. Monte le répertoire des fichiers journaux, monte la configuration de l’hôte virtuel Nginx et monte le répertoire racine web.

- Définir les services PHP-fpm

Collez la configuration ci-dessous sous le bloc Nginx :

phpfpm:  
    image: 'bitnami/php-fpm'  
    ports:  
        - '9000:9000'  
    volumes:  
        - ./public:/myapps

Nous avons défini ici :

  • phpfpm : définit le nom du service.
  • image : définit l’image de base pour le service phpfpm avec l’image ‘bitnami/php-fpm‘.
  • ports : Nous exécutons PHP-fpm avec le port TCP 9000 et exposons le port 9000 à l’hôte.
  • volumes : monte le répertoire racine web ‘public‘ dans ‘myapps‘ sur le conteneur.

- Définir le service MySQL

Dans le troisième bloc, collez la configuration ci-dessous pour le conteneur de service MariaDB :

mysql:  
    image: 'mariadb'  
    ports:  
        - '3306:3306'  
    volumes:  
        - ./db-data:/var/lib/mysql  
    environment:  
        - MYSQL_ROOT_PASSWORD=hakase-labs123

Ici, vous pouvez voir que nous utilisons :

  • mysql : comme nom du service.
  • image : le conteneur est basé sur les images docker ‘mariadb‘.
  • ports : le conteneur de service utilise le port 3306 pour la connexion MySQL, et l’expose à l’hôte sur le port 3306.
  • volumes : répertoire db-data mysql
  • environment : définit la variable d’environnement ‘MYSQL_ROOT_PASSWORD‘ pour le mot de passe root mysql dans les images docker, exécutée lors de la construction du conteneur.

- Configuration des services PHPMyAdmin

Dans le dernier bloc, collez la configuration ci-dessous :

phpmyadmin:  
    image: 'phpmyadmin/phpmyadmin'  
    restart: always  
    ports:  
       - '8080:80'  
    links:  
        - mysql:mysql  
    environment:  
        MYSQL_USERNAME: root  
        MYSQL_ROOT_PASSWORD: hakase-labs123  
        PMA_HOST: mysql

Nous utilisons une image docker ‘phpmyadmin’, mappant le port conteneur 80 à 8080 sur l’hôte, liant le conteneur au conteneur mariadb, définissant le redémarrage toujours et définissant certaines variables d’environnement de l’image docker, y compris le paramètre ‘PMA_HOST‘.

Enregistrez le fichier et quittez vim.

Vous pouvez voir un exemple complet sur github.

Étape 5 - Exécuter Docker-Compose

Maintenant, nous sommes prêts à exécuter docker-compose. Remarque : lorsque vous souhaitez exécuter docker-compose, vous devez être dans le répertoire du projet docker-compose et vous assurer qu’il y a le fichier yml avec la configuration compose.

Exécutez la commande ci-dessous pour démarrer la pile LEMP :

docker-compose up -d

-d : exécution en tant que démon ou en arrière-plan

Vous verrez le résultat que les nouveaux conteneurs ont été créés, vérifiez-le avec la commande ci-dessous :

docker-compose ps

exécution de docker-compose

Maintenant, nous avons quatre conteneurs exécutant Nginx, PHP-fpm, MariaDB et PHPMyAdmin.

Étape 6 - Test

Vérifiez les ports utilisés par le docker-proxy sur l’hôte.

netstat -plntu

tous les ports docker mappés à l'hôte

Nous pouvons voir le port 80 pour le conteneur Nginx, le port 3306 pour le conteneur MariaDB, le port 9000 pour le conteneur php-fpm, et le port 8080 pour le conteneur PHPMyAdmin.

Accédez au port 80 depuis le navigateur web, et vous verrez notre fichier index.html.

http://serverip-address/

Assurez-vous que PHP-fpm fonctionne, accédez-y depuis le navigateur web.

http://serverip-address/info.php

le conteneur docker php-fpm fonctionne

Accédez au conteneur MySQL dans le shell MySQL.

docker-compose exec mysql bash  
mysql -u root -p  
TYPE MYSQL PASSWORD: hakase-labs123

Maintenant, créez une nouvelle base de données :

create database hakase_db;  
exit

Le conteneur shell mysql de MariaDB est accessible, et nous avons créé une nouvelle base de données ‘hakase_db‘.

accéder au conteneur shell mysql docker

Ensuite, accédez à PHPMyAdmin sur le port 8080 : http://serverip-address:8080/.

Vous verrez la page de connexion PHPMyAdmin, tapez simplement le nom d’utilisateur ‘root‘ et le mot de passe est ‘hakase-labs123‘.

conteneur docker phpmyadmin

Vous serez automatiquement connecté au conteneur mysql qui a été défini dans la variable d’environnement PMA_HOST.

Cliquez sur ‘Go‘ et vous verrez le tableau de bord phpmyadmin qui est connecté au conteneur ‘mysql‘.

phpmyadmin et le conteneur mysql fonctionnent

Succès ! La pile LEMP fonctionne sous une configuration docker-compose, composée de quatre conteneurs.

Référence

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.