Voici le treizième volet de la formation Docker. Dans mon précédent article, 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
.
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 :
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 article 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/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: ...
Utilisez deux espaces pour chaque indentation. Évitez les tabulations.
Je vérifie la syntaxe de mon fichier :
$ yamllint compose.yaml
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 ps
recense trois conteneurs actifs :wordpress-compose-mariadb-1
wordpress-compose-phpmyadmin-1
wordpress-compose-wordpress-1
docker network ls
affiche un nouveau réseau Docker :wordpress-compose_default
docker volume ls
montre 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
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.yaml
commence avec un élémentservices
suivi d’une liste indentée des services en question (en l’occurrencemariadb
,phpmyadmin
etwordpress
). - 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
services
peut être suivie d’autres sections de premier niveau commevolumes
ounetworks
. - Le mot-clé
image
définit l’image Docker à utiliser. - La directive
restart: always
se 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 :
Exercice
- Créez un répertoire de travail
wordpress-exercice
. - Placez-vous dans ce répertoire.
- Essayez de reproduire la configuration décrite dans l’exercice précédent.
- Servez-vous du fichier
compose.yaml
ci-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.
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