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.


