Après quelques mois de pause, voici le douzième volet de la formation Docker. Dans mon précédent article, nous avons abordé la communication entre les conteneurs par le biais de réseaux personnalisés qui permettent de séparer des groupes de conteneurs. Aujourd’hui nous allons revisiter l’installation de l’application WordPress dans le but de vous familiariser un peu plus avec la logique et les mécanismes de Docker.
Cette fois-ci, nous allons combiner trois conteneurs :
- MariaDB
- PHPMyAdmin
- WordPress
Si je vous montre ici l’installation manuelle d’un réseau Docker avec une série de conteneurs, c’est avant tout dans un but pédagogique. Dans la pratique, ce genre de configuration s’effectuera bien plus confortablement avec docker compose
, ce qui fera d’ailleurs l’objet de notre prochain atelier pratique.
Un réseau pour nos conteneurs
Pour commencer, nous allons créer un réseau Docker nommé blog-wordpress
:
$ docker network create blog-wordpress
Tous nos conteneurs vont pouvoir communiquer entre eux par le biais de ce réseau.
MariaDB
Vous avez déjà eu l’occasion de vous familiariser avec le serveur de bases de données MariaDB dans notre précédent exemple. Cette fois-ci nous allons nous y prendre un peu différemment :
$ docker run -d --name mariadb \ -h mariadb \ --network blog-wordpress \ -e MYSQL_RANDOM_ROOT_PASSWORD=1 \ -e MYSQL_DATABASE=wp \ -e MYSQL_USER=wpuser \ -e MYSQL_PASSWORD=motdepasse \ -v blog-db-volume:/var/lib/mysql \ mariadb
- Au lancement, MariaDB crée une nouvelle base de données vide
wp
avec un utilisateurwpuser
correspondant. - Par la suite PHPMyAdmin et WordPress auront accès à cette base.
- L’image MariaDB initialise la base à partir du moment où vous transmettez les variables
MYSQL_DATABASE
,MYSQL_USER
etMYSQL_PASSWORD
àdocker run
à l’aide de l’option-e
. - Les autres conteneurs n’ont pas besoin de connaître le mot de passe
root
MariaDB. On peut donc en créer un au hasard grâce àMYSQL_RANDOM_ROOT_PASSWORD=1
. - L’utilisation d’un mot de passe « bidon » en clair n’est pas idéal en termes de sécurité, mais on va faire avec pour l’instant.
- Notez la création du volume
blog-db-volume
pour rendre les données de MariaDB persistantes.
PHPMyAdmin
PHPMyAdmin est une interface web populaire pour l’administration de MariaDB. On va lancer le conteneur correspondant :
$ docker run -d --name phpmyadmin \ -h phpmyadmin \ --network blog-wordpress \ -p 8080:80 \ -e PMA_HOST=mariadb \ phpmyadmin/phpmyadmin
- L’option
--network
permet à ce conteneur d’entrer en communication avec les autres conteneurs du réseaublog-wordpress
. - L’option
-p
renvoie l’interface web du conteneur vers le port 8080 de l’hôte. - La variable
PMA_HOST
indique le nom d’hôte du serveur MariaDB dans le réseau. - Rappelez-vous que les réseaux Docker gèrent la résolution des noms en interne. Pour accéder à un conteneur, utilisez le nom défini par l’option
--name
.
À présent on peut déjà effectuer un premier test en ouvrant l’adresse http://localhost:8080
dans un navigateur web :
- Connectez-vous avec l’identifiant
wpuser
et le mot de passe « bidon »motdepasse
. - Une fois connecté, l’interface vous permet d’interroger les données des tables ou de créer de nouvelles tables dans la base
wp
.
WordPress
Il ne nous reste plus qu’à mettre en place la dernière brique logicielle de notre configuration :
$ docker run -d --name wordpress \ -h wordpress \ --network blog-wordpress \ -v blog-wp-volume:/var/www/html/wp-content \ -p 80:80 \ -e WORDPRESS_DB_HOST=mariadb \ -e WORDPRESS_DB_USER=wpuser \ -e WORDPRESS_DB_NAME=wp \ -e WORDPRESS_DB_PASSWORD=motdepasse \ wordpress
- Là aussi, l’option
--network
relie ce conteneur au réseaublog-wordpress
. - L’installateur WordPress s’affichera sur le port 80 de l’hôte à l’adresse
http://localhost
. - Le volume
blog-wp-volume
rendra persistantes les données de notre blog comme les images téléversées, les plug-ins, etc. - Les variables
WORDPRESS_DB_HOST
,WORDPRESS_DB_USER
,WORDPRESS_DB_NAME
etWORDPRESS_DB_PASSWORD
permettent la connexion au serveur de bases de données. - Tout comme pour PHPMyAdmin, le nom d’hôte du serveur de bases de données correspond au nom défini par l’option
--name
lors du lancement de MariaDB.
La prise en main de WordPress se résume en deux étapes simples :
- le choix de la langue du blog
- la définition de l’administrateur WordPress
Si vous avez déjà installé WordPress manuellement, vous avez sans doute pu apprécier la corvée considérable d’installer et de configurer successivement tous les composants nécessaires au bon fonctionnement de l’application. Vous voyez qu’avec Docker la procédure est déjà beaucoup plus rapide.
Arrêter et redémarrer les conteneurs
Si vous n’avez pas besoin des trois conteneurs, rien ne vous empêche de les arrêter pour les relancer en cas de besoin. Vous pouvez d’ailleurs fournir les trois conteneurs en argument « à la louche » comme ceci :
$ docker stop mariadb phpmyadmin wordpress
Le redémarrage est tout aussi simple :
$ docker start mariadb phpmyadmin wordpress
Mise à jour
Lorsqu’une mise à jour est disponible pour les images de MariaDB, PHPMyAdmin et WordPress, vous pouvez l’installer en suivant la procédure décrite ci-dessous.
Pour commencer, arrêtez et supprimez les conteneurs :
$ docker stop mariadb phpmyadmin wordpress $ docker rm mariadb phpmyadmin wordpress
Récupérez les dernières mises à jour des images :
$ docker pull mariadb $ docker pull phpmyadmin/phpmyadmin $ docker pull wordpress
MariaDB ne doit plus être initialisé, il se lance donc plus simplement :
$ docker run -d --name mariadb \ -h mariadb \ --network blog-wordpress \ -v blog-db-volume:/var/lib/mysql \ mariadb
PHPMyAdmin se lance tout comme à l’initialisation :
$ docker run -d --name phpmyadmin \ -h phpmyadmin \ --network blog-wordpress \ -p 8080:80 \ -e PMA_HOST=mariadb \ phpmyadmin/phpmyadmin
Curieusement, il en va de même pour WordPress :
$ docker run -d --name wordpress \ --network blog-wordpress \ -h wordpress \ -v blog-wp-volume:/var/www/html/wp-content \ -p 80:80 \ -e WORDPRESS_DB_HOST=mariadb \ -e WORDPRESS_DB_USER=wpuser \ -e WORDPRESS_DB_NAME=wp \ -e WORDPRESS_DB_PASSWORD=motdepasse \ wordpress
Le fichier de configuration wp-config.php
n’est pas rangé dans l’arborescence des données persistantes en-dessous de wp-content
. Par conséquent, il a besoin des variables d’environnement WORDPRESS_DB_HOST
etc. pour être régénéré.
Exercice
Dans cet exercice, il s’agit grosso modo de recréer un blog avec les mêmes briques logicielles que dans l’exemple ci-dessus, mais avec des paramètres différents.
- Créez un réseau Docker
blognet
. - Lancez un conteneur basé sur l’image officielle de MariaDB (
mariadb
). Nommez-ledb
avec un nom d’hôte identique. Rattachez-le au réseaublognet
. Créez une base de donnéesblog
accessible à l’utilisateurbloguser
identifié par le mot de passepass123
. Le mot de passeroot
MySQL sera créé au hasard. Les données persistantes du serveur MariaDB seront stockées dans un volumedbvol
. - Lancez un deuxième conteneur basé sur l’image de PHPMyAdmin (
phpmyadmin/phpmyadmin
). Nommez-ledbadmin
avec un nom d’hôte identique. Rattachez-le au réseaublognet
. Il devra accéder à la baseblog
stockée dans le conteneurdb
. L’interface web devra être accessible sur le port 9090 de l’hôte. - Lancez un troisième conteneur basé sur l’image officielle de WordPress (
wordpress
). Nommez-leweb
avec un nom d’hôte identique. Rattachez-le au réseaublognet
. Utilisez la base de donnéesblog
disponible dans le conteneurdb
. Le contenu de WordPress comme les images et les plug-ins seront stockées dans un volume persistantwebvol
. Le blog devra être accessible sur le port 9000 de l’hôte.
Lire la suite : Docker Compose
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
0 commentaire