DockerVoici 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.

AstuceDans 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 :

AstuceN’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:
...

ImportantUtilisez 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 :

PHPMyAdmin

WordPress s’affiche à l’adresse http://localhost :

WordPress

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

AstuceAlternativement, 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ément services suivi d’une liste indentée des services en question (en l’occurrence mariadb, phpmyadmin et wordpress).
  • 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 comme volumes ou networks.
  • 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

Laisser un commentaire

Emplacement de l’avatar

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