L’adoption de Docker ne se limite pas aux développeurs expérimentés. Sa prise en main aisée et son interface intuitive en font un outil accessible aux débutants comme aux confirmés.
Dans ce tutoriel guide je vous montre comment utiliser Docker pour vos projets WordPress dans un environnement local. Ce processus d’installation et de configuration est valable aussi bien sur Windows, Mac que Linux.
Sommaire
Pourquoi utiliser Docker pour le développeur WordPress?
Utiliser Docker pour développer avec WordPress alors que des applications telles que Herd, WordPress Playground ou LocalWP disposent de tous les outils pratiques, présente différents avantages :
- Proposer des environnements de développement propres et reproductibles.
- Isolation : chaque instance WordPress est isolée dans son propre conteneur, ce qui garantit un environnement propre et sans interférences avec d’autres applications. Les applications s’exécutent sans s’interférer.
- Facilité de configuration et de déploiement: : Docker automatise la configuration et le déploiement de WordPress, ce qui permet de gagner du temps et d’éviter les erreurs.
- Portabilité : Les conteneurs Docker peuvent être facilement partagés et transférés entre différents environnements, ce qui facilite la collaboration et le test.
- Cette approche offre aussi une solution plus légère et plus efficace, optimisant ainsi l’utilisation des ressources système.
Dans un travail en équipe, chaque développeur peut utiliser la même configuration exacte, ce qui élimine les « ça marche sur ma machine » et les différences de configuration entre les environnements. Les applications sont créées et exécutées dans des environnements isolés et portables, le tout à partir d’un seul noyau Linux. Des environnements de travail uniformes et reproductibles, facilitent ainsi la collaboration et le partage de code.
Ce qu’il vous faut pour commencer
- Un éditeur de texte : Utilisez un éditeur de texte comme Visual Studio Code, Sublime Text ou tout autre éditeur de votre choix pour écrire les fichiers de configuration.
- L’accès à la ligne de commande par votre terminal et se familiariser avec les commandes Docker. Si vous utilisez Windows, vous aurez besoin d’installer une couche de compatibilité Linux comme Bash on Windows (installer Git et Git Bash et/ou Cmder) ou WSL 2 pour exécuter les commandes Bash. Une commande Bash est une instruction que vous donnez à votre ordinateur pour effectuer une action spécifique.
- Docker et Docker Compose (que vous pouvez installer directement avec Docker Desktop)
- Un fichier
docker-compose.yml
: Créez un fichierdocker-compose.yml
pour définir les services Docker nécessaires (WordPress et MySQL par exemple).
Des approches différentes pour installer WordPress avec Docker
Pour installer WordPress avec Docker, vous avez plusieurs options, notamment en utilisant des images préconstruites disponibles depuis Docker Hub ou en créant vos propres configurations avec des Dockerfiles.
Première approche : création d’un Dockerfile personnalisé
- Avantage: Plus de contrôle et de flexibilité pour personnaliser votre installation.
- Inconvénient: Nécessite des connaissances en Docker et en création de fichiers Docker.
Deuxième approche : utiliser une image Docker pré-construite
- Avantage: Rapide, facile et idéale pour les débutants.
- Inconvénients: Moins de flexibilité pour la personnalisation et la configuration.
Installer Docker et Docker Compose avec Docker Desktop
Docker est disponible en 3 distributions différentes :
- Docker CE Community Edition (Linux)
- Docker Desktop (Mac ou Windows)
- Docker Enterprise (Linux)
Composition de docker Desktop
Docker Desktop regroupe différents outils :
- Docker est la technologie de base, le moteur qui permet de créer et d’exécuter des conteneurs. Si vous souhaitez simplement exécuter un seul conteneur, Docker est suffisant.
- Docker Compose est un outil qui facilite la gestion des applications multi-conteneurs. Il utilise des fichiers YAML pour décrire la composition de l’application, c’est-à-dire les différents conteneurs qui la composent et leurs dépendances. Si vous souhaitez exécuter une application multi-conteneurs, Docker Compose est un bon choix.
- Docker Desktop est une application qui facilite l’utilisation de Docker sur les ordinateurs personnels Mac ou Windows. Elle fournit une interface graphique intuitive pour gérer les images, les conteneurs et les réseaux Docker. Si vous souhaitez utiliser Docker sur un ordinateur personnel et que vous recherchez une interface graphique intuitive, Docker Desktop est une bonne option.
Fonctionnalité | Docker | Docker Compose | Docker Desktop |
Création d’image | Oui | Non | Oui |
Lancement démarrage de conteneurs | Oui | Oui | Oui |
Gestion des applications multi-conteneurs | Non | Oui | Oui |
Interface utilisateur | CLI | CLI ou GUI | GUI |
Facilité d’utilisation | Débutant | Intermédiaire | Avancé |
Étape 1 – Installer Docker avec Docker Desktop
Installer Docker sur Windows
La première étape consiste à installer Docker et Docker Compose sur votre système. Vous pouvez suivre les instructions spécifiques à votre système d’exploitation sur le site officiel de Docker (https://docs.docker.com/get-docker/)
Docker Desktop inclut Docker Engine (le moteur Docker) ainsi que d’autres outils tels que Docker CLI et Docker Compose !
Lancer l’installeur
Complétez l’installation.
Continuez avec ou sans connexion à votre compte Docker Inc.
Vous arrivez sur l’interface de Docker Desktop.
Le Docker Desktop doit resté lancé lors des prochaines manipulations!
Installer Docker avec Docker Desktop sur Mac
Étape 2 – Vérifier son installation
Vérifiez la présence de Docker sur votre machine avec la commande suivante
docker -v
Pour tester si Docker fonctionne correctement lancez cette commande
docker run hello-word
Cette command extrait une image « Hello word » depuis le Docker Hub et crée une nouvelle pile dans votre logiciel.
Dans votre terminal ce message doit être affiché
Hello from Docker
This message shows that your installation appears to be working correctly.
Étape 3 – Installer WordPress manuellement
Où placer ses sites dockérisés sur sa machine en local ?
Créez un répertoire dédié sur votre système de fichiers pour stocker tous vos projets Dockerisés. Vous pouvez nommer ce répertoire comme bon vous semble, par exemple docker_projects
ou docker_sites
.
À l’intérieur du répertoire principal que vous avez créé, vous pouvez créer des sous-répertoires individuels pour chaque site que vous développez. Ces sous-répertoires peuvent être nommés d’après les noms de vos projets ou de vos clients, par exemple site1
, site2
, etc.
Structurer les dossier de ses projets
/docker_projects
- site1/
- docker-compose.yml
- wp-content/
- site2/
- docker-compose.yml
- wp-content/
Créer un fichier de configuration docker-compose.yml
Créez un fichier docker-compose.yml dans votre répertoire de projet et ajoutez-y le contenu suivant :
Version avec Mysql 8.0
version: '3.8'
services:
db:
image: mariadb:latest
restart: always
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
ports:
- "8181:80"
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
volumes:
db_data: {}
Explication du fichier de configuration
Ce fichier est composé de plusieurs sections.
- version : la première ligne spécifie la version de la syntaxe Docker Compose utilisée dans ce fichier. Dans cet exemple, nous utilisons la version 3.8.
- services : cette section définit les différents services utilisés dans l’application.
- volume : permet de persister les données entre les arrêts et les redémarrages des conteneurs
Explication ses services
Chaque service est défini par un bloc de configuration.
Un service nommé db
, qui contiendra la base de données MySQL.
- L’attribut image spécifie l’image Docker à utiliser pour ce service, dans ce cas-ci
mysql:8.0
, ce qui indique l’utilisation de MySQL version 8.0. - L’attribut commande est utilisé pour définir le plugin d’authentification par défaut de MySQL. Dans ce cas, nous utilisons mysql_native_password comme plugin d’authentification par défaut.
- L’attribut restart dans le service wordpress indique à Docker de redémarrer automatiquement le conteneur MySQL en cas d’échec ou de redémarrage du système hôte.
- L’attribut environnement définit les variables d’environnement utilisées par le conteneur MySQL
- L’attribut volumes
Un service nommé wordpress
,
- L’attribut depends_on
- L’attribut image : cet attribut spécifie l’image Docker utilisée pour créer le conteneur WordPress. L’image
wordpress:latest
est utilisée, ce qui signifie la dernière version de l’image WordPress disponible sur Docker Hub. - L’attribut ports : expose le port 3306 du conteneur sur le port 3306 de la machine hôte. Cela permet d’accéder à la base de données MySQL depuis l’extérieur du conteneur. Le port 8080 de l’hôte est mappé sur le port 80 du conteneur WordPress. Cela signifie que le site WordPress sera accessible depuis le navigateur à l’adresse
http://localhost:8080
. - L’attribut restart : est utilisé pour spécifier le comportement de redémarrage automatique du conteneur en cas d’arrêt inattendu.
- L’attribut environnement : cet attribut définit les variables d’environnement à passer au conteneur WordPress : plusieurs variables d’environnement sont définies, telles que
WORDPRESS_DB_HOST
,WORDPRESS_DB_USER
,WORDPRESS_DB_PASSWORD
, etWORDPRESS_DB_NAME
. Ces variables sont utilisées par WordPress pour se connecter à la base de données MySQL. - L’attribut volumes spécifie les volumes à monter dans le conteneur WordPress.
Renseigner les propriétés avec un fichier .env
Plutôt que d’avoir des mots de passe en dur, pour des raisons de sécurité il est préférable d’utiliser des variables qui seront stockées dans un fichier .env à la racine.
Le fichier docker-compose.yml utilise une approche différente de celle que vous avez l’habitude d’utiliser pour les mots de passe pour l’accès habituel à un système de gestion de base de données root et votre mot de passe ainsi que pour des accès en local à WordPress utilisateur_wp et mot_de_passe_wordpress.
Les mots de passe sont stockés dans des variables d’environnement, ce qui évite de les stocker directement dans le fichier docker-compose.yml.
MYSQL_ROOT_PASSWORD=somewordpress
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress
Démarrage des services
Lorsque vous avez plusieurs docker-compose il est conseillé de nommer les projets pour bien les différencier.
docker-compose -p mon_projet_1 up -d
docker-compose -p mon_projet_2 up -d
Toujours dans le dossier de votre projet et lancez la commande.
docker-compose up -d
Dans votre terminal, accédez au répertoire contenant votre fichier docker-compose.yml
et exécutez la commande suivante pour démarrer les services :
docker-compose up -d
docker-compose up: cette partie de la commande est utilisée pour démarrer les services définis dans le fichier docker-compose.yml
. Lorsque vous exécutez docker-compose up
, Docker Compose lit le fichier docker-compose.yml
et crée et démarre les conteneurs nécessaires pour chaque service défini.
L’option -d
, ou --detach
, est utilisée pour exécuter les conteneurs en mode détaché. Cela signifie que les conteneurs s’exécutent en arrière-plan et que vous récupérez immédiatement le contrôle de votre terminal après avoir lancé la commande. Sans cette option, les logs des conteneurs seraient affichés directement dans votre terminal, ce qui rendrait difficile l’utilisation de votre terminal pour d’autres tâches.
La commande docker-compose crée d’abord des images puis des conteneurs.
La commande a réussi à créer le réseau qui permet aux conteneurs de communiquer entre eux ainsi que le volume wp_db_data. Elle a démarré les conteneurs de services WordPress et de base de données.
Annuler la commande
Pour annuler l’exécution de docker-compose up -d
et arrêter tous les conteneurs démarrés par cette commande, vous pouvez utiliser la commande suivante :
docker-compose down
Pour supprimer un projet en particulier
docker-compose -p mon_projet_1 up -d
docker-compose -p mon_projet_2 up -d
docker-compose up -d
Etape 4 – Vérifier l’état des conteneurs Docker
Utilisez la commande docker ps pour voir les conteneurs en cours d’exécution. Assurez-vous que les conteneurs WordPress, la base de données et éventuellement sont en cours d’exécution.
docker ps
Etape 5 – Installer WordPress
Accéder à l’installation de WordPress
Ouvrez un navigateur Web et accédez à l’adresse http://localhost:8000 (ou à l’adresse spécifiée dans votre fichier docker-compose.yml si vous avez utilisé un port différent). Vous devriez voir la page d’installation de WordPress.
http://localhost/wp-admin/install.php
Utiliser un fichier dockerfile
L’utilisation d’un dockerfile apporte de nombreux avantages. Cela nous permet entre autre de personnaliser l’image et spécifier des dépendances logicielles, des configurations système pour WordPress dans notre cas.
Avec ce Etape 5 – Accéder à l’installation WordPress sur mesure nous pourrons ajouter WP-Cli un logiciel additionnel utile pour notre productivité.
Dans le fichier docker-compose.yml nous déclarons le fichier php.dockerfile
version: '3.8'
services:
db:
image: mariadb:latest
restart: always
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
wordpress:
build:
context: .
dockerfile: php.dockerfile # Utiliser le fichier php.dockerfile
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
ports:
- "8181:80"
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
volumes:
db_data: {}
Création du fichier php.dockerfile
Dans ce fichier nous indiquons de la provenance de l’image avec le mot clé FROM
Nous lançons l’exécution de l’installation des dépendances nécessaires à Composer et WP-Cli.
WP-Cli a lui aussi besoin de Composer.
# Utilisez l'image WordPress officielle comme image de base
FROM wordpress:latest
# Installer les dépendances nécessaires pour Composer et WP-CLI
RUN apt-get update && \
apt-get install -y curl && \
apt-get install -y git && \
apt-get install -y unzip
# Installer Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Installer WP-CLI
RUN curl -o /usr/local/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && \
chmod +x /usr/local/bin/wp
Paramétrage d’un utilisateur pour lancer les commandes WP-CLI
Comme il déconseillé d’utiliser l’utilisateur root dans l’utilisation de WP-Cli nous créons un utilisateur
# Utilisez l'image WordPress officielle comme image de base
FROM wordpress:latest
# Installer les dépendances nécessaires pour Composer et WP-CLI
RUN apt-get update && \
apt-get install -y curl && \
apt-get install -y git && \
apt-get install -y unzip
# Installer Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Installer WP-CLI
RUN curl -o /usr/local/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && \
chmod +x /usr/local/bin/wp
# Créer un utilisateur non-root pour exécuter WP-CLI
RUN useradd -m wpcliuser
# Définir le mot de passe de l'utilisateur
RUN echo 'wpcliuser:${WPCLIUSER_PASSWORD}' | chpasswd
# Donner les permissions nécessaires au nouvel utilisateur
RUN chown -R wpcliuser /var/www/html
#RUN chown -R wpcliuser /var/www/html/wp-content
# Définir l'utilisateur non-root comme utilisateur par défaut
USER wpcliuser
Fichier php.dockerfile
Ajout de Node.js dans docker-compose.yaml
nodejs:
image: node:latest
restart: unless-stopped # Change to unless-stopped for development
working_dir: /app
volumes:
- ./app:/app
command: ["npm", "install", "-g", "pnpm", "webpack"]
Commandes utiles
Afficher les journaux d’un conteneur Docker nommé wordpress :
docker-compose logs wordpress
Exécuter une commande WordPress CLI (wp-cli
) dans un conteneur Docker.
docker-compose run --rm wp-cli wp --info
Installer un plugin en ligne de commande
docker-compose run --rm wp-cli wp plugin install smush
Reconstruire et redémarrer vos conteneurs
docker-compose up -d --build
Vérifier les processus actifs
docker-compose ps
Afficher WordPress dans VSCode
Nous montons le volume dans le conteneur WordPress au niveau du fichier docker-compose.yml
wordpress:
build:
context: .
dockerfile: php.dockerfile # Utiliser le fichier php.dockerfile
restart: always
volumes:
- ./wordpress:/var/www/html
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
Il est temps de relaire un buid et de tester
docker-compose up -d --build
Vérifiez les éventuelles erreurs affichées dans le terminal.
Forcez me redémarrage du conteneur WordPress
docker-compose restart wordpress
Listez les processus actifs
docker ps
En cas de problème
docker logs
Pour lancer les conteneurs dans leur ensemble
/docker-compose start
Nettoyer l’ensemble du système Docker en supprimant les conteneurs, images, réseaux et volumes inutilisés.
docker system prune -a
Supprimer les modules non utilisés
docker volume prune
En synthèse pour l’installation de WordPress avec un Dockerfile personnalisé
- Créez un Dockerfile:
- Définissez les instructions pour installer et configurer WordPress, PHP, MySQL/MariaDB, etc.
- Incluez les dépendances, les variables d’environnement et les configurations spécifiques.
- Construisez l’image Docker:
- Utilisez docker build pour créer une image à partir de votre Dockerfile.
- Spécifiez un nom et un tag pour votre image.
- Exécutez le conteneur Docker:
- Utilisez docker run comme décrit précédemment, en faisant référence à l’image que vous avez créée.
Utiliser Docker Compose: cet outil vous simplifie la gestion de plusieurs conteneurs et de la configuration.
Installer phpMyAdmin dans le conteneur pour gérer la base de données MySQL/MariaDB graphiquement.
Utiliser des volumes Docker: persistez les données WordPress et les fichiers de configuration en dehors du conteneur.
Dans un prochain épisode je vous montrerai comment installer un WordPress depuis une image préparée.
Ressources
OpenClassrooms Optimisez votre déploiement en utilisant Docker
Exemples de fichiers Docker Compose pour WordPress
https://docs.docker.com/samples/wordpress/
https://github.com/docker/awesome-compose/blob/master/wordpress-mysql/compose.yaml