Combiner les conteneurs
Objectif de cet atelier pratique
- Revisiter l'installation de l'application WordPress dans le but de nous familiariser un peu plus avec la logique et les mécanismes de Docker
Cette fois-ci, nous allons combiner trois conteneurs :
- 
MariaDB 
- 
PHPMyAdmin 
- 
WordPress 
Une installation pédagogique
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 :
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 wpavec un utilisateurwpusercorrespondant.
- 
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_USERetMYSQL_PASSWORDàdocker runà l'aide de l'option-e.
- 
Les autres conteneurs n'ont pas besoin de connaître le mot de passe rootMariaDB. 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-volumepour 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
- 
L'option --networkpermet à ce conteneur d'entrer en communication avec les autres conteneurs du réseaublog-wordpress.
- 
L'option -prenvoie l'interface web du conteneur vers le port 8080 de l'hôte.
- 
La variable PMA_HOSTindique 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 wpuseret 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 --networkrelie 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-volumerendra 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_NAMEetWORDPRESS_DB_PASSWORDpermettent 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 --namelors 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 
Une installation simplifiée
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 :
Le redémarrage est tout aussi simple :
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 :
Récupérez les dernières mises à jour des images :
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
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
La configuration n'est pas persistante
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é.
À vous de jouer !
Dans cet atelier pratique, 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-ledbavec un nom d'hôte identique. Rattachez-le au réseaublognet. Créez une base de donnéesblogaccessible à l'utilisateurbloguseridentifié par le mot de passepass123. Le mot de passerootMySQL 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). Nommez-ledbadminavec un nom d'hôte identique. Rattachez-le au réseaublognet. Il devra accéder à la baseblogstocké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-lewebavec un nom d'hôte identique. Rattachez-le au réseaublognet. Utilisez la base de donnéesblogdisponible 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.


