‫Maintenant que vous comprenez les bases de la création d’un swarm multi-nœuds et de la création de réseaux superposés et de services Docker,
‫nous allons couvrir la prochaine étape très intéressante de Swarm, à savoir les piles. Pas des piles de crêpes, mais
‫des piles de services. En 1. 13, Docker a ajouté cette fonctionnalité vraiment
‫géniale qui ajoute une autre couche d’abstraction au-dessus des piles. Il s’agit essentiellement de fichiers de composition pour la production de Swarm. Maintenant, les piles acceptent les
‫fichiers de composition.
‫À l'intérieur, il y a ce que nous appellerions une définition déclarative, dans laquelle nous affirmons que c'est ce que je
‫veux que le résultat final soit.
‫Et c'est le travail de l'essaim de comprendre tout ça. Maintenant, ce ne sont pas que des services; c'est aussi des réseaux
‫et des volumes.
‫Et un petit aperçu.
‫En fait, il va inclure des secrets, dont nous parlerons dans les prochaines conférences.
‫Nous arrivons à utiliser une nouvelle commande, qui est docker stack deploy, pour importer ce fichier Compose et exécuter la commande que nous
‫y avons insérée.
‫La pile gère tout cela.
‫Il n’est pas nécessaire que nous allions d’abord créer des réseaux, ou d’abord créer des volumes, mais nous pouvons le faire totalement.
‫Nous pouvons utiliser quelque chose appelé External dans notre fichier Compose pour dire: ce sont déjà des choses qui
‫existent dans mon essaim. Allez-y et utilisez-les, ne vous embêtez pas pour les créer.
‫Mais en général, vous vous retrouvez avec vos piles tout pour vous parce que c'est plus facile ainsi.
‫Nous allons intégrer de nouvelles fonctionnalités dans notre fichier Compose, nous allons donc commencer par
‫celles qui ressemblent beaucoup à ce que nous avions auparavant. Mais nous allons inclure cette nouvelle clé déployée, ou
‫dictionnaire, qui nous permet de spécifier les éléments spécifiques à Swarm.
‫Combien de répliques voulons-nous?
‫Que voulons-nous faire lorsque nous basculons? Comment voulons-nous faire des mises à jour glissantes, et
‫toutes sortes de choses qui ne nous intéresseraient pas sur notre machine de développement local.
‫Mais cela a un prix, à savoir que nous ne pouvons pas encore exécuter la commande de construction. C’est peut-être quelque chose qui n’arrivera jamais
‫à Swarm car l’état d’esprit, c’est que la construction ne devrait pas se produire sur votre
‫essaim de production. La construction est quelque chose que votre système de CI devrait faire.
‫Peut-être que Jenkins ou autre chose comme Codehip.
‫Une fois que vous avez construit vos images et les avez placées dans votre référentiel, cette pile sera en fait celle
‫qui permettra de les extraire et de les déployer avec les options de déploiement.
‫La bonne nouvelle, cependant, c'est qu'ils s'entendent bien.
‫Sur votre ordinateur local, Compose ignore en fait lorsque vous exécutez la commande docker-compose.
‫En
‫réalité, il ignorera les informations de déploiement. En fait, il indiquera «hé, vous avez des informations de déploiement ici.
‫Je ne peux pas vraiment l'utiliser, alors je vais l'ignorer. 'De même, lorsque
‫vous êtes sur Swarm et que vous déployez une nouvelle pile ou une mise à jour d'une pile, cela signifie en fait'
‫hé, vous avez des commandes de construction ici.
‫Je ne fais pas de builds donc je vais les ignorer et continuer. «Ce qui est bien, c'est
‫que vous n'avez pas à changer de dossier. Nous verrons plus loin comment nous pouvons
‫réellement avoir un seul fichier Compose qui fait tout ce dont nous avons besoin pour le développement et
‫le déploiement en production.
‫C'est vraiment cool.
‫Enfin, vous n'avez pas réellement besoin de la CLI de Docker Compose, le binaire. Cela n'a pas besoin d'être
‫dans votre essaim. Car encore une fois composer, la commande réelle n'est pas un outil de production.
‫Ce n'était pas conçu pour être une production.
‫Il a été conçu pour être un outil d'aide au développement et d'aide système.
‫C'est vraiment mieux pour le travail local sur nos machines.
‫L'essaim, qui est essentiellement le moteur Docker. Le moteur Docker peut maintenant accepter les
‫fichiers Compose à l’aide de cette commande de pile. Il lit les fichiers Compose sans avoir besoin de Docker Compose n’importe où sur le serveur.
‫Passons rapidement en revue nos services.
‫Voici à quoi ressemblerait notre service.
‫Nous créerions un service ...
‫Disons que c'est Nginx. Et disons que nous en avons spécifié trois répliques.
‫Ainsi, il créerait alors trois tâches dans l'orchestrateur, qui trouveraient certains serveurs, ou nœuds, pour
‫les mettre en place et créeraient des conteneurs.
‫Dans les nouvelles piles, nous parlons de plusieurs services, un ou plusieurs, non. Vous pouvez avoir des dizaines de
‫services là-bas. Dans ce fichier YAML unique.
‫Ils agissent exactement comme les services que nous avions auparavant. Ce n'est que maintenant que nous pouvons créer des volumes et superposer des réseaux
‫dans ce fichier Compose. Et cela donne
‫ce que nous appellerions une pile. Une pile contrôle toutes ces choses.
‫Et en fait, il apposera correctement son nom sur tous les objets afin que vous puissiez facilement
‫savoir lesquels sont associés à quelle pile. En fait, il y aura également des étiquettes, que
‫nous aborderons plus tard, ce qui représente davantage de métadonnées pour vous permettre de déterminer de quelle pile provient cette chose.
‫Donc c'est vraiment génial.
‫Nous pouvons maintenant utiliser un fichier YAML pour faire toutes les choses que nous ne voulions pas avoir à
‫saisir les commandes de service. Parce que les commandes de service étaient déjà un peu lourdes et longues. Et puis nous avons fini
‫par créer des scripts Bash afin d'exécuter ces commandes, et ensuite c'est devenu fastidieux, d'accord.
‫Donc, maintenant que Swarm existe depuis huit mois, nous avons maintenant cette fonctionnalité de pile qui gère
‫ces services.
‫Notez que la pile est pour un seul essaim.
‫Droite? Il ne peut pas faire beaucoup d'essaims.
‫Il ne fonctionnera que sur un seul essaim afin de pouvoir contrôler tous les nœuds et déployer
‫tous ces services, réseaux et volumes.
‫Je devrais dire que ce diagramme peut en réalité contenir une dernière chose, qui est des secrets,
‫car la pile peut également les contrôler. Nous verrons cela dans une prochaine conférence dans cette section. D'ACCORD.
‫Regardons les piles et leur fonctionnement.
‫Je suis de retour dans mon essaim de 3 nœuds que nous avons construit plus tôt. Je vais maximiser la fenêtre sur le nœud 1 car je
‫n'ai pas vraiment besoin des deux autres nœuds.
‫Au moins, je n'ai pas besoin de leur ligne de commande ssh.
‫Nous allons utiliser l'exemple d'application de vote utilisé lors de conférences précédentes pour cette section.
‫Si vous vous souvenez de notre conception pour cela, il s’agissait de cinq services différents, qui dépendaient tous les uns
‫des autres.
‫Et cela nous a finalement donné deux sites Web différents.
‫Vous avez passé et je suis sûr que vous avez créé la meilleure liste de services avec toutes les valeurs et options dont
‫elle avait besoin et c'était parfait, non?
‫Je suis ici pour vous dire que maintenant, ce n'est plus nécessaire.
‫Il était vraiment important pour nous de les utiliser et tout n’aura pas besoin d’un fichier de pile.
‫Mais maintenant j'ai un fichier de pile.
‫Jetons-y un coup d'œil, car vous remarquerez qu'il ressemble beaucoup
‫à un fichier Compose, car il l'est. La seule chose clé que vous devez changer est la version 3 ou supérieure
‫au minimum.
‫La version la plus récente est la version 3. 1, mais je suis sûr que cela changera à mesure qu'il continue
‫à évoluer et à mûrir.
‫Mais vous avez besoin de la version 3 pour utiliser des piles.
‫Vous remarquerez que nous avons notre redis, et notre base de données, et notre vote, et toutes ces choses qui
‫sont probablement très similaires à vous de votre propre travail. Vous connaissez probablement très bien ces images et les images dont elles ont
‫besoin, ainsi que les ports dont elles ont besoin.
‫Mais dans ce cas, vous remarquerez déployer.
‫Déployer ici est une nouvelle option. Vous verrez ici que je spécifiais le nombre de répliques que je
‫souhaitais, à savoir le nombre de copies de cette image devant être exécutées à la fois.
‫Et que se passe-t-il quand je fais une mise à jour?
‫Donc, quand je fais une mise à jour réelle de la pile, qui fera ensuite des mises à jour de service.
‫Comment je veux que cela se produise?
‫Droite?
‫Est-ce que je veux tout descendre en même temps? Est-ce que je n'en veux qu'un à la fois?
‫Combien de retard entre eux?
‫Il y a toutes sortes d'options ici.
‫Nous sommes simplement en train de gratter la surface, mais vous pouvez voir que ma politique de
‫redémarrage est la suivante: si le conteneur échoue, redémarrez-le automatiquement.
‫Vous pouvez voir ci-dessous, sous
‫la base de données, que des contraintes ont été imposées pour m'assurer que c'est sur un nœud spécifique.
‫Nous n’avons pas encore beaucoup parlé des contraintes, mais nous avons le moyen
‫de marquer des objets, c’est-à-dire des conteneurs ou des images, ou tout ce que nous pouvons créer ou détruire dans Swarm ou dans Docker lui-même.
‫Nous pouvons en fait assigner des étiquettes à n'importe lequel de ces éléments, y compris aux nœuds, et un nœud gestionnaire reçoit ses
‫propres étiquettes.
‫Il est très facile pour nous de dire simplement que ce conteneur doit être exécuté sur un nœud
‫ayant ce rôle particulier.
‫Excellent exemple là-bas. En descendant, nous avons quelques options de parallélisme que nous avons déjà vues.
‫Cette option de délai est plutôt cool. Si vous avez une sorte de temps de préchauffage
‫lorsque vous avez des conteneurs qui tournent. Ils ont peut-être commencé, mais ils ne sont peut-être pas opérationnels pendant 60 secondes ou quelque chose du genre.
‫Vous pouvez ajouter des retards ici. Nous verrons cela plus tard
‫au cours des déploiements de production bleu-vert. Pour l'instant, vous pouvez voir que ce sont tous assez standard.
‫Nous avons en fait encore plus d'options ici. Vous pouvez réellement voir que je lui attribue une étiquette spécifique.
‫J'ai une fenêtre et une tentative maximale pour la politique de redémarrage.
‫Donc, s'il tente de redémarrer et qu'il continue d'échouer, il n'essaiera pas plus de trois fois.
‫Regardons ça.
‫Tout ce que j'ai à faire est de faire un docker stack deploy -c pour composer. Je vais donc utiliser un fichier Compose.
‫Maintenant, je vais l'appeler voteapp. Et c'est parti. En réalité, il n’a pas tout créé et n’a pas
‫été aussi rapide.
‫Tout ce qu'il a fait est créé ces objets dans le planificateur, qui passe ensuite par le processus
‫de création des services, qui crée ensuite les tâches, qui créent ensuite les conteneurs.
‫Il doit également créer les réseaux comme vous le verrez ici. Rappelez-vous que nous avions le frontend et le
‫backend, donc il a créé ceux-ci, ainsi qu'un réseau par défaut, que le fichier de pile que je possédais utilisait
‫un réseau par défaut.
‫Ensuite, vous verrez cette option pour le visualiseur, une nouvelle option que nous n’avions pas utilisée auparavant.
‫Nous verrons cela dans une minute.
‫Voyons donc un peu plus la commande docker stack.
‫Vous verrez que nous pouvons déployer. Nous l'avons déjà fait.
‫Ensuite, nous
‫avons un ls, un ps, un rm et des services.
‫Donc, cette commande n'a pas beaucoup de fonctionnalités.
‫C'est assez simple car toutes les fonctionnalités sont vraiment dans le fichier Compose et vraiment dans
‫les objets qu'il crée.
‫Puisque nous avons déjà fait tout cela, nous pouvons faire des choses comme ls, qui nous montre simplement toutes nos piles.
‫C'est une commande assez basique. Nous n'avons qu'un. Ensuite, si je fais un ps, ça me montre ... oups je
‫dois préciser le nom.
‫vote.
‫Cela s'appelle voteapp.
‫Il faut que ce soit bien.
‫D'ACCORD.
‫Laissez-moi revenir en arrière pour que vous puissiez voir cela un peu mieux. Juste là.
‫Ce sont les tâches réelles. Ensuite, vous pouvez voir sur quel nœud ils s'exécutent.
‫Ce ne sont pas les conteneurs. C'est en fait la tâche que nous voyons ici. Parce que s'il s'agissait du conteneur
‫lui-même, nous aurions un nom long et gros. Parce que, si vous vous en souvenez, les services que nous avons créés précédemment,
‫ils portaient ces noms très longs
‫si nous y allions et travaillions docker ps. Droite? Si j'ai fait un conteneur
‫docker ls ou un docker ps, vous obtenez ces noms très longs. Et c'est parce qu'ils ont tous un GUID, parce que chaque
‫conteneur doit avoir un nom unique.
‫C'est ainsi qu'ils garantissent qu'ils sont toujours uniques et ne se heurtent jamais.
‫Ensuite, le dernier est celui
‫de services de pile de docker voteapp.
‫J'aime celui-ci le meilleur, en fait, car il me montre mes répliques.
‫C'est un
‫peu comme faire un service. Il me montre le nombre de répliques que j'ai démarré, ce qui me permet de
‫savoir si j'ai le nombre correct de conteneurs déjà commencé. Ensuite, si je veux plonger plus
‫profondément, je pourrais alors faire une pile de docker ps. Nous avons en fait les noms de tâches ici et nous voyons sur quels nœuds ils sont exécutés.
‫Ces deux éléments réunis vous donnent en réalité une image complète de la manière dont l’application est en cours d’exécution.
‫Si je souhaitais me lancer dans la mise en réseau, je pourrais créer un réseau
‫de docker comme nous le ferions normalement.
‫Et vous pouvez voir ces trois nouveaux réseaux de superposition créés pour cette application. Et remarquez que le nom
‫de l'application est toujours au début. La pile précède toujours le nom du service.
‫Ainsi, chaque pile s'assurera que son nom est à l'avant.
‫Et puis allons vérifier.
‫Laisse-moi afficher mon navigateur.
‫D'accord.
‫On peut les voir sur le port 5000.
‫J'ai le site de vote en cours d'exécution.
‫Je vais à 5001.
‫J'ai le site de résultats afin que je puisse cliquer dessus et voir le résultat.
‫Ensuite, ce nouveau que nous avons s'appelle un visualiseur.
‫C'est sur 8080. Le Visualizer est en fait un outil très pratique à des fins de démonstration.
‫C'est en fait fait ... Soit dit en passant, tout cela est réalisé par Docker,
‫et il s’agit là d’un repo open source que vous pouvez voir dans la section Ressources de cette section.
‫Nous avons donc des couleurs différentes pour chaque service.
‫Le résultat voteapp est un vert.
‫Et puis la redis est une sorte de moutarde, et le vote est rose. Vous pouvez voir qu'il y a deux votes et il y
‫a deux redises.
‫C'est très bien de montrer ce qui se passe lorsque les choses bougent autour de l'essaim.
‫Si je suis effectivement entré dans mon dossier et fait un changement.
‫Passons à l'application de vote et disons que nous voulons changer les répliques à cinq.
‫Nous pourrions aller mettre à jour le service. Mais c'est un peu un anti-modèle. Si nous saisissons manuellement les commandes
‫dans le service, telles que la mise à
‫jour du service Docker, cela signifie que la prochaine fois que je réappliquerai ce fichier YAML, ces modifications seront écrasées.
‫Si vous avez déjà effectué une formation dans le cloud dans AWS ou dans toute autre gestion de la configuration, vous
‫savez qu'une fois que vous utilisez un fichier de configuration comme celui-ci pour gérer votre infrastructure, vous souhaitez vraiment utiliser
‫ce fichier car il sera la source. de la verité.
‫Donc, probablement, en production, ce serait une sorte de fichier que vous conserverez dans un référentiel Git sur lequel
‫vous avez le contrôle de version, vous contrôlez les modifications et vous pouvez ainsi annuler les modifications.
‫Dans ce cas, je vais simplement changer ce fichier très rapidement et nous allons exécuter la même commande, docker
‫stack deploy.
‫Notez que nous n'avons pas de mise à jour. Parce que nous allons déployer sur la même pile et
‫qu'il va reconnaître son existence, et que nous allons le mettre à jour en fonction de ces changements.
‫Afin de le mettre à jour, nous devons nous assurer que nous utilisons le bon nom.
‫Donc, c'est voteapp. Et puis remarquez que cela dit mise à jour des services, mais reconnaît qu'il faut les changer.
‫Ensuite, si nous passons à notre visualiseur, vous pouvez voir que nous l’avons déjà.
‫Nous sommes trop lents aujourd'hui, n'est-ce pas?
‫Nous ne pouvons pas suivre l'essaim. Nous avons maintenant cinq de ces applications de vote en cours d'exécution.
‫S'ils mettaient du temps à se lancer et à se lancer, nous verrions leurs états changer ici au moment de leur
‫mise en ligne.
‫Mais il s’agit d’une application Web simple, elle va donc démarrer assez rapidement.
‫D'accord.
‫C'est des piles.
‫Ajoutons maintenant les secrets à nos piles.