Comment utiliser la commande docker service update pour modifier un service

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à gérer et modifier efficacement les services Docker à l'aide de la commande docker service update. Vous commencerez par créer un service simple, puis explorerez comment le mettre à l'échelle en mettant à jour le nombre de réplicas.

En outre, vous apprendrez à effectuer un redémarrage progressif de votre service, à ajouter ou supprimer des ports publiés, et à comprendre comment revenir à une version précédente de votre service, ce qui vous fournira les compétences essentielles pour gérer le cycle de vie de vos applications conteneurisées dans un environnement Docker Swarm.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/restart("Restart Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ls -.-> lab-555232{{"Comment utiliser la commande docker service update pour modifier un service"}} docker/ps -.-> lab-555232{{"Comment utiliser la commande docker service update pour modifier un service"}} docker/restart -.-> lab-555232{{"Comment utiliser la commande docker service update pour modifier un service"}} docker/inspect -.-> lab-555232{{"Comment utiliser la commande docker service update pour modifier un service"}} docker/create -.-> lab-555232{{"Comment utiliser la commande docker service update pour modifier un service"}} docker/pull -.-> lab-555232{{"Comment utiliser la commande docker service update pour modifier un service"}} end

Créer un service simple

Dans cette étape, vous apprendrez à créer un service Docker simple. Un service est un groupe de conteneurs de la même image. Les services sont utiles pour mettre à l'échelle votre application et garantir une haute disponibilité.

Tout d'abord, téléchargeons l'image alpine depuis Docker Hub. Cette image est très petite et utile pour les tests.

docker pull alpine

Vous devriez voir un affichage indiquant que l'image est en cours de téléchargement.

Maintenant, créons un service nommé my-service en utilisant l'image alpine. Nous exécuterons une commande simple à l'intérieur du conteneur qui affiche "Hello, LabEx!" puis se termine.

docker service create --name my-service alpine echo "Hello, LabEx!"

Cette commande crée un nouveau service. Le paramètre --name my-service attribue un nom au service. alpine est l'image à utiliser, et echo "Hello, LabEx!" est la commande à exécuter à l'intérieur du conteneur.

Vous devriez voir un affichage similaire à ceci, indiquant l'ID du service :

<service_id>

Pour vérifier que le service a été créé avec succès, vous pouvez lister les services :

docker service ls

Vous devriez voir my-service répertorié dans l'affichage.

Mettre à jour le nombre de réplicas d'un service

Dans cette étape, vous apprendrez à mettre à l'échelle un service Docker en mettant à jour le nombre de réplicas. Les réplicas sont des copies identiques des conteneurs de votre service. Augmenter le nombre de réplicas permet à votre service de gérer plus de charge et offre une plus haute disponibilité.

Actuellement, notre service my-service n'a qu'un seul replica. Vous pouvez le constater dans la sortie de la commande docker service ls dans la colonne "REPLICAS".

Mettons à l'échelle le service pour qu'il ait 3 réplicas. Nous pouvons le faire en utilisant la commande docker service update avec le paramètre --replicas.

docker service update --replicas 3 my-service

Cette commande indique à Docker Swarm de mettre à jour le service my-service pour qu'il ait 3 réplicas. Docker Swarm créera automatiquement les conteneurs supplémentaires nécessaires pour atteindre le nombre de réplicas souhaité.

Vous devriez voir un message indiquant que le service a été mis à jour.

Pour vérifier que le service a été mis à l'échelle, listez les services à nouveau :

docker service ls

Regardez la colonne "REPLICAS" pour le service my-service. Elle devrait maintenant afficher 3/3, indiquant que 3 réplicas sont souhaités et que 3 sont actuellement en cours d'exécution.

Vous pouvez également inspecter les tâches associées au service pour voir les conteneurs individuels :

docker service ps my-service

Cette commande vous montrera l'état de chaque replica (tâche) du service. Vous devriez voir trois tâches répertoriées, probablement avec l'état "Running".

Effectuer un redémarrage progressif du service

Dans cette étape, vous apprendrez à effectuer un redémarrage progressif (rolling restart) d'un service Docker. Un redémarrage progressif met à jour les tâches du service une par une, garantissant que le service reste disponible pendant le processus de mise à jour. Cela est crucial pour maintenir le temps de disponibilité de l'application.

Pour déclencher un redémarrage progressif, nous pouvons utiliser la commande docker service update avec le paramètre --force. Ce paramètre force une nouvelle mise à jour même si la configuration du service n'a pas changé.

docker service update --force my-service

Cette commande lancera un redémarrage progressif du service my-service. Docker Swarm arrêtera et redémarrera chaque replica du service de manière séquentielle.

Vous devriez voir un message indiquant que le service a été mis à jour.

Pour observer le redémarrage progressif en cours, vous pouvez surveiller en continu les tâches du service :

docker service ps my-service

Exécutez cette commande plusieurs fois. Vous verrez que l'"ÉTAT ACTUEL" (CURRENT STATE) des tâches passe de "Running" à "Shutdown", puis revient à "Running" à mesure que chaque replica est redémarré. Ce processus se produit un replica à la fois, illustrant la nature progressive du redémarrage.

Une fois que toutes les tâches ont été redémarrées, la sortie de la commande docker service ps my-service montrera toutes les tâches dans l'état "Running" avec des horodatages mis à jour dans la colonne "UPDATED".

Ajouter ou supprimer un port publié

Dans cette étape, vous apprendrez à ajouter ou supprimer un port publié pour un service Docker. Publier un port rend un port à l'intérieur du conteneur accessible depuis l'extérieur du cluster Docker Swarm. Cela est essentiel pour exposer votre application aux utilisateurs ou à d'autres services.

Notre service my-service actuel n'a aucun port publié car il exécute simplement une commande echo et se termine. Pour démontrer la publication de ports, créons un nouveau service qui exécute un simple serveur web. Nous utiliserons l'image nginx pour cela.

Tout d'abord, téléchargez l'image nginx :

docker pull nginx

Maintenant, créons un nouveau service nommé web-service et publions le port 80 du conteneur sur le port 8080 de l'hôte.

docker service create --name web-service --publish 8080:80 nginx

Cette commande crée un service nommé web-service en utilisant l'image nginx. Le paramètre --publish 8080:80 mappe le port 80 à l'intérieur du conteneur sur le port 8080 de l'hôte.

Vous devriez voir un message indiquant l'ID du service.

Pour vérifier que le port est publié, vous pouvez inspecter le service :

docker service inspect web-service

Recherchez la section EndpointSpec dans la sortie. Vous devriez voir une entrée sous Ports qui montre le mappage du port publié (par exemple, PublishedPort: 8080, TargetPort: 80).

Maintenant, supprimons le port publié du service web-service. Nous pouvons le faire en utilisant la commande docker service update avec le paramètre --publish-rm, en spécifiant le port cible à l'intérieur du conteneur.

docker service update --publish-rm 80 web-service

Cette commande supprime le mappage du port 80 à l'intérieur du conteneur.

Vous devriez voir un message indiquant que le service a été mis à jour.

Pour vérifier que le port a été supprimé, inspectez le service à nouveau :

docker service inspect web-service

La section EndpointSpec ne devrait plus montrer le mappage de port que vous venez de supprimer.

Restaurer le service à une version précédente

Dans cette étape, vous apprendrez à restaurer (roll back) un service Docker à une version précédente. La restauration est essentielle lorsqu'une nouvelle mise à jour du service introduit des problèmes. Docker Swarm garde une trace des configurations de service précédentes, vous permettant de revenir rapidement à un état stable.

Tout d'abord, simulons une mise à jour à partir de laquelle nous pourrions vouloir revenir en arrière. Nous allons mettre à jour le service web-service pour utiliser une autre version hypothétique de l'image (bien que nous ne la téléchargeions pas réellement, c'est la structure de la commande qui compte pour la restauration).

docker service update --image nginx:1.20.0 web-service

Cette commande tente de mettre à jour le service web-service pour utiliser l'image nginx:1.20.0. Dans un scénario réel, il pourrait s'agir d'une nouvelle version comportant un bogue.

Maintenant, supposons que nous découvrions un problème avec cette mise à jour et que nous voulions revenir à la version précédente (qui utilisait l'image nginx par défaut). Nous pouvons utiliser la commande docker service rollback.

docker service rollback web-service

Cette commande demande à Docker Swarm de restaurer le service web-service à sa configuration précédente. Docker Swarm arrêtera les tâches exécutant la nouvelle image et démarrera des tâches utilisant la version précédente de l'image.

Vous devriez voir un message indiquant que le service est en cours de restauration.

Pour vérifier que la restauration a réussi, vous pouvez inspecter le service à nouveau :

docker service inspect web-service

Regardez le champ Image dans la sortie. Il devrait maintenant afficher l'image nginx originale (sans le tag :1.20.0, en supposant que vous ayez initialement téléchargé la dernière image par défaut).

Vous pouvez également vérifier les tâches du service pour voir les conteneurs exécutant l'ancienne image :

docker service ps web-service

Les tâches devraient maintenant exécuter l'image originale.

Résumé

Dans ce laboratoire, vous avez appris à gérer les services Docker en utilisant la commande docker service update. Vous avez commencé par créer un simple service en utilisant l'image alpine et une commande echo de base.

Ensuite, vous avez exploré les opérations clés de mise à jour de service. Vous avez mis à l'échelle le service en modifiant le nombre de replicas, effectué un redémarrage progressif (rolling restart) pour mettre à jour les tâches du service sans temps d'arrêt, et appris à ajouter ou supprimer des ports publiés pour exposer le service à l'extérieur. Enfin, vous avez pratiqué la restauration (roll back) du service à une version précédente, démontrant comment annuler les modifications si une mise à jour cause des problèmes. Ces étapes ont fourni une expérience pratique dans la gestion du cycle de vie et de la configuration des services Docker.