Conteneurs en arrière-plan
Un conteneur non-interactif
Nous allons lancer un conteneur tout simple qui affiche des nombres aléatoires chaque seconde.
$ docker run ghcr.io/zaggash/random
23008
19194
17802
16235
8189
667
- Ce conteneur continuera de s’executer indéfiniement.
- Un
ctrl+c
permet de l’arrêter.
en arrière-plan
Nous pouvons lancer ce conteneur de la meme manière mais en arrière plan avec l’option -d
$ docker run -d ghcr.io/zaggash/random
a5a20f1f8897d6b7a7644a322141ad74a3c21e28530b11cf10ef583ba539e55c
On ne voit plus la sortie standard du conteneur, mais le daemon dockerd
collecte toujours stdin/stdout du conteneur et les écrit dans un fichier de log.
La chaîne de caractères est l’ID complet de notre conteneur.
Petit rappel du chapître précedent.
On peut voir le processus dockerd, PID 7807 qui contient la socket de containerd en argument.
Puis notre processus enfant 8247, executé par runc, PID 8217 lui même demarré par containerd, PID 2656
$ ps fxa | grep dockerd -A 3
[...]
2656 ? Ssl 42:56 /usr/bin/containerd
8217 ? Sl 0:00 \_ containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/027b6c72b74f510b3403a3cd246e3c8c802034960cb82bf45dad8278f0e21d6c -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
8247 ? Ss 0:00 \_ /bin/sh -c while echo $RANDOM;do sleep 1;done
--
7807 ? Ssl 1:03 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
[...]
Un processus conteneurisé est un processus system comme un autre.
On peut le voir avec un ps
on peut faire l’analyser avec un strace
, lsof
,…
Plus de commandes
Verifier l’état de notre conteneur
Verifier les conteneurs en cours d’execution avec la commande docker ps
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5a20f1f8897 ghcr.io/zaggash/random "/bin/sh -c 'while e…" 5 minutes ago Up 5 minutes crazy_khorana
L’API nous retourne:
- l’ID tronqué de notre conteneur
- l’image utilisé par le conteneur
- l’etat du conteneur (Up)
- un nom généré aléatoirement
Lancer 2/3 conteneurs supplémentaires et verifier que docker ps
nous retourne tous les conteneurs.
Quelques commandes utiles
1 - Voir les ID des conteneurs
Si vous voulez lister seulement les IDs des conteneurs, l’option -q
renvoi une colonne sans les entêtes.
Cet argument est particulièrement utile pour le scripting.
docker ps -q
eaf444d185be
aaeb4643ae39
a5a20f1f8897
2 - Voir les logs des conteneurs
Docker garde les logs stderr et stdout de chaque conteneur. Verifions ça avec notre premier conteneur
$ docker logs a5a
[...]
5412
3585
13237
20376
29438
Docker nous retourne la totalité des logs du conteneur.
Pour eviter d’être polluer par tout ça, nous pouvons utiliser l’argument --tail
et extraire les dernieres lignes
$ docker logs --tail 5 a5a
12893
32068
25356
571
16054
Pour voir les logs en temps réel, on peut utiliser l’argument -f
$ docker logs --tail 5 -f a5a
6644
28412
3315
22610
27692
3136
9107
20481
^C
Nous voyons les 5 dernières lignes de logs puis l’affichage en temps réél.
ctrl+c
pour quitter.
3 - Arrêter un conteneur
Nous pouvons arrêter un conteneur de deux manières.
- avec un
kill
- avec un
stop
Le kill
va arrêter le conteneur de manière immediate avec un signal KILL
.
Le stop
envoie un signal TERM
et peut être intercepté par l’application pour terminer le processus.
Après 10s si le processus n’est pas arrêté, Docker envoi un KILL
On peut tester ça avec notre conteneur
$ docker stop a5a
a5a
Nous voyons bien que le terminal nous rend la main après une dizaine de seconde.
- Docker envoi un TERM
- Le conteneur ne réagit pas à ce signel, c’est une simple boucle en Shell.
- 10s après, le conteneur est toujours actif, alors Docker envoi un KILL et termine le conteneur.
Maintenant, on va arrêter les conteneurs restant avec un kill en utilisant les commandes vues précédemment
$ docker kill $(docker ps -q)
eaf444d185be
aaeb4643ae39
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Nous voyons ici que les conteneurs ont été arrêtés immediatement.
$ docker ps -a
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eaf444d185be ghcr.io/zaggash/random "/bin/sh -c 'while e…" 29 minutes ago Exited (137) 3 minutes ago friendly_chatelet
aaeb4643ae39 ghcr.io/zaggash/random "/bin/sh -c 'while e…" 29 minutes ago Exited (137) 3 minutes ago recursing_dirac
a5a20f1f8897 ghcr.io/zaggash/random "/bin/sh -c 'while e…" 44 minutes ago Exited (137) 8 minutes ago crazy_khorana