Dans le premier article, « Création d'un cluster Docker Swarm sur Azure Container Service », nous avons évoqué la création d'un cluster Docker Swarm sur Azure Container Service (ACS). Chaque machine virtuelle (maître ou agent) a Docker en cours d'exécution lorsque le Swarm est créé. Dans cet article de continuation, nous aborderons l'utilisation de Docker sur le Swarm créé sur Azure Container Service. Nous discuterons de l'utilisation à la fois de Docker autonome et d'un service en mode Docker Swarm. Cet article comporte les sections suivantes :
- Configuration de l'environnement
- Répertorier les informations Docker
- Exécuter une image Hello World Docker
- Exécuter une image Docker Nginx
- Répertorier les conteneurs Docker
- Accéder au conteneur Nginx Docker dans un navigateur
- Supprimer un conteneur Docker
- Initialisation du mode Docker Swarm
- Création d'un service Docker
- Répertorier les services Docker
- Répertorier les tâches du service Docker
- Répertorier les conteneurs Docker pour le service Docker
- Explorer les journaux générés par un conteneur de service Docker
- Conclusion
Configuration de l'environnement
Utilisez le même environnement que dans le premier article, « Création d'un cluster Docker Swarm sur Azure Container Service ». Créez un cluster Swarm sur ACS, comme indiqué dans l'article. Dans cet article, nous utiliserons le cluster Swarm composé de trois nœuds maîtres et d'un nœud agent pour exécuter un conteneur Docker autonome et un service en mode Docker Swarm.
Répertorier les informations Docker
Démarrez Cloud Shell comme indiqué dans l'article "Création d'un cluster Docker Swarm sur Azure Container Service". Connectez-vous à une machine virtuelle maître Swarm à l'aide d'une clé privée SSH RSA, d'un nom d'utilisateur et d'une adresse IP publique du maître, comme indiqué dans l'article précédent également. La commande SSH pour se connecter à la machine virtuelle maître est la suivante ; la clé privée SSH RSA, le nom d'utilisateur et l'adresse IP publique seraient différents pour différents utilisateurs.
ssh -i /home/deepak/.ssh/id_rsa -p 2200 [email protected]
Une connexion est établie et une invite de commande pour la machine virtuelle maître s'affiche.
[email protected] :~$ ssh -i /home/deepak/.ssh/id_rsa -p 2200 [email protected] dans Ubuntu 14.04.4 LTS (GNU/Linux 3.19.0-65-generic x86_64) * Documentation :https://help.ubuntu.com/ Informations système au mar. 10 octobre 22:40:17 UTC 2017 Charge système :0,27 Processus :131 Utilisation de / :4,2 % de 28,80 Go Utilisateurs connectés :0 Utilisation de la mémoire :2 % d'adresse IP pour eth0 :172.16.0.5 Utilisation de l'échange :0 % d'adresse IP pour docker0 :172.17.0.1 Représentez graphiquement ces données et gérez ce système sur :https://landscape.canonical.com/ Obtenez une assistance Cloud avec Ubuntu Advantage Cloud Invité :http://www.ubuntu.com/business/services/cloud Nouvelle version '16.04.3 LTS' disponible. Exécutez 'do-release-upgrade' pour le mettre à niveau.Trois nœuds maîtres ont été configurés dans le Swarm provisionné dans l'article « Création d'un cluster Docker Swarm sur Azure Container Service ». Le nombre de VM maîtres peut être de 1, 3 ou 5. Lors de l'exécution de plusieurs VM maîtres, la commande SSH pour se connecter à chacune des VM maîtres est la même sauf pour le port SSH, qui est 2200 pour le 1 maître, 2201 pour le 2 maître, 2202 pour le 3 maître, 2203 pour le 4 maître et 2204 pour le 5 maître. Avec trois VM master, les ports SSH utilisés sont 2200, 2201 et 2202. Pour se connecter à un 2 master, la commande SSH est la suivante :
[email protected] :~$ ssh -i /home/deepak/.ssh/id_rsa -p 2201 [email protected]Et, la commande SSH pour se connecter au maître 2 est la suivante :
[email protected] :~$ ssh -i /home/deepak/.ssh/id_rsa -p 2202 [email protected]Le démon Docker s'exécute à 172.16.0.5:2375 . Pour afficher des informations sur l'ensemble du système, exécutez le docker info commande. La sortie (partielle) de la commande est répertoriée :
[email protected] :~$ docker -H 172.16.0.5:2375 infoContainers :0 En cours d'exécution :0 En pause :0 Arrêté :0Images :0Rôle :primaryStrategy :spreadNodes :1 swarm-agent-D50F2361000001 :10.0.0.5:2375Is Gestionnaire :false Version du noyau :3.19.0-65-genericSystème d'exploitation :linuxArchitecture :amd64CPU :2Total Memory :7.145GiBExécuter une image Hello World Docker
Chacune des machines virtuelles d'un ACS Swarm est un hôte Docker et un conteneur Docker autonome peut être exécuté sur n'importe laquelle des machines virtuelles Swarm. Par exemple, exécutez l'image Docker "hello-world" sur une machine virtuelle principale.
[email protected]:~$ docker run hello-worldImpossible de trouver l'image 'hello-world:latest' localementlatest:Extraction de la bibliothèque/hello-world5b0f327be733:Pull completeDigest:sha256:b2ba691d8aac9e5ac3644c0788e3d3823f9e97f757f01d2 ddc6eb545 Download world:latestHello from Docker!Ce message indique que votre installation semble fonctionner correctement.Pour générer ce message, Docker a suivi les étapes suivantes :1. Le client Docker a contacté le démon Docker. 2. Le démon Docker a extrait l'image "hello-world" du Docker Hub. 3. Le démon Docker a créé un nouveau conteneur à partir de cette image qui exécute l'exécutable qui produit la sortie que vous lisez actuellement. 4. Le démon Docker a transmis cette sortie au client Docker, qui l'a envoyée à votre terminal. Pour essayer quelque chose de plus ambitieux, vous pouvez exécuter un conteneur Ubuntu avec :ID Docker gratuit :https://cloud.docker.com/Pour plus d'exemples et d'idées, visitez :https://docs.docker.com/engine/userguide/[email protected]:~$L'image Docker hello-world s'exécute sur la machine virtuelle maître Swarm et non sur Swarm. La machine virtuelle principale n'est qu'une des machines virtuelles de Swarm. Le Docker Swarm écoute le point de terminaison 172.16.0.5:2375. Pour exécuter des conteneurs Docker sur Swarm, le point de terminaison Swarm doit être fourni, comme nous le verrons dans la section suivante. Lorsqu'un conteneur Docker est exécuté sur un Swarm, le maître Swarm affecte un agent Swarm sur lequel exécuter le conteneur Docker.
Exécuter une image Docker Nginx
Le bonjour-monde L'image Docker utilisée dans la section précédente est une image Docker très basique avec peu de dockerisation et qui génère juste un message. Dans cette section, nous exécuterons un conteneur autonome avec l'image Docker nginx pour un serveur Nginx. La commande suivante crée un conteneur Docker appelé hello-nginx et expose le port 80 sur l'hôte.
docker run --name hello-nginx -d -p 80:80 nginxLa sortie de l'exécution du docker commande est listée :
[email protected] :~$ docker run --name hello-nginx -d -p 80:80 nginxImpossible de trouver l'image 'nginx:latest' localementdernière :Extraction de la bibliothèque/nginxbc95e04b23c0 :Extraction complète110767c6efff :Extraction complètef081e0c4df75 :Extraction EXCHETEDIGEST:SHA256:004AC1D5E791E705F12A17C80D7BB1E8F7F01AA7DCA7DEEE 6E65A03465392072STATS:DÉLÉCHARGEL'exécution docker précédente La commande exécute un conteneur Docker sur la machine virtuelle maître Swarm. L'exécution du docker La commande peut être exécutée sur le Swarm en fournissant l'adresse IP et le port du point de terminaison Swarm comme suit :
[email protected] :~$ docker -H 172.16.0.5:2375 run --name hello-nginx -d -p 80:80 nginxddcbc335988f7b5dba762b436bfde4c22d01144d67313813ba140a5391bac8dfRépertorier les conteneurs Docker
Répertorier les conteneurs Docker sur une VM maître avec le docker ps commande. Le hello-nginx Le conteneur Docker est répertorié. Un conteneur Swarm Manager, qui n'est pas créé par l'utilisateur mais qui est un conteneur système, est créé lors de la création d'un Swarm.
Note de l'éditeur : Veuillez noter que bon nombre des listes de codes suivantes sont trop larges pour s'afficher correctement. Veuillez faire défiler la zone de code vers la droite pour voir la liste complète. |
[email protected] :~$ docker psCONTAINER ID COMMANDE D'IMAGE NOMS DES PORTS D'ÉTAT CRÉÉSb3679edba090 nginx "nginx -g 'daemon..." Il y a 3 secondes Jusqu'à 2 secondes 0.0.0.0:80->80/tcp hello-nginxf82ebb6efa4f swarm:1.1.0 "/swarm manage --r..." Il y a 5 minutes Up 3 minutes 0.0.0.0:2375->2375/tcp containers_swarm_1
Les conteneurs Docker sur le point de terminaison Swarm peuvent être répertoriés comme suit :
[email protected] :~$ docker -H 172.16.0.5:2375 ps -aCONTAINER ID IMAGE COMMAND ÉTAT CRÉÉ NOM DES PORTSddcbc335988f nginx "nginx -g 'daemon..." Il y a 36 secondes Jusqu'à 35 secondes 10.0.0.5 :80->80/tcp swarm-agent-D50F2361000001/hello-nginx
Le conteneur Docker s'exécute sur un agent Swarm, comme indiqué par le nom du conteneur Docker swarm-agent-D50F2361000001/hello-nginx .
Accéder au conteneur Nginx Docker dans un navigateur
Comme indiqué précédemment, lorsqu'un conteneur Docker est exécuté sur le Swarm à l'aide du point de terminaison Swarm, le maître Swarm planifie le conteneur sur l'un des agents Swarm du Swarm. Pour accéder au serveur Nginx exécuté dans le conteneur Docker sur le point de terminaison Swarm, l'adresse IP publique de l'agent Swarm doit être utilisée. Le Swarm que nous avons utilisé n'a qu'un seul agent Swarm. L'adresse IP publique de l'agent Swarm peut être obtenue à partir de la liste des ressources, comme illustré à la figure 1.
Figure 1 : Adresse IP publique de l'agent Swarm
Vous pouvez également cliquer sur l'équilibreur de charge de l'agent Swarm dans les Ressources , comme illustré à la figure 2.
Figure 2 : Équilibreur de charge de l'agent Swarm
Dans la page des détails de l'agent Swarm, obtenez l'adresse IP (voir Figure 3).
Figure 3 : Adresse IP de l'agent Swarm
L'adresse IP peut également être obtenue à partir de la page des détails de l'équilibreur de charge de l'agent Swarm, comme illustré à la figure 4.
Figure 4 : IP publique de l'agent Swarm sur la page de l'équilibreur de charge
Dans un navigateur sur une machine locale, accédez à l'adresse IP publique de l'agent Swarm. La page d'accueil du serveur Nginx s'affiche, comme illustré à la figure 5.
Figure 5 : Invoquer le serveur Nginx dans un navigateur
Supprimer un conteneur Docker
Pour supprimer un conteneur Docker, exécutez le docker rm commande. Un conteneur Docker en cours d'exécution ne peut pas être supprimé. Tout d'abord, arrêtez le conteneur Docker hello-nginx en cours d'exécution sur le Swarm.
[email protected] :~$ docker -H 172.16.0.5:2375 stop hello-nginxhello-nginx
Par la suite, le conteneur arrêté peut être supprimé avec docker rm .
[email protected] :~$ docker -H 172.16.0.5:2375 rm hello-nginxhello-nginx
Initialisation du mode Docker Swarm
Comme indiqué précédemment, Azure Container Service Swarm n'a pas le mode Swarm activé par défaut. Le mode Swarm doit être initialisé avec le docker swarm init commande.
[email protected] :~$ docker swarm init --advertise-addr 52.176.1.213Swarm initialisé :le nœud actuel (ia4uj7431stu8y0j5h2yvdp27) est maintenant un gestionnaire.
Pour ajouter un nœud de calcul à cet essaim, exécutez la commande suivante :
docker swarm join --tokenSWMTKN-1-5ksj7uqccgv1vnnmie09qmt191ldpupof4ihg4vhm083c20xsh -6uyq5653uo62e521bcoatzyyz52.176.1.213:2377
Pour ajouter un gestionnaire à cet essaim, exécutez "docker swarm join-token manager" et suivez les instructions.
Lister les nœuds en mode Swarm avec le noeud docker ls commande. Le nœud du gestionnaire Swarm est répertorié.
[email protected] :~$ docker node lsID HOSTNAME STATUS AVAILABILITY MANAGER STATUSia4uj7431stu8y0j5h2yvdp27 * swarm-master-D50F2361-0 Ready Active Leader
Création d'un service Docker
Après avoir initialisé le mode Docker Swarm, créez un service Docker avec le docker service create commande. Par exemple, créez un service Docker composé de deux répliques à l'aide de l'image Docker alpine et envoyer un ping à docker.com.
[email protected] :~$ docker service create--replicas 2 --name helloworld alpine ping docker.comtg1ywqiyei3jw9prco6890ol1
Comme autre exemple, créez un service Docker avec l'image Docker tutum/hello-world et exposez le service sur l'hôte sur le port 8080.
[email protected] :~$ docker service create> --name hello-world> --publish 8080:80> --replicas 2> tutum/hello-world3e38c1595cddg0ckmoyasrnnu
Répertorier les services Docker
Lister les services Docker avec le service docker ls commande. Les deux services créés dans la section précédente sont répertoriés.
[email protected]:~$ service docker lsID NOM MODE RÉPLIQUES IMAGE PORTS3e38c1595cdd hello-world répliqué 2/2 tutum/hello-world:latest *:8080->80/tcptg1ywqiyei3j helloworld répliqué 2/2 alpin:dernier
Répertorier les tâches du service Docker
Répertorier les tâches du service Docker pour helloworld service basé sur l'image Docker alpine .
[email protected] :~$ service docker ps helloworldID NOM IMAGE NŒUD ÉTAT DÉSIRÉ ÉTAT ACTUEL ERREUR PORTS0mal82mskbge helloworld.1 alpine:latest swarm-master-D50F2361-0 Running Running 33 seconds agoiqz0bqkldxs2 helloworld.2 alpine:latest swarm- master-D50F2361-0 En cours d'exécution En cours d'exécution il y a 32 secondes
Répertorier les tâches du service Docker pour le hello-world service basé sur le tutum/hello-world Image Docker.
[email protected] :~$ docker service ps hello-worldID NOM IMAGE NŒUD ÉTAT DÉSIRÉ ÉTAT ACTUEL ERREUR PORTSyok48ja4o835 hello-world.1 tutum/hello-world:latest swarm-master-D50F2361-0 En cours d'exécution En cours d'exécution 38 secondes agox5tvcuglwzd0 hello-world.2 tutum/hello-world:latest swarm-master-D50F2361-0 En cours d'exécution En cours d'exécution il y a 38 secondes
Répertorier les conteneurs Docker pour le service Docker
Les conteneurs Docker pour un service Docker sur un hôte Docker dans le Swarm peuvent être répertoriés avec le docker ps commande.
[email protected] :~$ docker psCONTAINER ID COMMANDE D'IMAGE ÉTAT CRÉÉ NOMS DES PORTSb6b069102300 tutum/hello-world:latest "/bin/sh -c 'php-f..." Il y a 6 minutes Jusqu'à 6 minutes 80/ tcp hello-world.2.x5tvcuglwzd05olktbf3tpfqe62e26d4bc0ff tutum/hello-world:latest "/bin/sh -c 'php-f..." il y a 6 minutes Up 6 minutes 80/tcp hello-world.1.yok48ja4o835nc7cog8hhjlr7db4827da350b alpine:latest " pingdocker.com" il y a 7 minutes Up 7 minutes helloworld.2.iqz0bqkldxs2sg8ny50je7e7y92dab9f7ae97 alpine:latest "pingdocker.com" il y a 7 minutes Up 7 minutes helloworld.1.0mal82mskbgecbcwh3op18nrr
Conteneurs Docker pour hello-world et helloworld les services sont répertoriés.
Explorer les journaux générés par un conteneur de service Docker
Les journaux générés, le cas échéant, dans un conteneur Docker pour un service Docker peuvent être répertoriés avec les journaux Docker commande. Par exemple, obtenez l'ID de conteneur pour un service basé sur une image alpine et répertoriez les journaux :
[email protected] :~$ docker logs db4827da350bPING docker.com (34.201.187.190) :56 octets de données
Comme l'indique la sortie, le domaine docker.com reçoit un ping et 56 octets de données sont échangés.
Conclusion
Dans cet article, nous avons abordé l'utilisation de Docker dans un cluster Docker Swarm sur Azure Container Service. Nous avons utilisé des conteneurs Docker autonomes et des services Docker sur Swarm. Un cluster Swarm sur ACS expose un point de terminaison Swarm pour exécuter un conteneur Docker autonome. Lorsque les conteneurs Docker sont exécutés sur le point de terminaison Swarm, Swarm exécute des conteneurs Docker autonomes sur le ou les agents Swarm. Le mode Swarm n'est pas activé par défaut et doit être initialisé sur une VM maître Swarm.