Programme : Module 2 — Devenir familier avec le CLICours 7/17 ▾
- 2.1 Introduction au CLI de Docker17 min
- 2.2 Lister les conteneurs (la commande qu'on tape tout le temps)8 min
- 2.3 Créer notre premier container7 min
- 2.4 Rentrer dans la matrice d'un container6 min
- 2.5 Gérer le bouton On/Off (Start, Stop & Restart)4 min
- 2.6 Nettoyer un peut notre bazaar et libérer de l'espace4 min
- 2.7 Démystifier les Images vs Conteneurs4 min
- 2.8 Le Cheat Sheet Ultime : liste exhaustive (ou presque) des commandes5 min

Rentrer dans la matrice d'un container
Apprendre à interagir avec un conteneur en cours d'exécution
Rentrer dans la matrice : la commande docker exec
Une fois que votre conteneur tourne, vous aurez souvent besoin d'interagir avec lui : vérifier qu'un fichier a bien été créé, lire le contenu d'un dossier de logs, ou tout simplement lancer un script à l'intérieur.
Pour ça, il existe une commande reine : docker exec. Elle permet tout simplement d'exécuter une commande à l'intérieur d'un conteneur spécifique qui est déjà en cours d'exécution.
1. Lancer une commande unique (le "One-shot")
Imaginez que vous vouliez juste lister les fichiers à la racine de votre serveur Nginx. Vous pouvez envoyer la commande ls -l directement au conteneur.
Voyons ce que ça donne avec notre Nginx. D'abord, on liste nos conteneurs pour récupérer l'ID :
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7fb193e99619 nginx "/docker-entrypoint.…" 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp mon_premier_siteMaintenant, on envoie notre commande ls -l à ce conteneur précis :
1➜ ~ docker exec 7fb193e99619 ls -l
2total 64
3lrwxrwxrwx 1 root root 7 Jul 4 09:05 bin -> usr/bin
4drwxr-xr-x 2 root root 4096 Jul 4 09:05 boot
5drwxr-xr-x 5 root root 340 Jul 28 10:12 dev
6drwxr-xr-x 1 root root 4096 Jul 28 10:12 etc
7drwxr-xr-x 2 root root 4096 Jul 4 09:05 home
8# ... (le reste des dossiers système s'affiche) ...Docker a ciblé le conteneur (7fb193e99619), s'y est infiltré une fraction de seconde pour exécuter ls -l, nous a renvoyé le résultat dans notre terminal, puis est ressorti. Efficace et rapide !
2. Garder la porte ouverte : le mode interactif
C'est très pratique pour une seule commande, mais si on veut fouiller un peu plus, taper docker exec à chaque fois devient vite lourd.
On peut aller beaucoup plus loin en utilisant le flag -it (qui signifie Interactif + allocation d'un TTY). Ce flag permet de créer un "tunnel" maintenu ouvert entre notre terminal et le conteneur. On va l'associer à l'ouverture d'un interpréteur de commandes, comme bash (ou sh).
➜ ~ docker exec -it 7fb193e99619 bash
root@7fb193e99619:/#Votre invite de commande (le prompt) n'est plus la même. Vous êtes passé de ➜ ~ à root@7fb193e99619:/#. Cela signifie que vous êtes littéralement connecté en direct à l'intérieur de votre conteneur, avec les droits root (administrateur). C'est exactement comme si vous étiez connecté en SSH sur un serveur distant !
Vous pouvez taper toutes vos commandes (ls, cd, cat) de manière successive. Une fois que vous avez fini votre investigation, il suffit de taper exit pour quitter le conteneur et revenir à votre PC.
3. Les options utiles pour aller plus loin
Il existe plusieurs options super intéressantes pour chaîner les comportements avec docker exec :
-it: Lance le terminal en mode interactif.bashoush: C'est le programme qu'on lance à l'intérieur. Attention, les images très légères (comme Alpine Linux) n'ont pasbashinstallé. Dans ce cas, on utilise toujourssh.-u(User) : Permet de choisir un utilisateur spécifique au lieu du compteroot. C'est une excellente pratique de sécurité pour tester les droits d'un dossier par exemple.-d(Detach) : Exécute une commande en arrière-plan sans bloquer votre terminal (utile pour lancer un script de nettoyage silencieux dans le conteneur).-w(Workdir) : Permet de spécifier dans quel dossier la commande doit s'exécuter.-e(Env) : Permet de passer une variable d'environnement temporaire juste pour cette commande.
Quelques exemples concrets pour la route :
Ouvrir un shell sur une image légère (qui n'a pas bash) :
docker exec -it mon_container shLancer un script en tâche de fond, sans bloquer le terminal :
docker exec -d mon_container python script_de_fond.pySe connecter en tant qu'utilisateur "debian" pour des raisons de sécurité :
docker exec -u debian -it mon_container bashExécuter une commande directement dans un dossier spécifique (ici /app) :
docker exec -w /app mon_container ls -lIci, le script Python aura accès à la variable APP_ENV avec la valeur development uniquement le temps de son exécution.
docker exec -e APP_ENV=development mon_container python script.pyMême si on peut l'utiliser avec exec, dans la vraie vie, tu vas utiliser le flag -e à 90 % du temps quand on crées ton conteneur avec docker run.
C'est d'ailleurs obligatoire pour des images comme MySQL qui exigent un mot de passe administrateur pour démarrer :
docker run -d -e MYSQL_ROOT_PASSWORD=mon_super_mot_de_passe --name ma_base_de_donnees mysql:8.0Tu peux mettre autant de flags -e que tu veux dans une seule commande si tu as plusieurs variables à passer : docker run -e USER=dylan -e ROLE=admin -e THEME=dark mon_image
Cours terminé ?
Valide-le pour faire avancer ta progression dans le parcours.