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

Utilisez les conteneurs Docker Stop sans tout gâcher !

Vous rencontrez des problèmes avec les conteneurs d'arrêt Docker ? Trouver la bonne façon d'arrêter un conteneur est difficile avec la possibilité de créer de nombreux conteneurs différents. Dans cet article, vous apprendrez les commandes Docker pour arrêter un conteneur ou tous les conteneurs.

Lisez la suite pour en savoir plus !

Prérequis

Pour suivre ce didacticiel, assurez-vous que vous disposez des éléments suivants :

  • Windows 10 :le didacticiel utilise Windows pour exécuter Docker, mais vous pouvez également appliquer les mêmes étapes générales à Linux ou macOS.
  • Docker Desktop – Ce tutoriel utilise la version 3.5.2. Le moteur Docker est disponible si vous utilisez Linux car l'interface graphique ne l'est pas.
  • Un ou plusieurs conteneurs Docker en cours d'exécution.

Fermer les conteneurs avec la commande docker stop Containers

Commençons par la première commande :le docker stop conteneurs et comment elle accomplit l'arrêt des conteneurs.

Par exemple, vous devez peut-être arrêter un conteneur en cours d'exécution portant le nom mystifying_hofstadter et un ID de fb66ed502096 . Comme indiqué dans l'exemple ci-dessous, arrêtez le conteneur avec le docker stop commande conteneurs.

# Stop the container via the name
docker stop mystifying_hofstadter
# Stop the container via the ID (same container)
docker stop fb66ed50209

Que se passe-t-il si vous avez plusieurs conteneurs en cours d'exécution et que vous souhaitez les arrêter ? L'docker stop La commande containers prend en charge l'arrêt de plusieurs ID de conteneur, un à la fois.

Tout d'abord, listez tous les conteneurs via le docker ps commande et transmettez les ID de conteneur au docker stop conteneurs, comme illustré ci-dessous.

# List all running containers
docker ps
# Stop the following Docker containers via the container ID
docker stop a427a21c5558 e9dbd816f24c 31269ef5999e

Que faire si vous souhaitez arrêter tous les conteneurs en cours d'exécution sans récupérer manuellement les ID de conteneur et les transmettre à docker stop ? Le docker ps -q commande accomplira cela. Le -q paramètre de docker ps la commande affiche uniquement les ID des conteneurs.

# Create three containers. A semi-colon separates each command
docker run -d -t ubuntu; docker run -d -t ubuntu; docker run -d -t ubuntu
# List all running containers
docker ps -q
# Retrieve all running container IDs and pass those to docker stop
docker stop $(docker ps -q)

Le $(docker ps -q) La construction ci-dessus est une sous-expression dans Bash sous Linux et PowerShell sous Windows. Une sous-expression demande au shell de traiter un ensemble de commandes, docker ps -q , d'abord, puis renvoyez l'ensemble des résultats à la commande d'origine docker stop .

L'docker stop La commande containers utilise le signal SIGTERM. Les signaux Linux informent un processus d'un événement, mais c'est au processus de décider comment agir sur un signal donné.

Lors de l'utilisation du signal SIGTERM, Docker utilise le signal pour arrêter gracieusement un processus en attendant un 10 par défaut secondes avant d'envoyer le signal SIGKILL, qui termine le processus immédiatement.

Arrêter un conteneur à l'aide de signaux de processus

Vous avez appris le comportement par défaut de Docker (signal d'arrêt), avec le docker stop conteneurs, lors de l'arrêt d'un conteneur. Mais vous ne voudrez peut-être pas le comportement par défaut. Au lieu de cela, vous pouvez demander à Docker d'utiliser des signaux d'arrêt alternatifs.

Avec le docker run commandes --stop-signal flag, vous pouvez spécifier le signal d'arrêt lors du démarrage du conteneur. Cet indicateur définit le signal qui sera envoyé au conteneur en cours d'exécution lorsque vous souhaitez qu'il s'arrête.

Dans l'exemple ci-dessous, le --stop-signal flag prend la valeur SIGQUIT , qui indique à Docker d'envoyer le signal SIGQUIT lorsqu'il est temps d'arrêter le conteneur. L'exemple utilise également les paramètres suivants :

  • d – Exécute le conteneur en mode détaché (arrière-plan). Le mode détaché ne permettra pas à l'utilisateur d'interagir immédiatement avec le conteneur puisque le processus s'exécute en arrière-plan.
  • t – alloue une console Pseudo-TTY (PTY), qui émule une vraie console de terminal dans le conteneur et empêche le conteneur Ubuntu de se fermer immédiatement. Le conteneur Ubuntu dans l'exemple nécessite une console PTY pour rester active en arrière-plan.
  • « nom de l'image » - Quelle image Docker pour provisionner le conteneur à partir de, dans ce cas, le ubuntu photo.
docker run -d -t --stop-signal SIGQUIT ubuntu

Vous pouvez également spécifier le signal d'arrêt à l'aide d'un Dockerfile, qui indique à Docker comment créer un conteneur. Vous pouvez ajouter une entrée au Dockerfile en spécifiant le signal d'arrêt avec STOPSIGNAL SIGQUIT , par exemple. Vous pouvez changer le SIGQUIT avec n'importe quel signal d'arrêt que vous souhaitez.

Quitter les conteneurs immédiatement avec docker kill

Il y aura des moments où vous voudrez quitter les conteneurs sans leur accorder de période de grâce. Le docker kill commande arrête immédiatement un conteneur.

L'exemple ci-dessous passe le conteneur avec l'ID 2aa318273db5 pour docker kill . Le conteneur sortira immédiatement via le signal SIGKILL. Le conteneur ne sera pas autorisé à une sortie gracieuse. À la suite de la commande, le conteneur se fermera et l'ID du conteneur sera affiché.

docker kill 2aa318273db5

Docker tue tous les conteneurs avec la commande docker kill $(docker ps -q) . Notez que (docker ps -q ) est une sous-expression ici.

Arrêter et supprimer un conteneur avec docker rm

Par défaut, lorsque vous créez un conteneur, ce conteneur est construit comme avant :il est idempotent. La suppression d'un conteneur aura un impact minimal, et dans cet esprit, docker rm peut forcer l'arrêt et retirer un conteneur. Docker émet un SIGKILL signal au processus principal et supprime le conteneur de la liste des conteneurs disponibles sur votre installation Docker.

Si le conteneur doit conserver les fichiers internes modifiés ou si son état doit être conservé, la suppression d'un conteneur détruira ces modifications. Méfiez-vous des ratés potentiels !

Dans l'exemple suivant, vous avez peut-être démarré un conteneur qui a reçu le nom kind_galileo . Avant de retirer un conteneur, le conteneur doit être arrêté, comme indiqué ci-dessous. Le docker ps -a la commande affiche le statut Exited pour l'exemple de conteneur.

Maintenant que le conteneur a cessé d'émettre le docker rm supprimera entièrement le conteneur.

docker rm kind_galileo

Au lieu d'arrêter le conteneur pour ensuite supprimer le conteneur, la combinaison de --force et docker rm arrêtera et retirera le conteneur en une seule opération. Le conteneur, laughing_elion , ne pourra plus être exécuté.

docker rm --force laughing_elion

Si vous ne spécifiez pas le --force commande, vous rencontrerez le message d'erreur Error response from daemon: You cannot remove a running container...

Arrêter les conteneurs Docker avec Docker Compose

Les commandes Docker sont généralement utilisées sur un seul conteneur, mais vous pouvez créer un service avec plusieurs conteneurs fonctionnant de concert les uns avec les autres. L'outil Docker Compose vous permet de configurer un service composé de plusieurs conteneurs pour qu'ils fonctionnent ensemble.

Étant donné que les conteneurs d'un service sont conçus pour fonctionner ensemble, il est préférable d'arrêter l'ensemble du service lui-même plutôt que n'importe quel conteneur individuel.

Si vous avez un service exécuté avec plusieurs conteneurs, [docker-compose stop] arrête le service sans enlever les conteneurs ou le service. Suivez les instructions ci-dessous pour créer un service Docker Compose, démarrer le service et finalement arrêter le service correctement.

1. Créez un répertoire pour stocker votre fichier de configuration. Dans cet exemple, le répertoire C:\Articles\Ubuntu stockera le fichier.

mkdir C:\Articles\Ubuntu

2. Ensuite, créez le fichier docker-compose.yml fichier contenant la configuration suivante. Le fichier Docker Compose ci-dessous crée un service avec deux conteneurs Ubuntu, et lorsqu'il est activé, les conteneurs ne se ferment pas immédiatement.

# The specification version of docker-compose
version: "3.9"
# The collection of applications composing this service
services:
  # First Ubuntu Container
  container1:
    image: ubuntu
    # Same as the -t option and allocates a Psuedo-TTY, so the container does not immediately exit.
    tty: true
  # Second Ubuntu Container
  container2:
    image: ubuntu
    tty: true

3. Dans une session de terminal, accédez au répertoire de votre fichier de configuration Docker personnalisé, qui dans cet exemple est C:\Articles\Ubuntu . Exécutez le docker-compose up -d pour générer et démarrer le service créé à l'étape précédente en arrière-plan comme indiqué par le -d option.

4. Dans la même session de terminal et le même répertoire, lancez la commande docker-compose stop pour terminer le service et les conteneurs en douceur.

Le docker-compose commande, comme le docker commande, a également le rm --force et kill paramètres. Le docker-compose les paramètres fonctionnent sur le service au lieu d'un seul conteneur. Le docker-compose kill la commande prend également une option -s option pour spécifier le signal d'arrêt.

Conclusion

Les conteneurs Docker sont un outil puissant pour créer des environnements uniques et segmentés pour le développement et la production. Dans cet article, vous avez appris plusieurs façons dont Docker arrête un ou plusieurs conteneurs, voire tous. Vous avez également découvert le signal d'arrêt par défaut utilisé par Docker et comment le modifier.

Avec ces connaissances, vous connaissez maintenant les tenants et les aboutissants de l'arrêt des conteneurs Docker et comment ne pas vous tromper lorsqu'il est temps d'arrêter d'exécuter des conteneurs. Comment comptez-vous arrêter vos conteneurs à partir de maintenant, ayant cette nouvelle connaissance ?


Docker
  1. Qu'est-ce que Docker ? Apprenez à utiliser les conteneurs - Expliqué avec des exemples

  2. Portainer :une interface graphique facile à utiliser pour exécuter et obtenir des conteneurs Docker

  3. Comment utiliser les images Docker, les conteneurs et les Dockerfiles en profondeur

  4. Comment utiliser Docker Compose

  5. Utiliser perf dans un conteneur docker sans --privileged

Comment utiliser les politiques de redémarrage de Docker pour maintenir les conteneurs en cours d'exécution

Comment utiliser Docker Cp pour copier des fichiers entre l'hôte et les conteneurs

Comment supprimer les conteneurs Docker

Comment arrêter les conteneurs Docker

Utiliser Ngnix pour proxy Docker Containers sur Ubuntu

Comment répertorier/démarrer/arrêter/supprimer les conteneurs docker