Afin d'inspecter les processes d'un container nous pouvons exécuter la commande docker container top NAME :
$ docker run -d --name nginx nginx
b7534a910839dac5c04f07586fa39871e6ca6c7bcd716f64962471aef84c9d72
$ docker top nginx
PID USER TIME COMMAND
12962 root 0:00 nginx: master process nginx -g daemon off;
13025 101 0:00 nginx: worker process
13026 101 0:00 nginx: worker process
13027 101 0:00 nginx: worker process
13028 101 0:00 nginx: worker process
13029 101 0:00 nginx: worker process
13030 101 0:00 nginx: worker process
13031 101 0:00 nginx: worker process
13032 101 0:00 nginx: worker process
Comme on a pu le voir, cette commande permet de lister tous les processes en cours dans le container nommé nginx.
On peut voir l'utilisation des ressources en live via la commande docker container stats NAME :
$ docker stats nginx
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b7534a910839 nginx 0.00% 9.961MiB / 31.42GiB 0.03% 0B / 0B 0B / 28.7kB 9
Cela va afficher les ressources utiliser par le container et les actualiser en temps réel.
Configurer un container qui se redémarre tout seul est faisable grace au paramètre --restart de la commande docker run
Argument | Utilité |
---|---|
no | Par défaut, le container ne se redémarre pas automatiquement. |
on-failure | Redémarre le container uniquement si celui-ci a été quitté avec une erreur autre que 0 |
always | Redémarre toujours le container |
unless-stopped | (recommandé) Similaire à always, cependant, quand le container est stoppé manuellement, celui-ci ne se redémarre pas même après que le daemon docker soit redémarré (contrairement à always) |
Le paramètre s'utilise de la manière suivante :
$ docker run -d --name restart-unless --restart unless-stopped nginx
Docker events va nous permettre d'avoir les événements docker en temps réel :
$ docker system events # Puis docker rm -f nginx dans un autre terminal
2021-06-27T11:03:22.301959722Z container kill b7534a910839dac5c04f07586fa39871e6ca6c7bcd716f64962471aef84c9d72 (image=nginx, maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>, name=nginx, signal=9)
2021-06-27T11:03:22.429605609Z container die b7534a910839dac5c04f07586fa39871e6ca6c7bcd716f64962471aef84c9d72 (exitCode=137, image=nginx, maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>, name=nginx)
2021-06-27T11:03:22.666213671Z network disconnect e396cf6cf0f626e49fff1e58b7969b18e9488b3ab3b58031e03447c0f97e11da (container=b7534a910839dac5c04f07586fa39871e6ca6c7bcd716f64962471aef84c9d72, name=bridge, type=bridge)
2021-06-27T11:03:22.695536930Z container destroy b7534a910839dac5c04f07586fa39871e6ca6c7bcd716f64962471aef84c9d72 (image=nginx, maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>, name=nginx)
On peut filter sur une date ou sur un type d'événements :
docker system events --since '<PERIODE>'
docker system events --filter <FILTER_NAME>=<FILTER>
# Soit les 2 combinés
docker system events --filter type=container --since '1h'
Les containers stoppés peuvent s'accumuler et prendre de plus en plus de place. Afin de régler ce problème il existe différentes solutions :
On peut aussi lister que les containers avec un status "exited" :
$ docker container ls -a -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bf3171403417 postgres "docker-entrypoint.s…" 24 seconds ago Exited (1) 22 seconds ago postgres
# On peut récupérer le CONTAINER_ID uniquement :
$ docker container ls -a -q -f status=exited # -aqf fonctionne aussi
bf3171403417
On peut évidemment redémarrer un container stoppé :
$ docker container start postgres
On peut supprimer une liste de container via la commande suivante :
$ docker container rm $(docker container ls -aqf status=exited) # Supprime tous les containers avec le status=exited
bf3171403417
Portainer va nous permettre de gérer les containers docker via une GUI.
Voici comment mettre en place Portainer :
$ docker volume create portainer_data
portainer_data
$ docker container run -d --name portainer -p 8080:9000 \
> --restart unless-stopped \
> -v /var/run/docker.sock:/var/run/docker.sock \
> -v portainer_data:/data portainer/portainer
4b160c10fce94423bc106b00da94e8bb89bd027f01677daebfadbde769ef19aa
Une fois initialisé on arrive sur la page d'accueil :
Le reste est assez intuitif mais on peut retrouver la documentation ici.
Watchtower permet de vérifier que l'image utilisée est bien à jour. S'il y a une mise à jour, Watchtower s'occupera de redémarrer le container en le mettant à jour.
$ docker container run -d --name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
v2tec/watchtower -i 15 # Interval 15s
Toutes les 15s, Watchtower va donc vérifier que nos containers sont à jour.