Habituellement, vous voulez que les applications Docker soient entièrement contenues, mais parfois, à des fins de développement ou d'automatisation, il est utile de pouvoir travailler avec des conteneurs Docker comme s'il y avait des machines virtuelles Linux. Docker fournit des outils pour exécuter des commandes et même des shells entiers à l'intérieur de conteneurs.
Exécuter des commandes dans des conteneurs
Pour exécuter une commande dans un conteneur, vous aurez besoin de son ID de conteneur, sauf si vous avez défini un nom spécifique pour ce conteneur. Il s'agit d'une longue chaîne hexadécimale que vous pouvez trouver dans la liste des processus Docker :
docker ps
Ensuite, vous pouvez utiliser le exec -it
commande à exécuter à l'intérieur du conteneur. Par exemple, afficher la sortie d'un fichier journal :
docker exec -it containerID tail /var/log/nginx/access.log
Vous pouvez également exécuter des scripts dans des conteneurs :
docker exec -it containerID script.sh
Le -it
les drapeaux sont respectivement pour le « mode interactif » et le TTY, et sont utilisés presque tout le temps. Il existe quelques autres indicateurs que vous pouvez utiliser :
--workdir
ou-w
change le répertoire courant avant la commande.--detach
, ou-d
, exécute la commande en arrière-plan.--env
, ou-e
, définit les variables d'environnement avant l'exécution.--env-file
fait la même chose, mais est plus sûr pour la gestion des secrets.--privileged
exécute la commande avec des autorisations étendues.--user
s'exécute en tant qu'utilisateur différent
Bien sûr, cela ne fonctionne que sur un conteneur en cours d'exécution. Si vous souhaitez suspendre un conteneur pour effectuer la maintenance, vous devrez soit déployer des mises à jour via une nouvelle version d'image, soit apporter des modifications aux données montées sur volume à partir du système d'exploitation hôte.
Se connecter en SSH à un conteneur
Vous n'êtes pas limité à de simples commandes, vous pouvez en fait ouvrir un shell en exécutant /bin/bash
comme la commande. Vous serez peut-être limité dans les outils disponibles (la plupart des conteneurs proposent une installation Linux assez simple), mais cela facilite grandement l'exécution de nombreuses commandes.
docker exec -it containerID /bin/bash
Il s'agit simplement d'un shell accessible depuis l'hôte, qui fonctionne bien dans la plupart des cas. Mais, si vous le souhaitez, vous pouvez configurer vos conteneurs pour qu'ils soient entièrement disponibles via SSH, comme un VPS. Vous pouvez en savoir plus sur la configuration dans notre guide pour exécuter un service SSH dans un conteneur Docker.
CONNEXE : Comment se connecter en SSH à un conteneur Docker
Copier des fichiers vers et depuis des conteneurs
Exécuter des commandes avec exec -it
fonctionne, mais il y a toujours une couche entre l'hôte et le conteneur qui empêche la création de scripts faciles. D'une part, s'il est facile d'envoyer des commandes à un conteneur, il est plus difficile d'obtenir la sortie du système de fichiers.
Bien que vous puissiez diriger le STDOUT de exec -it
vers d'autres services sur le système d'exploitation hôte, vous pouvez également copier des fichiers vers et depuis le système de fichiers du conteneur. Par exemple, extraire un fichier journal et le coller sur l'hôte :
docker cp container:/var/log/nginx/example.log example.log
Ou en extrayant des répertoires entiers :
docker cp nginx:/etc/nginx/ nginxconfig/
Si vous le faites régulièrement, vous pouvez envisager d'utiliser une liaison ou un montage de volume pour rendre les données directement accessibles depuis l'hôte.
CONNEXE : Comment utiliser Docker Cp pour copier des fichiers entre l'hôte et les conteneurs