$
}
<
]
*
<

NOUS LES DEVS

Docker-compose

A la découverte de Docker partie 9

Niveau : intermédiaire
</> </> </>

Adios --link

Dans l’article précédent, je t’avais montré comment lancer plusieurs conteneurs pour les lier ensemble et créer un WordPress fonctionnel. Et bien, dans cet article, je vais exactement faire la même chose, mais cette fois-ci, en utilisant une nouvelle méthode, plus simple et plus rapide, appelée Docker Compose.

De l'orchestration

Il faut voir Docker Compose comme un chef d’orchestre. Tu lui donnes une partition (un fichier yml) et il va s’occuper de configurer et lancer tous les conteneurs décrits dans le fichier et rendre le tout cohérent (fonctionnel) via une seule ligne de commande, la classe hein.

Version de la "partition"

Avant d’exécuter la moindre commande, je vais devoir fabriquer cette fameuse partition qui doit respecter des règles précises. Déjà, le fichier doit s’appeler docker-compose.yml, je vais donc commencer par le créer.

La première ligne que doit contenir ce fichier est la version de la partition, si je puis m’exprimer ainsi. Grâce à ce numéro de version, le binaire Docker Compose va savoir comment interpréter la suite. Dans mon cas, je peux choisir du 3.7, mais j’utilise du 3.1 parce que je sais que ça marche et que je n’ai jamais eu besoin de changer ! Si tu veux savoir quelle version tu peux utiliser, il va falloir jeter un p’tit coup d’oeil à la table de compatibilité et comparer avec la version de ton Docker Engine.

docker-engine-version

Donc au niveau de mon fichier docker-compose.yml, je me retrouve avec ça :

version: '3.1'

Services et structure de fichier

Ensuite, j’ajoute bêtement le mot services: et puis je vais pouvoir décrire à la ligne les différents services (conteneurs) dont je vais avoir besoin.

version: '3.1'

services:

Pour cet exemple, je vais bien sûr partir sur un bon vieux WordPress car il nécessite justement deux conteneurs (Apache et MySql) et que j’utilise beaucoup WordPress.

Alors très important, à chaque indentation je dois mettre deux espaces (dans mon cas, une tabulation ne fonctionne pas). Je dois t’avouer que je n’ai pas encore lu la documentation sur la structure des fichiers, mais je sais qu’à un moment donné, j’ai copié un truc du web pour faire des tests et que ça a marché.

Service Wordpress

Si tu as lu l’article juste avant, tu n’auras pas de mal à comprendre, mais je vais quand même mettre des commentaires pour chaque ligne, histoire qu’on reste d’accord.

  gol_wordpress: #nom du conteneur
    image: wordpress:latest #nom de l'image dans le registry : tag de l'image
    restart: always #Specifie si on veut redémarrer le conteneur s'il se ferme
    ports: #Pour lister les différents ports, c'est l'équivalent de l'option -p
      - 8004:80
    environment: #Les variables d'environnement, équivalent au flag -e
      WORDPRESS_DB_HOST: gol_db #Ici ce sera le nom de mon conteneur MySQL
      WORDPRESS_DB_USER: yann
      WORDPRESS_DB_PASSWORD: 123
      WORDPRESS_DB_NAME: db-gol-wp
      WORDPRESS_TABLE_PREFIX: gol_
    volumes: #Pareil c'est pour spécifier les volumes, c'est comme faire un -v
      - /Users/golendercaria/Docker/wordpress10sec/SITE:/var/www/html/

Service MySQL

Et la description pour le conteneur MySQL où je dois juste faire le lien avec ce que j’ai mis en haut.

  gol_db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: db-gol-wp
      MYSQL_USER: yann
      MYSQL_PASSWORD: 123
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    ports:
      - 33064:3306
    volumes:
      - /Users/golendercaria/Docker/wordpress10sec/DB/:/var/lib/mysql/

Le fichier docker-compose.yml que je viens d’écrire est disponible sur mon Github (tag learning_wordpress).

Une commande pour les gouverner tous

Il ne me reste plus qu’une chose à faire, lancer la commande docker-compose up dans le même répertoire que mon fichier.

docker-compose up

Je vois plein de trucs défiler dans le terminal avec tout ce que Docker est en train de faire. Au bout d’une quinzaine de secondes, quand ça se calme un peu, je vais sur l’URL http://localhost:8004 et je vois que mon WordPress est bien accessible, génial !!!

docker_wordpress_image

Avec l’option -d (en mode tâche de fond), j’ai un message qui m’informe lorsque mon application est prête et je peux te dire que c’est vraiment très rapide.

docker-compose up -d
Creating wordpress10sec_gol_db_1        ... done
Creating wordpress10sec_gol_wordpress_1 ... done

Un Wordpress en 30 secondes

Grâce à l’utilisation d’un fichier et d’une seule commande pour tout faire, ça devient un véritable plaisir de lancer une application WordPress. De plus, outre le fait que ça soit facile, c’est aussi rapide. Maintenant, lancer un conteneur WordPress qui tourne et qui fonctionne ne prend pas plus de 30 secondes, et franchement, ça n’augure que des bonnes choses pour la suite de cette découverte.

12/08/2019

Yann Vangampelaere - nouslesdevs -

NOUS LES DEVS

Vous aimez ce que je fais ? Vous voulez que j'en fasse plus ? dans le développement du blog.