S’il y a bien une astuce Docker à retenir quand on l’utilise sur son environnement de développement, c’est bien docker exec. Cette commande permet d’exécuter une commande dans un conteneur existant. Comme démontré avec des exemples concrets précédemment, cela permet de créer une collection Solr ou bien de faire un dump MySQL. Et si un nouveau conteneur autonome avait été créé lors de la création d’un cluster Cassandra pour créer une table, il aurait été possible d’utiliser le conteneur d’un des nœuds du cluster comme ci-dessous :

$ docker ps --format "table {{.ID}}\t {{.Image}}\t {{.Names}}\t {{.Status}}"
CONTAINER ID        IMAGE               NAMES                           STATUS
8f47b9f3e0a0         cassandra           myproject_cassandra2_1    Up 56 seconds
154d3bf48979         cassandra           myproject_cassandra1_1    Up 56 seconds
738bed1a445a         cassandra           myproject_cassandra0_1    Up 56 seconds

$ docker exec -ti 738bed1a445a cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.2.3 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh>

Pourquoi cette commande est-elle si pratique au jour le jour ? Car elle permet “d’entrer dans un conteneur”. Comment ? En exécutant un bash !

$ docker exec -ti 738bed1a445a bash
root@738bed1a445a:/# ps -eaf
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  4 23:38 ?        00:00:12 java -ea -javaagent:/usr/share/cassandra/lib/jamm-0.3.0.jar -XX:+CMSClassUnloadingEnabled -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms1001M -Xmx1001M -Xmn100M -XX:+HeapDumpOnOutOf

root       187     0  0 23:42 ?        00:00:00 bash
root       193   187  0 23:42 ?        00:00:00 ps -eaf

Avec cette astuce, il est bien plus facile d’analyser un conteneur qui ne fonctionne pas correctement en vérifiant les fichiers de logs, les fichiers de configuration ou bien le contenu des répertoires montés via des volumes Docker.

Pour rappel, il est recommandé de ne faire tourner qu’un seul programme dans un conteneur. Cet usage n’est donc pas recommandé pour de la production mais se révèle très pratique pour les développeurs au quotidien.