Docker Compose
Objectif de cet atelier pratique
- Simplifier davantage l'installation de WordPress avec l'outil
docker compose
Encore plus de confort
Dans le précédent atelier pratique, nous avons approfondi la combinaison
de plusieurs conteneurs à l'aide d'un réseau Docker. La mise en place d'une
telle configuration avec docker run simplifie déjà pas mal les choses pour
installer une application complexe comme WordPress, mais il existe un outil
bien plus confortable pour ce genre de tâche, et c'est ce qui fait l'objet de
cet atelier pratique.
La commande docker compose évalue le contenu d'un fichier compose.yaml dans
le répertoire courant et configure les conteneurs correspondants. Cette manière
de faire est extrêmement pratique lorsqu'il s'agit de combiner plusieurs
conteneurs. Pour utiliser docker compose, il suffit de se familiariser avec
la syntaxe du fichier compose.yaml.
Syntaxe : docker compose ou docker-compose ?
Dans le passé, docker-compose (avec le trait d'union) était une commande
distincte indépendante de docker. Les versions actuelles de Docker ont
intégré compose (sans le trait d'union) comme une commande officielle de
docker.
YAML
Si vous travaillez avec docker compose, vous devez d'abord créer un fichier
compose.yaml. L'extension .yaml désigne ici le format YAML (YAML Ain't
Markup Language). Le web regorge de tutos d'introduction à YAML. La page
anglophone de Wikipedia fournit une vue d'ensemble synthétique sur la syntaxe
de YAML avec une poignée d'exemples parlants :
Validez votre fichier YAML
N'hésitez pas à utiliser un validateur de syntaxe pour éviter les erreurs
bizarres. Pour ma part, j'aime bien l'outil yamllint.
Hello Compose !
Pour vous faire une petite démonstration pratique de la syntaxe de
compose.yaml, j'ai adapté la configuration du précédent atelier pratique
avec un serveur de bases de données MariaDB, une interface d'administration
PHPMyAdmin et le moteur de blog WordPress.
Pour commencer, je crée un répertoire de travail :
$ mkdir -v wordpress-compose
mkdir: création du répertoire 'wordpress-compose'
$ cd wordpress-compose/
J'ouvre mon éditeur de texte préféré et je crée le fichier compose.yaml
suivant :
--- # compose.yaml
services:
# MariaDB
mariadb:
image: mariadb:latest
volumes:
- blog-db-volume:/var/lib/mysql
environment:
MYSQL_RANDOM_ROOT_PASSWORD: 1
MYSQL_DATABASE: wp
MYSQL_USER: wpuser
MYSQL_PASSWORD: motdepasse
restart: always
# PHPMyAdmin
phpmyadmin:
image: phpmyadmin:latest
environment:
PMA_HOST: mariadb
ports:
- "8080:80"
restart: always
# WordPress
wordpress:
image: wordpress:latest
volumes:
- blog-wp-volume:/var/www/html/wp-content
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: mariadb
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_NAME: wp
WORDPRESS_DB_PASSWORD: motdepasse
restart: always
volumes:
blog-db-volume:
blog-wp-volume:
...
Syntaxe
-
Utilisez deux espaces pour chaque indentation.
-
Évitez les tabulations.
Je vérifie la syntaxe de mon fichier :
Je démarre mon réseau de conteneurs :
$ docker compose up -d
[+] Running 6/6
✔ Network wordpress-compose_default Created 0.2s
✔ Volume "wordpress-compose_blog-db-volume" Created 0.0s
✔ Volume "wordpress-compose_blog-wp-volume" Created 0.0s
✔ Container wordpress-compose-mariadb-1 Started 0.0s
✔ Container wordpress-compose-phpmyadmin-1 Started 0.0s
✔ Container wordpress-compose-wordpress-1 Started 0.0s
En moins d'une seconde, ma configuration est prête à l'emploi. PHPMyAdmin est joignable à l'adresse http://localhost:8080 :
WordPress s'affiche à l'adresse http://localhost :
J'établis un premier état des lieux, et je me rends compte que le nom de mon
répertoire de travail wordpress-compose est utilisé pour nommer les conteneurs,
les volumes et le réseau :
-
docker psrecense trois conteneurs actifs :-
wordpress-compose-mariadb-1 -
wordpress-compose-phpmyadmin-1 -
wordpress-compose-wordpress-1
-
-
docker network lsaffiche un nouveau réseau Docker :wordpress-compose_default
-
docker volume lsmontre la présence de deux nouveaux volumes :-
wordpress-compose_blog-db-volume -
wordpress-compose_blog-wp-volume
-
Pour arrêter et supprimer tous les conteneurs de la configuration, j'utilise la commande suivante :
$ docker compose down
[+] Running 4/4
✔ Container wordpress-compose-wordpress-1 Removed 1.3s
✔ Container wordpress-compose-mariadb-1 Removed 0.4s
✔ Container wordpress-compose-phpmyadmin-1 Removed 1.3s
✔ Network wordpress-compose_default Removed 0.2s
Les volumes n'ont pas été supprimés :
$ docker volume ls
DRIVER VOLUME NAME
local wordpress-compose_blog-db-volume
local wordpress-compose_blog-wp-volume
Le cas échéant, je devrai les supprimer manuellement :
$ docker volume rm wordpress-compose_blog-db-volume
$ docker volume rm wordpress-compose_blog-wp-volume
Faire le ménage à l'arrêt
Alternativement, la commande docker compose down --volumes permet de
supprimer à la louche les conteneurs, les réseaux et les volumes.
Le fichier compose.yaml
Vous avez sans doute appliqué une petite dose de linguistique intuitive pour
comprendre notre premier exemple de fichier compose.yaml. Sans aller dans les
explications exhaustives qui épuisent le sujet aussi bien que le lecteur,
relevons quand-même quelques détails dans la syntaxe de ce fichier.
-
En règle générale,
compose.yamlcommence avec un élémentservicessuivi d'une liste indentée des services en question (en l'occurrencemariadb,phpmyadminetwordpress). -
Les propriétés de chaque service sont à nouveau indentées et définies par une série de mots-clés (
image,volumes,environment, etc.). -
L'indentation utilise deux espaces et pas de tabulations.
-
La section de premier niveau
servicespeut être suivie d'autres sections de premier niveau commevolumesounetworks. -
Le mot-clé
imagedéfinit l'image Docker à utiliser. -
La directive
restart: alwaysse charge de relancer les conteneurs même après un redémarrage de l'hôte.
Reportez-vous à la documentation officielle pour la référence complète :
À vous de jouer !
Challenge n° 1
-
Créez un répertoire de travail
wordpress-atelier. -
Placez-vous dans ce répertoire.
-
Essayez de reproduire la configuration décrite dans l'atelier précédent.
-
Servez-vous du fichier
compose.yamlci-dessus comme point de départ. -
Démarrez la configuration avec
docker compose. -
Initialisez WordPress.
-
Ouvrez l'interface d'administration de PHPMyAdmin.
-
Notez les noms des trois conteneurs en cours d'exécution.
-
Notez le nom du réseau Docker qui relie les trois conteneurs.
-
Notez les noms des volumes pour les données persistantes.
-
Arrêtez et supprimez les conteneurs, le réseau et les volumes en utilisant une seule commande.
Challenge n° 2
-
Créez un répertoire de travail
drupal-atelier. -
Placez-vous dans ce répertoire.
-
Essayez de reproduire la configuration décrite ici (Drupal + PostgreSQL).
-
Là aussi, servez-vous du fichier
compose.yamlci-dessus comme point de départ.


