GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Tirez parti de l'orchestration des conteneurs dans ce didacticiel Docker Swarm

Vous êtes-vous déjà demandé s'il était possible d'orchestrer des conteneurs directement avec Docker au lieu de Kubernetes ? Docker Swam pourrait être la solution que vous recherchez, et vous êtes sur la bonne voie !

Dans ce didacticiel, vous apprendrez à gérer plusieurs conteneurs Docker avec Docker Swarm.

Continuez à lire et commencez à orchestrer !

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous d'avoir les éléments suivants :

  • Trois instances EC2 s'exécutant sur Ubuntu 20.04.3 LTS.
  • Docker installé sur toutes les instances EC2 - Ce tutoriel utilise la version 20.10.12.

Construire et déployer des conteneurs sur un Docker Swarm

Docker Swarm est un cluster de machines virtuelles ou physiques qui exécute des applications Docker. Le mode Swarm offre à Docker des fonctionnalités intégrées d'orchestration de conteneurs.

Mais avant de pouvoir commencer à gérer plusieurs conteneurs, vous aurez besoin de différents systèmes/machines (instances AWS EC2).

Vous pouvez apprendre les concepts clés en mode essaim avant d'aller plus loin dans le didacticiel.

En supposant que vous ayez configuré vos instances EC2 :

1. Ouvrez votre navigateur Web et connectez-vous à votre tableau de bord EC2. Affichez la page de résumé des informations de l'une de vos instances EC2 et notez l'adresse IPv4 publique, comme indiqué ci-dessous.

2. Ensuite, ouvrez votre terminal et exécutez la commande ci-dessous pour créer un nœud de gestionnaire dans l'une de vos instances EC2. Assurez-vous de remplacer 18.237.102.75 avec l'adresse IPv4 publique de votre instance EC2 que vous avez notée précédemment (première étape). La commande ci-dessous initialise l'instance en tant que nœud Docker Swarm Manager.

Un nœud de gestionnaire alloue des adresses IP aux tâches/conteneurs, attribue des tâches aux nœuds, émet des commandes pour que les nœuds de travail s'exécutent.

Le nœud de gestionnaire exécute les fonctions d'orchestration et de gestion de cluster de Docker Swarm. Mais ne vous inquiétez pas. Vous découvrirez les nœuds de travail au fur et à mesure que vous avancez dans ce didacticiel.

sudo docker swarm init --advertise-addr 18.237.102.75

Notez la commande similaire illustrée ci-dessous.

3. Exécutez la commande que vous avez notée précédemment (étape 2) pour rejoindre l'essaim en tant que nœud de travail. Un nœud de travail reçoit et exécute des tâches instruites par des nœuds de gestionnaire.

4. Exécutez maintenant le docker node commande ci-dessous pour vérifier tous les nœuds présents dans un essaim particulier. N'oubliez pas que seul le nœud du gestionnaire peut exécuter la commande ci-dessous.

sudo docker node ls

5. Répétez l'étape 2 pour créer un nœud de gestionnaire dans une autre instance EC2.

Si vous n'avez plus votre jeton de jointure, vous pouvez exécuter la commande ci-dessous dans le nœud du gestionnaire et afficher le jeton de jointure.

sudo docker swarm join-token worker

6. Ensuite, exécutez le docker service ci-dessous commande pour créer le service géré dans le Docker Swarm. Vous allez déployer une image NGINX simple dans ce didacticiel.

Le docker service commande ci-dessous effectue les opérations suivantes :

  • Créer un service nommé (--name ) nginx-service , mais n'importe quel nom fonctionnera.
  • Indiquez le nombre de --replicas de votre application/conteneur que vous voulez. Dans ce cas, la valeur des réplicas est définie sur trois (3 ). Les répliques offrent une haute disponibilité de votre application, éliminant les temps d'arrêt. Docker partage les répliques entre les trois nœuds disponibles lors de la création de répliques pour le service.
  • Indiquer le port (-p 80:80 ), puis indiquez le nom de l'image à utiliser (nginx:latest ).
sudo docker service create --name nginx-service --replicas 3 -p 80:80 nginx:latest

7. Exécutez la commande ci-dessous pour confirmer le service (nginx-service) que vous avez créé précédemment (étape 6).

sudo docker service ls

8. Passez maintenant à chaque nœud et exécutez la commande ci-dessous pour répertorier les conteneurs disponibles.

sudo docker ps

Vous verrez une réplique du conteneur que vous avez créé pour chaque nœud, comme indiqué ci-dessous.

9. Enfin, obtenez les adresses IP de chacune des instances EC2 et accédez-y dans votre navigateur Web préféré.

De même, ci-dessous, vous pouvez vérifier que chaque instance contient une réplique de votre application.

Déploiement et mise à l'échelle d'une application avec plusieurs services

Vous avez déjà déployé un service unique, mais comment déploieriez-vous une application avec plusieurs services ? Docker Swarm peut également faire le travail. Vous utiliserez le stack deploy commande, qui utilise les instructions indiquées dans un fichier YAML que vous allez créer.

1. Ouvrez le nœud du gestionnaire et créez un fichier YAML dans votre éditeur de texte préféré. Vous pouvez nommer le fichier différemment, mais pour cette démo, le fichier s'appelle file-name.yml .

Remplir le file-name.yml fichier avec le code suivant, qui crée deux services à l'aide d'images NGINX et Ubuntu.

version: '3.3' # version of compose file
services:
  service1:
    image: 'nginx:latest' # latest version of NGINX image on Docker hub
    ports:
      - '8000:8080'
  service2:
    image: 'ubuntu' # Ubuntu image on docker hub

2. Ensuite, exécutez la pile docker stack commande ci-dessous pour deploy les services créés par le file-name.yml fichier à Docker Swarm. La new-stack Le paramètre est arbitraire, ce qui nomme la pile que la commande crée pour les services.

sudo docker stack deploy -c file-name.yml new-stack

3. Exécutez la commande ci-dessous pour répertorier les services disponibles et notez le nom du service souhaité.

sudo docker service ls

4. Maintenant, exécutez la commande ci-dessous pour créer des répliques pour votre pile. Quatre (4 ) répliques pour être exact pour cette démo. Le nœud de gestionnaire attribuera les nœuds qui contiendront les répliques.

L'application que vous avez précédemment déployée sur Docker Swarm (étape 2) n'a qu'un seul réplica géré par le nœud du gestionnaire. Pour mettre à l'échelle un service, vous créez quatre répliques de ce service. Comme vous n'avez que trois nœuds, un nœud gérera deux répliques, tandis que les autres nœuds en géreront une chacun.

Vous pouvez également réduire un service en réduisant le nombre de répliques.

sudo docker service scale new-stack_service1=4

5. Enfin, exécutez la commande du service docker ci-dessous pour voir tous les conteneurs qui gèrent actuellement les répliques du new-stack_service1 un service.

sudo docker service ps new-stack_service1

Dans l'image ci-dessous, notez qu'un nœud gère deux répliques.

Service de mise à jour dans Swarm

Vous avez déjà appris à déployer des services, mais savez-vous qu'il est possible de mettre à jour des services ? Vous souhaitez peut-être tester une ancienne version d'un service. Si tel est le cas, vous utiliserez la update balise et --image flag pour indiquer la version du service que vous souhaitez, puis indiquez le nom du service à mettre à jour.

1. Exécutez la commande ci-dessous pour inspecter les détails du service en cours d'exécution.

sudo docker service inspect --pretty nginx-service

Ci-dessous, vous pouvez voir que NGINX fonctionne sur la dernière version.

2. Maintenant, exécutez la commande ci-dessous si vous préférez modifier/mettre à jour vers une autre version de NGINX dans le service en cours d'exécution (nginx-service ) pour tester. Assurez-vous de remplacer nginx:1.20 avec votre version préférée.

sudo docker service update --image nginx:1.20 nginx-service

3. Enfin, réexécutez la commande ci-dessous comme vous l'avez fait précédemment (étape 1) pour inspecter les détails du service en cours d'exécution.

sudo docker service inspect --pretty nginx-service

Notez ci-dessous que le service en cours d'exécution a été mis à jour avec succès.

Mettre à jour la disponibilité des nœuds

Vous voudrez peut-être travailler sur un nœud de travail particulier pour, peut-être, apporter des modifications au conteneur, mais vous voulez que votre application soit en direct. Comment? Pendant que vous travaillez sur ce nœud, drain ce nœud, afin qu'il ne reçoive aucune tâche du nœud gestionnaire.

A côté de la drain commande, vous devez ajouter la update balise et --availability drapeau pour modifier la disponibilité d'un nœud particulier.

1. Exécutez le docker node commande ci-dessous pour répertorier les nœuds disponibles et notez l'ID de votre nœud cible.

sudo docker node ls

2. Ensuite, exécutez la commande ci-dessous pour modifier le --availability du nœud par vidange (drain ). Remplacer kseh5660n8xb3i2ojidzx0x13 avec l'ID de votre nœud cible que vous avez noté à la première étape.

sudo docker node update --availability drain kseh5660n8xb3i2ojidzx0x13

3. Enfin, relancez le docker stack commande ci-dessous comme vous l'avez fait à l'étape 1 pour répertorier les nœuds disponibles. sudo docker node ls

sudo docker node ls

Ci-dessous, vous pouvez voir que la disponibilité du nœud sélectionné est modifiée (Drainer ), afin que ce nœud ne participe pas aux activités en cours dans l'essaim.

Conclusion

Dans ce didacticiel, vous avez appris à tirer parti de l'orchestration des conteneurs avec Docker Swarm. Vous avez acquis des connaissances fondamentales sur la mise à l'échelle d'une application avec plusieurs services et sur l'exécution d'opérations lorsque vous travaillez avec Docker Swarm.

À ce stade, vous savez déjà comment gérer votre conteneur et vos services Docker dans Docker Swarm. Alors, comment comptez-vous intégrer ces nouvelles connaissances dans vos futures orchestrations de conteneurs ? Peut-être commencer à déployer des applications Django avec Docker Swarm ?


Docker
  1. Quelques commandes DOCKER

  2. Une introduction à Docker

  3. Comment exécuter MySQL dans un conteneur Docker

  4. Comment se connecter en SSH à un conteneur Docker

  5. Comment répertorier les conteneurs Docker

Utilisez Docker avec cette solution de didacticiel MERN Stack

Tutoriel de démarrage avec Azure Docker

Comment configurer un conteneur Apache Docker

Comment exécuter des conteneurs Docker

Que faire si un conteneur Docker se ferme immédiatement

Créer un simple conteneur Node.js Hello World Docker à partir de zéro