Comment utiliser la commande docker container exec pour exécuter des commandes dans un conteneur en cours d'exécution

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 lab, vous apprendrez à utiliser efficacement la commande docker container exec pour exécuter des commandes dans un conteneur Docker en cours d'exécution. Nous commencerons par démarrer un conteneur pour l'exécution, puis nous explorerons comment exécuter une commande unique dans un conteneur en cours d'exécution et comment lancer un shell interactif pour des interactions plus complexes.

De plus, ce lab couvrira comment personnaliser l'environnement d'exécution en définissant des variables d'environnement et en spécifiant le répertoire de travail pour le processus exec, vous fournissant ainsi les compétences nécessaires pour gérer et interagir avec vos conteneurs en cours d'exécution.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555108{{"Comment utiliser la commande docker container exec pour exécuter des commandes dans un conteneur en cours d'exécution"}} docker/ps -.-> lab-555108{{"Comment utiliser la commande docker container exec pour exécuter des commandes dans un conteneur en cours d'exécution"}} docker/exec -.-> lab-555108{{"Comment utiliser la commande docker container exec pour exécuter des commandes dans un conteneur en cours d'exécution"}} docker/pull -.-> lab-555108{{"Comment utiliser la commande docker container exec pour exécuter des commandes dans un conteneur en cours d'exécution"}} end

Démarrer un conteneur pour exécution

Dans cette étape, vous apprendrez comment démarrer un conteneur Docker et exécuter une commande à l'intérieur. Les conteneurs Docker sont des unités légères, portables et autonomes qui encapsulent une application et ses dépendances.

Commencez par télécharger l'image ubuntu depuis Docker Hub. Cette image contient un environnement minimal basé sur le système d'exploitation Ubuntu.

docker pull ubuntu:latest

Vous devriez voir une sortie indiquant que l'image est en cours de téléchargement. Une fois le téléchargement terminé, vous pouvez démarrer un conteneur basé sur cette image et exécuter une commande simple. Nous utiliserons la commande echo pour afficher un message.

docker run ubuntu:latest echo "Hello from Docker container!"

Décomposons cette commande :

  • docker run : Commande pour créer et démarrer un nouveau conteneur.
  • ubuntu:latest : Spécifie l'image à utiliser pour le conteneur. ubuntu est le nom de l'image, et latest est le tag indiquant la version la plus récente.
  • echo "Hello from Docker container!" : Commande qui sera exécutée à l'intérieur du conteneur.

Vous devriez voir la sortie Hello from Docker container! s'afficher dans votre terminal. Cela confirme que le conteneur a été démarré et que la commande a été exécutée avec succès.

Exécuter une commande dans un conteneur en cours d'exécution

Dans l'étape précédente, nous avons démarré un conteneur et exécuté une commande qui s'est terminée avant que le conteneur ne s'arrête. Dans cette étape, nous allons apprendre à exécuter une commande dans un conteneur déjà en cours d'exécution. Cette fonctionnalité est utile pour inspecter l'état d'un conteneur ou effectuer des tâches administratives.

Commençons par démarrer un conteneur qui restera actif. Nous utiliserons à nouveau l'image ubuntu avec une commande qui maintient le conteneur en fonctionnement, comme sleep infinity.

docker run -d ubuntu:latest sleep infinity

Examinons les options utilisées :

  • -d : Cette option exécute le conteneur en mode détaché (en arrière-plan) sans bloquer le terminal.
  • sleep infinity : Cette commande interne fait dormir le conteneur indéfiniment, le maintenant en état de fonctionnement.

Maintenant, récupérons l'ID du conteneur en cours d'exécution. Utilisez la commande docker ps pour lister les conteneurs actifs.

docker ps

Vous devriez obtenir un résultat similaire à ceci, affichant votre conteneur en cours d'exécution :

CONTAINER ID   IMAGE          COMMAND           CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu:latest   "sleep infinity"   About a minute ago   Up About a minute             <container_name>

Copiez le CONTAINER ID affiché. Nous pouvons maintenant utiliser la commande docker exec pour exécuter une commande dans ce conteneur. Remplacez <container_id> par l'ID que vous avez copié.

docker exec / < container_id > ls

Cette commande exécutera ls / dans le conteneur spécifié, listant le contenu du répertoire racine du système de fichiers du conteneur. Vous devriez voir une liste de répertoires et fichiers, similaire à ce que vous trouveriez sur un système Linux.

Cette démonstration illustre comment exécuter une commande dans un conteneur en cours d'exécution sans avoir à l'arrêter ou le redémarrer.

Ouvrir un shell interactif dans un conteneur en cours d'exécution

Dans l'étape précédente, nous avons exécuté une commande unique dans un conteneur actif. Souvent, vous pourriez avoir besoin d'interagir plus longuement avec un conteneur en cours d'exécution, par exemple pour déboguer un problème ou explorer son système de fichiers. Dans cette étape, vous apprendrez comment ouvrir une session shell interactive à l'intérieur d'un conteneur en fonctionnement.

Nous continuerons à utiliser le conteneur ubuntu que vous avez démarré précédemment. Si le conteneur n'est pas actif, vous pouvez le relancer avec la commande de l'étape précédente :

docker run -d ubuntu:latest sleep infinity

Récupérez l'ID du conteneur ubuntu en cours d'exécution avec docker ps :

docker ps

Utilisez maintenant la commande docker exec avec les options -it pour ouvrir une session terminal interactive dans le conteneur. Remplacez <container_id> par l'ID réel de votre conteneur actif.

docker exec -it < container_id > bash

Examinons les nouvelles options :

  • -i : Cette option maintient STDIN ouvert même non attaché, nécessaire pour les sessions interactives.
  • -t : Cette option alloue un pseudo-TTY, requis pour une session shell.
  • bash : Commande à exécuter dans le conteneur, dans ce cas le shell Bash.

Après exécution, votre invite de commande devrait changer, indiquant que vous êtes désormais dans le shell Bash du conteneur. Vous pouvez maintenant exécuter des commandes dans l'environnement du conteneur. Par exemple, listez les fichiers du répertoire courant :

ls

Vous interagissez directement avec le système de fichiers et l'environnement du conteneur. Pour quitter le shell du conteneur et revenir au terminal de votre machine hôte, tapez simplement exit :

exit

Vous devriez maintenant être de retour dans votre session terminal d'origine. Cet accès shell interactif est un outil puissant pour déboguer et gérer vos conteneurs.

Définir des variables d'environnement pour le processus exec

Dans cette étape, vous apprendrez comment définir des variables d'environnement spécifiquement pour la commande exécutée avec docker exec. Cela vous permet de transmettre des configurations ou d'autres informations au processus s'exécutant dans le conteneur sans modifier son environnement de manière permanente.

Nous continuerons à utiliser le conteneur ubuntu en cours d'exécution des étapes précédentes. S'il n'est pas actif, démarrez-le avec :

docker run -d ubuntu:latest sleep infinity

Récupérez l'ID du conteneur ubuntu en cours d'exécution avec docker ps :

docker ps

Maintenant, exécutons une commande dans le conteneur tout en définissant une variable d'environnement pour cette exécution spécifique. Nous utiliserons la commande printenv pour afficher les variables d'environnement. Remplacez <container_id> par l'ID de votre conteneur.

docker exec -e MY_VARIABLE="Hello from LabEx" MY_VARIABLE < container_id > printenv

Examinons la nouvelle option :

  • -e MY_VARIABLE="Hello from LabEx" : Cette option définit une variable d'environnement nommée MY_VARIABLE avec la valeur "Hello from LabEx" pour la commande printenv en cours d'exécution.

Vous devriez voir la sortie Hello from LabEx s'afficher dans votre terminal, confirmant que la variable d'environnement a bien été définie pour le processus printenv.

Pour démontrer que cette variable n'est définie que pour le processus exec et non pour le processus principal du conteneur, exécutons à nouveau printenv MY_VARIABLE sans l'option -e :

docker exec MY_VARIABLE < container_id > printenv

Cette fois, vous ne devriez voir aucune sortie, ou potentiellement une erreur indiquant que la variable n'est pas définie. Cela prouve que la variable d'environnement n'était disponible que pour la commande exécutée avec le flag -e.

La définition de variables d'environnement avec docker exec -e est un moyen pratique de transmettre des configurations dynamiques aux processus s'exécutant dans vos conteneurs.

Définir le répertoire de travail pour le processus exec

Dans cette dernière étape, vous apprendrez comment définir le répertoire de travail pour les commandes exécutées avec docker exec. Par défaut, docker exec exécute les commandes dans le répertoire de travail configuré du conteneur (souvent /). Vous pouvez modifier ce comportement en utilisant l'option -w.

Nous continuerons à utiliser le conteneur ubuntu en cours d'exécution. S'il n'est pas actif, démarrez-le avec :

docker run -d ubuntu:latest sleep infinity

Récupérez l'ID du conteneur ubuntu en cours d'exécution avec docker ps :

docker ps

Maintenant, exécutons une commande qui affiche le répertoire de travail courant dans le conteneur. Nous utiliserons la commande pwd. Remplacez <container_id> par l'ID de votre conteneur.

docker exec < container_id > pwd

Vous devriez voir / comme résultat, qui est le répertoire de travail par défaut dans l'image ubuntu.

Exécutons maintenant à nouveau la commande pwd, mais cette fois en définissant le répertoire de travail sur /tmp à l'aide de l'option -w.

docker exec -w /tmp < container_id > pwd

Examinons la nouvelle option :

  • -w /tmp : Cette option définit le répertoire de travail pour la commande pwd sur /tmp dans le conteneur.

Vous devriez maintenant voir /tmp comme résultat. Cela démontre que vous pouvez spécifier un répertoire de travail différent pour les commandes exécutées avec docker exec. Cette fonctionnalité est utile lorsque vous devez exécuter des commandes qui opèrent sur des fichiers dans un emplacement spécifique du conteneur.

Ceci conclut le laboratoire sur l'exécution de commandes dans les conteneurs Docker. Vous avez appris à :

  • Démarrer des conteneurs pour exécution
  • Exécuter des commandes dans des conteneurs en cours d'exécution
  • Ouvrir des sessions shell interactives
  • Définir des variables d'environnement
  • Spécifier le répertoire de travail pour les processus exec

Résumé

Dans ce laboratoire, vous avez appris à démarrer un conteneur Docker et à exécuter une commande à l'intérieur en utilisant docker run. Vous avez ensuite progressé vers l'exécution de commandes dans un conteneur déjà en cours d'exécution en utilisant la commande docker container exec, ce qui est essentiel pour inspecter ou gérer des conteneurs actifs.

De plus, vous avez exploré des fonctionnalités avancées de docker container exec, notamment :

  • La définition de variables d'environnement pour le processus exécuté
  • La spécification du répertoire de travail

Ces fonctionnalités offrent un meilleur contrôle et une plus grande flexibilité lors de l'interaction avec des conteneurs en cours d'exécution.