Aller au contenu principal

Pourquoi Docker épisode I : un gestionnaire de processus isolés

Docker est un "gestionnaire de processus"

Il permet de lancer des programmes dans des "boîtes" virtuelles à l'intérieur du noyau Linux.

Il gère les programmes qu'il a participer à lancer.

Lancer une commande listant les process dans un terminal

  • Appeler un terminal et entrer la commande ps suivante.
sudo ps fauxw
  • ps est un outil qui permet d'obtenir des listes de process.
  • Ce qui apparaît à l'écran est une liste de processus du système.

Qu'est-ce qu'un process ?

Un process est un programme en cours d'exécution, autrement dit c'est une instance active d'un programme.

Toute commande que vous exécutez lance un process, voire plusieurs ("processus enfants").

Une base de donnés, un serveur web, un éditeur de texte, c'est toujours un process.

Un process c'est l'entité qui permet au système de gérer un programme en cours d'exécution.

Pour CHAQUE process individuellement, le système :

  • lui attribue un numéro unique
  • lui associe un utilisateur
  • lui alloue de la mémoire à la demande
  • lui alloue du temps de calcul
  • garde la liste des fichiers qu'il a ouvert
  • maintient des statistiques le concernant
  • permet de communiquer avec lui

En somme, le process est l'unité de base pour exécuter du code dans un système avec

  • des accès aux ressources systèmes
  • des autorisations
  • des échanges
  • des mesures d'usage des ressources

Revenons à notre liste de process

On peut retrouver pour chaque ligne les informations attribuées par le système à ses process.

-----     ------ ---- ---- ------  ---- -------  ---  --------  ----  ---------------
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
alban 209950 0.0 0.0 6820 2340 ? S févr.02 0:00 /bin/bash
alban 209962 2.7 4.8 4052524 783580 ? Sl févr.02 49:15 \_ /usr/lib/thunderbird/thunderbird
----- ------ ---- ---- ------ ---- ------- --- -------- ---- ---------------
USER : Utilisateur
PID: Numéro du process
%CPU, %MEM : statistiques CPU / RAM
VSZ, RSS : Usage mémoire
TTY : Terminal attaché au process
STAT : état du process
START : Temps de départ
TIME : Temps de calcul écoulé
COMMAND : Programme exécuté

Le signe \_ dans la commande indique un process enfant.

Docker est un "gestionnaire de process"

On a vu qu'un conteneur Docker, c'est l'activation d'une image Docker.

Cette activation c'est un process, avec ou sans process enfants.

Chaque image Docker est spécialisée pour lancer un seul process (sauf exception).

Dans la liste des process, saurez vous identifier les conteneurs Docker ?

root      293758  0.0  0.0 1525548 5728 ?        Sl   10:27   0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id c905f6e1b44cd2b77bd26f0415a451e8d039b7fc3f6b27d1b9831ba5b9e93e0b -address /run/containerd/containerd.sock
root 293777 0.0 0.1 754284 21988 ? Ssl 10:27 0:03 \_ /portainer
root 301521 0.0 0.0 1526700 5468 ? Sl 10:06 0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 37df9e23b649ff41ac8c80d32ebcacd4d36fef37b19bc6271894e1af1cc23af1 -address /run/containerd/containerd.sock
root 301541 0.0 0.0 111380 2664 ? Ssl 10:06 0:00 \_ /go/bin/web-password-generator

Avancé

ps fauxw | grep containe[r] -C 1 

On voit dans cette exemple qu'une application web d'admin docker (portainer) est lancé via Docker, tout comme un générateur de mots de passe.

Le process "important", celui qui est spécifique à l'image, est un enfant du process containerd-shim-runc-v2.

Quand on parle de Docker, c'est une simplification, car en fait docker est un system fait de plusieurs composants.

containerd-shim-runc-v2 est un composant chargé de démarrer les process dans les images docker pour l'utilisateur.

Ce sont ces process que l'on appelle les "conteneurs".

Docker surveille l'état des conteneurs, les relance en cas de problème, les arrêter, etc.