Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Dernière révisionLes deux révisions suivantes
technique:tech_team:pres_compose [2021/10/17 03:23] qduchemitechnique:tech_team:pres_compose [2021/11/15 23:19] qduchemi
Ligne 2: Ligne 2:
 ## C'est quoi Docker Compose ? ## C'est quoi Docker Compose ?
  
 +Docker Compose est un outil d'**orchestration** de conteneurs. 
  
 +### Mais pourquoi diable un énième outil ?
 +
 +<bootnote question>C'est pas ce que fait déjà Docker, de gérer des conteneurs ?</bootnote>
 +
 +Pour comprendre pourquoi on utilise un outil supplémentaire, il est utile de revenir [[technique:tech_team:tuto_docker|à la page précédente]], où on a fabriqué et lancé une image Docker. Le conteneur avait un nom, un mapping de ports et un montage. La commande pour le lancer était la suivante :
 +
 +```
 +docker run -d --name quentin -p 80:80 -v quentin:/var/www/html nginx:quentin
 +```
 +
 +C'est déjà long, et encore, il n'y a que quelques options. Imagine qu'à chaque mise à jour, il faille taper la même commande pour relancer le conteneur! C'est long et pénible, il y a des risques d'erreurs, la « configuration » du conteneur n'est jamais stockée quelque part...
 +
 +Et c'est là qu'intervient Docker Compose. Compose permet de décrire à quoi doit ressembler un conteneur dans un fichier de configuration, et de gérer son cycle de vie avec des commandes simples.
 +
 +C'est génial, parce que le fichier de configuration peut être versionné sur Git, partagé entre plusieurs machines et modifié collaborativement, contrairement à une grande ligne de commande.
 +
 +### Cas d'usage de Compose
 +
 +Compose est particulièrement indiqué pour les applications avec plusieurs conteneurs. Par exemple, Mattermost n'est pas un seul conteneur : c'est un serveur web et une base de données. Compose permet de décrire les dépendances entre ces conteneurs, et de les lancer d'un seul coup.
 +
 +Compose est aussi très utile pour déclarer des volumes ou des réseaux Docker, dont on reparlera avec [[technique:tech_team:traefik|Traefik]].
 +
 +Enfin, toutes les commandes Compose permettent de vérifier les journaux d'une application, de lister ses processus, de recréer intelligemment les conteneurs quand il y a besoin... Bref, on ne rentre pas dans tous les détails, place à la pratique!
 +
 +### Un détour par le format YAML
 +
 +Les fichiers de configuration de Docker Compose sont au format `YAML`. C'est un format qui exprime la « hiérarchie » par des espaces. Un exemple simple où je veux décrire des groupes de musiques et des salles de concert :
 +
 +```yaml
 +artists:
 +  - title: System of a Down
 +    year: 1992
 +    albums:
 +      - ...
 +  - title: Mansfield.TYA 
 +    year: 2002
 +    
 +theaters:
 +  maroquinerie:
 +    title: La maroquinerie
 +  trianon:
 +    title: Le Trianon
 +```
 +
 +On voit qu'il y a deux « blocs » de premier niveau, et qu'à chaque décalage on décrit quelque chose de plus précis. Ce qu'il y avant un `:` s'appelle une clé et ce qu'il y a après s'appelle une valeur.
 +
 +<bootnote>
 +Il y a une différence subtile entre les artistes et les salles. Les artistes sont listés avec des `-` alors que les salles n'ont pas de tiret. Pourquoi ?
 +
 +C'est juste une histoire de nommage. Les artistes ne sont pas nommés, c'est simplement une liste. Ainsi, on pourrait dire « le premier artiste de `artists` », mais on ne peut pas le désigner directement.
 +Les salles sont nommées, on peut s'y référer directement, par exemple dire la salle `trianon`. 
 +
 +En YAML, quand on a pas besoin de se référer explicitement à des sous-éléments, on utilise des tirets, et sinon on les nomme et on utilise pas de tirets.
 +</bootnote>
 +
 +### vim : un goût amer mais bien utile
 +
 +La dernière fois, on a vu comment éditer un fichier avec `nano`. `nano` est bien pratique pour faire des petites modifications, mais est mauvais quand il s'agit d'éditer des fichiers YAML. Il n'y a pas de coloration syntaxique, pas d'espace automatique en allant à la ligne... c'est un enfer.
 +
 +Je te propose donc de découvrir `vim`, un éditeur plus difficile à prendre en main mais très pratique pour éditer des fichiers YAML!
 +
 +On va faire au plus simple : tu ouvres ton fichier `docker-compose.yml` avec `vim` :
 +
 +```
 +vim docker-compose.yml
 +```
 +
 +Tu appuies sur `I` pour rentrer en mode "insertion". Tu écris ton texte. Quand tu as fini, tu appuies sur `Échap`.
 +
 +Enfin, tu appuies sur `:` pour rentrer en mode « commande », tu écris « wq » (_write_ and _quit_), puis `Entrée`. Et _voilà_ ! Ça peut paraître contre-intuitif parce qu'on ne rentre pas dans le pourquoi du comment, mais c'est tout ce que tu as besoin de savoir. Démonstration :
 +
 +{{ :technique:tech_team:vim.gif |}}
 +
 +Note comment la barre du bas change au fil des commandes (`I` puis `:wq`).
  • technique/tech_team/pres_compose.txt
  • de qduchemi