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

Docker Exec :votre commande Goto pour exécuter des commandes dans Docker

Avez-vous déjà eu besoin de voir ce qui se passe à l'intérieur d'un conteneur Docker ? Les conteneurs sont destinés à être idempotents :en cas de problème, redéployez un nouveau conteneur. Souvent la vie n'est pas si simple. Vous devez exécuter des commandes dans le conteneur pour identifier le problème. C'est là que le docker exec commande peut aider.

Cet article vous apprendra comment exécuter des commandes sur un conteneur Docker en cours d'exécution à l'aide de docker exec commande.

Prérequis

Pour suivre les exemples de cet article, vous devrez respecter les points suivants.

  • Toute version récente de Docker Desktop fonctionnera sous Windows, Linux ou macOS. Ce didacticiel utilise la v3.1.0 exécutée sur Windows 10.

Démarrer un conteneur NGINX

Docker exec exécute des commandes dans des conteneurs. Mais, pour ce faire, vous devez d'abord disposer d'un conteneur dans lequel exécuter ces commandes. Commençons par télécharger une image Docker et créer un conteneur de démonstration.

  1. Créez un nouveau répertoire, ce tutoriel utilise C:\gitrepos\test , pour contenir les fichiers utilisés pour le conteneur.

2. Créez un fichier, nommé dockerfile (sans extension), contenant le code suivant. Le Dockerfile définit les étapes nécessaires pour créer un conteneur.

FROM nginx:alpine
 COPY index.html /usr/share/nginx/html/index.html

3. Ensuite, créez un fichier, dans le même répertoire, nommé index.html qui contient le code suivant. Il s'agit d'un fichier HTML qui, au démarrage du conteneur, affichera un message Hello World.

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
    <title>Hello World - Nginx Docker</title> 
    <style> 
       h1{ font-weight:lighter; font-family: Arial, Helvetica, sans-serif; 
       } 
    </style> 
    </head> 
    <body> 
       <h1> 
          Hello World 
       </h1> 

    </body> 
    </html>

4. Créez maintenant le conteneur Nginx Docker. Étant donné que le Dockerfile se trouve dans le répertoire de travail actuel, spécifiez . pour faire savoir au moteur Docker qu'il doit y regarder. Assurez-vous également de baliser le conteneur avec my-ngnix en utilisant le t paramètre pour assurer une référence plus facile à l'avenir.

docker build -t my-nginx .

5. Maintenant que le conteneur est construit, démarrez le conteneur avec la commande Docker run.

# rm - Informs Docker to delete the container after it has stopped 
# d - Return control of the command-line after the command has been executed 
# p - Map the internal container port 80 to an external port 80 docker run --rm -d -p 80:80 my-nginx

6. Enfin, ouvrez votre navigateur Web et accédez à http://localhost/ pour voir la suite.

Exécuter des commandes avec Docker Exec

Lors de l'exécution de commandes dans un conteneur Docker, vous devrez peut-être exécuter une commande de manière interactive. Exécuter des commandes de manière interactive signifie saisir une commande, obtenir des commentaires, saisir une autre commande, etc. Les commandes interactives prennent le contrôle de votre session et vous empêchent de faire quoi que ce soit d'autre.

Mais que se passe-t-il si vous connaissez déjà les commandes à envoyer au conteneur à l'avance et que vous souhaitez exécuter des commandes en arrière-plan ? Dans ce cas, vous pouvez exécuter des commandes non interactives. Les commandes non interactives vous permettent d'envoyer une commande à Docker et de reprendre instantanément le contrôle de la console.

Localisation du nom et de l'ID du conteneur

Maintenant que vous avez construit le conteneur, vous pouvez exécuter des commandes à l'intérieur du conteneur. Avant d'exécuter une commande, recherchez le nom ou l'ID du conteneur NGINX. Le nom ou l'ID fonctionnera dans les commandes Docker. Dans cet esprit, se souvenir de l'ID peut être plus difficile que le nom !

Pour afficher toutes les informations de conteneur en cours d'exécution, exécutez le Docker ps commande pour afficher les informations suivantes.

docker ps

Copiez soit l'ID unique, e17e4b6be01a , ou le nom généré aléatoirement mystifying_chandrasekhar dans votre presse-papiers pour une utilisation ultérieure.

Exécuter une commande non interactive avec Docker Exec

Comme exemple d'exécution d'une commande non interactive, copiez et exécutez la commande ci-dessous pour renvoyer une liste de fichiers dans /var/log répertoire avec le ls -l commande. Passez tout après le nom du conteneur, mystifying_chandrasekhar , au Docker exec commande.

docker exec mystifying_chandrasekhar ls -l /var/log

Éviter la sortie de la console avec les commandes Docker

En rendant instantanément le contrôle du shell à l'utilisateur, les opérations importantes évitent de bloquer la console. Renoncez à la sortie de la console avec le d détaché option. La commande ci-dessous crée le fichier /tmp/execWorks via le touch commande dans le conteneur et n'affiche aucune sortie sur la console.

docker exec -d mystifying_chandrasekhar touch /tmp/execWorks

Exécuter des commandes interactives avec Docker Exec

Jusqu'à présent, vous avez appris à exécuter des commandes non interactives dans un conteneur Docker avec docker exec . Cependant, vous pouvez être confronté à un moment où vous devez dépanner un conteneur, par exemple, lorsque vous devez envoyer des commandes au conteneur de manière interactive. Dans ce cas, vous devez exécuter les commandes de manière interactive.

Exécuter des commandes de manière interactive avec docker exec nécessite deux options, i et t . Le i l'option garde STDIN ouvert, permettant aux commandes d'être envoyées au conteneur, et le t L'option alloue un pseudo-TTY (PTY), un canal de communication, pour saisir des commandes.

Copiez et collez la commande suivante pour ouvrir une invite de commande interactive dans le conteneur Docker en cours d'exécution avec le shell Bourne (sh), comme indiqué par le changement d'invite en / # .

docker exec -it mystifying_chandrasekhar sh

Une fois dans le shell, exécutez maintenant les commandes ci-dessous pour montrer la liste des fichiers à partir du conteneur. Enfin, en exécutant la exit commande pour quitter le shell interactif.

ls -l /var/log
exit

Pour ouvrir une invite interactive dans un répertoire spécifique, transmettez le chemin d'accès au w option indiquant à Docker de démarrer le shell dans un répertoire spécifié.

Passer des variables d'environnement à un conteneur en cours d'exécution

De nombreux programmes utilisent des variables d'environnement pour définir des configurations au démarrage. Par exemple, la plupart des applications Java nécessitent le JAVA_HOME variable d'environnement à définir sur le chemin Java.

Vous pouvez passer des variables d'environnement à une session en utilisant le e option. Par exemple, vous devez peut-être remplir une variable d'environnement appelée MYVAR dans un conteneur en cours d'exécution. Pour ce faire, utilisez le e option et fournissez la paire clé/valeur de MYVAR="<some value>" comme indiqué ci-dessous.

docker exec -it -e MYVAR="hello" mystifying_chandrasekhar sh
echo $MYVAR

Passer des variables d'environnement avec un fichier

Si vous avez de nombreuses variables d'environnement ou une configuration partagée, il peut être plus facile de stocker ces variables dans un fichier. Passez le fichier via un chemin relatif ou absolu à Docker avec le --env-file option. Cette technique est souvent utilisée pour fournir des informations d'identification sécurisées à un conteneur. Assurez-vous de ne jamais valider les informations d'identification dans le contrôle de version !

Créez un fichier texte nommé env-vars.txt avec les variables d'environnement à passer et leurs valeurs. Ce fichier peut s'appeler comme vous voulez et n'a pas besoin du .txt extension de fichier.

Passez les variables d'environnement à Docker avec le env-file option. Vérifiez que les variables sont disponibles avec le echo commande comme indiqué dans la capture d'écran ci-dessous.

# Pass the env-vars.txt file and open an interactive prompt
docker exec -it --env-file env-vars.txt mystifying_chandrasekhar sh
# Verify that the environmental variables are available in the Docker container
echo $MYVAR
echo $FOO
echo $SOMETHING

Interagir avec un conteneur en cours d'exécution en tant qu'utilisateur différent

En production, les applications s'exécutent souvent en tant qu'utilisateur spécifique pour restreindre leur accès. Si vous exécutez des applications en tant qu'utilisateur spécifique en production, vous devez également le faire lors du test des commandes.

Dans cet exemple, le conteneur Docker est exécuté en tant que nginx utilisateur. Passer l'utilisateur au w option pour indiquer à Docker de démarrer le conteneur en tant que nginx Compte. Le whoami La commande, exécutée depuis le conteneur, confirme que le nginx user est bien utilisé.

docker exec -it -u nginx mystifying_chandrasekhar sh
whoami

Étapes suivantes

Vous avez appris à exécuter des commandes dans un conteneur en cours d'exécution à l'aide de docker exec commande. Utilisation de exec pour entrer et interroger les conteneurs en cours d'exécution, vous disposez d'un nouvel outil puissant dans votre arsenal pour dépanner les conteneurs Docker.

Maintenant, essayez d'aller plus loin dans ce que vous avez appris et utilisez le contrôle de version Git pour extraire un site Web statique dans le conteneur, plutôt que de copier un seul fichier. Si Git est nouveau pour vous, l'article Guide du débutant sur Visual Studio Code et Git est un excellent point de départ.


Docker
  1. Quelques commandes DOCKER

  2. Aide-mémoire de référence rapide des commandes Docker

  3. Comment exécuter une commande sur un conteneur Docker en cours d'exécution

  4. Création de votre premier conteneur Docker Windows Server

  5. Comment spécifier le nom d'hôte pour le conteneur en cours d'exécution ?

Comment copier des fichiers avec Docker cp dans votre conteneur Docker

21 commandes essentielles que tout utilisateur de Docker devrait connaître

Commandes Docker pour la gestion du cycle de vie des conteneurs (Guide définitif)

ctop - Interface de type Top pour la surveillance des conteneurs Docker

40 commandes Docker importantes pour les développeurs de logiciels

Mettez une minuterie sur vos commandes en cours d'exécution avec la commande Timeout sous Linux