‫Cette section se concentrera exclusivement sur Docker Compose, qui combine un outil de
‫ligne de commande et un fichier de configuration. Les conditions requises pour cette section sont que
‫vous devez vraiment connaître beaucoup de principes de base des dernières sections autour des images et des conteneurs.
‫Pendant que nous suivons ce cours, vous allez probablement commencer à m'entendre devenir de plus
‫en plus excité parce que les choses ne cessent de s'améliorer.
‫Droite?
‫Lorsque vous apprenez un composant, vous vous dites: «mec, fixations et volumes sont vraiment cool. Cela va me faire gagner du
‫temps. Je peux imaginer comment je vais l'utiliser. Bla bla bla bla.
‫Ensuite, je vais venir avec la prochaine chose qui sera encore meilleure que ce que vous venez d’apprendre.
‫Dans ce cas, cela ne pourrait être plus vrai.
‫Docker Compose. Alors c'est quoi? Et pourquoi on s'en soucie? Tellement peu de services logiciels sont vraiment autonomes.
‫Lorsque vous pensez à vos conteneurs, ils constituent une solution de processus unique et nous allons rarement utiliser
‫un seul conteneur pour résoudre un problème ou fournir un service à nos clients.
‫Nos conteneurs auront souvent besoin d'autres conteneurs tels que SQL ou une valeur de clé. Et d'autres applications que nous devrons exécuter dans
‫des conteneurs, tels que des mandataires, des interfaces Web ou des employés d'arrière-plan, etc.
‫Et si nous avions un moyen de relier ensemble tous ces éléments de notre solution, sans
‫avoir à nous rappeler toutes les options d'exécution de notre menu fixe, puis à les placer dans des réseaux virtuels discrets
‫avec des relations entre eux et à ne dévoiler que le public ports, puis les faire tous tourner et les abattre avec
‫une commande.
‫Eh bien, c'est Docker Compose.
‫Avant de plonger, nous devons préciser que Docker
‫Compose est composé de deux parties. La première partie est le fichier YAML et c'est très simple à comprendre.
‫Il est écrit en YAML, et si vous n’avez jamais traité YAML, c’est un langage de configuration très simple.
‫C'est presque aussi simple qu'un fichier INI.
‫Je pense en fait que c'est plus facile parce que cela montre la hiérarchie.
‫Nous allons plonger dans cela. Ce fichier est l'endroit où vous spécifieriez tous les conteneurs que
‫vous devez exécuter, les réseaux dont vous avez besoin, tous les volumes dont vous pourriez avoir besoin, les variables d'environnement, les images et toutes sortes d'autres
‫options de configuration.
‫Ensuite, la deuxième partie de Docker Compose est un outil CLI, composé de docker, que nous
‫utilisons normalement uniquement pour les tests et dev locaux, en utilisant le fichier YAML que nous avons créé pour simplifier nos commandes Docker.
‫Parlons de ce fichier Docker Compose.
‫Il existe en fait des versions des éléments que vous pouvez insérer dans le fichier de composition. Ainsi, lorsque Docker Compose a été créé il y a des années, il s'appelait
‫en fait "Fig" et était supposé être la version 1. En fait, il n'a même
‫pas répertorié une version dans le fichier. Au fur et à mesure de sa maturation et de l'ajout
‫de nouvelles fonctionnalités à ce que le fichier peut contenir, telles que les réseaux et les volumes, ils ont créé la déclaration de version,
‫qui est en fait la première ligne du fichier. Ce fichier peut en fait être utilisé avec une CLI Docker Compose, dont nous parlerons
‫dans une minute.
‫Ceci, encore une fois, est principalement destiné à la gestion du développement local et permet simplement de se déplacer plus facilement
‫dans vos environnements sur votre ordinateur local.
‫Maintenant, à partir du début de 2017, nous avons la version 1. Que ce soit au-delà de cela, ces fichiers peuvent désormais être utilisés directement
‫avec la ligne de commande docker en production avec swarm. Bien sûr, la ligne de commande offre
‫une aide précieuse avec l’aide --help.
‫Lorsque nous examinons certains exemples, sachez que le fichier Docker Compose est un nom par défaut, mais que vous pouvez
‫en fait utiliser le nom de fichier de votre choix, à condition que son nom soit bien YAML et que vous utilisiez le -f pour spécifier le
‫fichier que vous voulez. essaie d'utiliser.
‫Si j'ouvre mon éditeur et que je regarde le modèle ici, je voulais simplement montrer quelques-uns des contours de ce à quoi
‫cela est censé ressembler.
‫Nous avons la valeur de la version au début.
‫La version la plus récente du premier trimestre de 2017 est la 3. 1.
‫Mais je le fais toujours au moins la version 2. Si vous n’ajoutez pas cette ligne, elle est toujours supposée être la version
‫1.
‫Mais je ne le recommande pas, car vous perdez beaucoup de fonctionnalités.
‫Donc, je commence généralement avec la version 2. Ensuite, si j'ai besoin de fonctionnalités spécifiques en dehors des versions 3 et 3. 1, je finis
‫par taper le numéro de version. Vous verrez que les trois autres sections principales sont les
‫services, les volumes et les réseaux, non?
‫Donc, c'est hiérarchique.
‫Sous services, tout peut représenter deux ou quatre espaces, mais il doit être cohérent.
‫Si vous ne faites que rechercher YAML sur Internet, vous trouverez quelques sites qui vous expliqueront
‫comment formater ce fichier.
‫Si vous utilisez un éditeur moderne, il parlera réellement le langage YAML et saura comment gérer
‫ces fichiers et leur formatage.
‫Habituellement, ici, vous avez au minimum des services, qui ne sont en réalité que des conteneurs.
‫La raison pour laquelle ils appellent en réalité des services est que chaque conteneur que vous créez ici peut contenir
‫plusieurs de ces conteneurs à des fins de redondance. Donc, ils avaient besoin de trouver un
‫mot différent.
‫Je pense que les services sont excellents parce que c’est essentiellement ce que vous faites. Droite?
‫Chaque conteneur, ou conteneurs, que vous utilisez, fournit généralement un service à quelque
‫chose.
‫Sous le nom du service, vous pouvez l'appeler comme vous le souhaitez.
‫Il n'est pas nécessaire que ce soit le nom de l'image ou quoi que ce soit.
‫Ce pourrait être Barney pour le nom du service, mais ce sera le nom DNS, que nous découvrirons plus tard,
‫qui est utilisé dans vos réseaux Docker.
‫Semblable à lorsque vous donnez le nom --name à une commande d'exécution de menu fixe.
‫Ici, j'ai montré que nous pouvons éventuellement spécifier l'image. Nous pouvons spécifier la commande
‫alternative à exécuter. Si nous voulions écraser la commande spécifiée dans l'image lors de son exécution,
‫nous pouvons le faire ici.
‫En gros, tout ce que nous faisons à partir de la commande d'exécution du menu fixe, nous pouvons les enregistrer ici. Parce que c’est vraiment ce
‫dont il s’agit, il ne faut pas oublier tout le travail dans la commande docker
‫run pour les choses que vous exécutez constamment.
‫Si vous avez vos propres environnements de développement, ou vos propres outils, vous ne voudrez probablement pas
‫taper ces commandes encore et encore. Et les scripts shell ne peuvent faire que beaucoup.
‫Droite?
‫Donc, ce fichier remplacerait en réalité un script shell qui automatiserait vos commandes d'exécution de docker.
‫C'est une bien meilleure façon de le faire.
‫C'est plus facile à lire et mieux documenté.
‫Vous remarquerez que les espaces ici sont autorisés.
‫Vous pouvez avoir des espaces dans les commentaires où vous voulez.
‫Si vous avez plusieurs services, il vous suffit de vous assurer que ce sont des noms uniques.
‫Ensuite, les autres parties que nous spécifions sont les volumes et les réseaux. Et encore une fois, ceux-ci sont également facultatifs.
‫C'est fondamentalement les mêmes règles que lorsque vous exécutez à partir de la ligne de commande.
‫Si vous deviez un jour utiliser les commandes docker volume create ou docker network, vous ne devez
‫pas toujours le faire.
‫Cela dépend de votre situation.
‫Vous pouvez les mettre ici aussi.
‫Regardons un monde réel, un exemple simple.
‫Vous vous souvenez que dans la dernière section, nous avions une conférence dans laquelle nous utilisions très rapidement Jekyll pour faire un exemple
‫de montage lié.
‫Donc, voici à quoi ressemblerait le fichier de composition pour cette commande d'exécution du menu fixe, et vous verrez
‫que j'ai spécifié l'image ici.
‫Je l'ai nommé Jekyll.
‫Je lui ai donné un volume. Vous remarquerez qu'au lieu d'utiliser le mot de passe, Compose comprend le point, ce qui signifie
‫que c'est le répertoire de travail actuel dans lequel je me trouve.
‫Il suffit d'utiliser ce répertoire à partir duquel j'exécute le fichier de composition. Ensuite, les ports ou l'option -p.
‫Vous remarquerez quelques petites choses à propos de YAML, où quand quelque chose n'a qu'une seule option,
‫comme s'il n'y avait qu'une image pour chaque service, ce serait généralement un format de clé et de valeur comme celui-ci.
‫S'il doit s'agir d'une liste d'éléments, tels que des volumes et des ports pour lesquels vous pouvez en avoir plusieurs, vous remarquerez
‫que le fichier de composition a généralement un pluriel. Au lieu de volume, ce sont des volumes. Et au lieu de port, ce sont les ports.
‫Et puis il y aura un format de liste avec un -.
‫Si nous sautons dans un autre exemple très rapide.
‫Vous verrez que dans celui-ci, il s'agit
‫en fait d'un exemple de configuration WordPress dans lequel le service de base de données exécute un conteneur
‫de base de données.
‫Et puis le conteneur de serveur Web WordPress en haut.
‫Vous remarquerez une petite différence avec ce problème: nous utilisons les variables d'environnement, qui
‫sont identiques à un -e sur la ligne de commande. Mais au lieu d’un format de liste où nous
‫avons un -, c’est
‫là encore une autre déclaration de clé et de valeur.
‫Dans ce format, nous n'utilisons pas le -, nous listons simplement la clé et la valeur.
‫Si je devais en ajouter un autre, je le ferais simplement ici. Tous ces éléments seraient transmis au conteneur lors
‫de son exécution à l'aide de la ligne de commande de composition.
‫Enfin, nous avons un autre exemple. Celui-ci est un peu plus compliqué. C’est en fait un
‫projet sur lequel je travaillais récemment pour configurer un cluster de serveurs à trois bases de données derrière un serveur Web Ghost.
‫Ghost est en fait un système de blog similaire à WordPress. Vous verrez que j'ai plusieurs
‫variables d'environnement pour chacun de ces conteneurs.
‫J'ai donc mon conteneur Ghost en haut. Ensuite, j’ai en fait un truc appelé
‫proxy SQL, placé devant les serveurs MySQL et servant de solution d’équilibrage de charge et de basculement.
‫Ensuite, j'ai chacun de mes deux serveurs MySQL. Vous remarquerez ici une autre option qui dit: «dépend de»
‫et qui en dépend est assez commune.
‫Cela aide fondamentalement Compose à comprendre la relation entre ces services. Il sait que si je
‫dois démarrer mon Ghost, je dois aussi en démarrer d’autres.
‫Vous pouvez voir ici que mon fantôme en dépend réellement. Nous entrerons dans les détails de la façon
‫dont cela fonctionne lors de conférences ultérieures.
‫Mais pour l’instant, c’est probablement beaucoup de choses à digérer, et toutes ces commandes, etc., mais croyez-en que
‫Docker a de très bons documents sur leur site Web. Si vous ne cherchez que le fichier Docker Compose
‫sur Google, vous le trouverez probablement dans les deux premiers résultats.
‫Ça va être sous les docs. docker. le site Web com, comme d’habitude,
‫et il y aura une documentation sur chaque petite clé et option de valeur que vous avez.
‫Vous verrez que cela dépend de ce que je viens de mentionner. Ici, vous verrez environnement où il montre différentes manières de
‫mettre des variables d’environnement. Ce qui est génial avec cette documentation, c’est qu’elle vous
‫donne de nombreux exemples.
‫Personnellement, je suis sur ce site tous les jours, tout comme je suis sur la page d’options de commande de docker ou la page d’options
‫de commande de composition.
‫Je fais constamment référence à ceux-ci parce qu'il existe franchement tellement de fonctionnalités que je ne me souviens
‫plus de toutes.
‫Je les garde donc proches dans mes favoris.
‫Maintenant que nous avons une idée générale de ce à quoi le format de fichier composé pourrait ressembler, passons
‫à la ligne de commande et découvrons l’outil CLI de Docker Compose.