DockerAprè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

AstuceSi 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 utilisateur wpuser 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 et MYSQL_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éseau blog-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 :

PHPMyAdmin

  • 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éseau blog-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 et WORDPRESS_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

WordPress

AstuceSi 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

ImportantLe 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-le db avec un nom d’hôte identique. Rattachez-le au réseau blognet. Créez une base de données blog accessible à l’utilisateur bloguser identifié par le mot de passe pass123. Le mot de passe root MySQL sera créé au hasard. Les données persistantes du serveur MariaDB seront stockées dans un volume dbvol.
  • Lancez un deuxième conteneur basé sur l’image de PHPMyAdmin (phpmyadmin/phpmyadmin). Nommez-le dbadmin avec un nom d’hôte identique. Rattachez-le au réseau blognet. Il devra accéder à la base blog stockée dans le conteneur db. 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-le web avec un nom d’hôte identique. Rattachez-le au réseau blognet. Utilisez la base de données blog disponible dans le conteneur db. Le contenu de WordPress comme les images et les plug-ins seront stockées dans un volume persistant webvol. 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

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *