Pourquoi Docker épisode I : un gestionnaire de processus isolés
Docker est un “gestionnaire de processus”
Section titled “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
Section titled “Lancer une commande listant les process dans un terminal”- Appeler un terminal et entrer la commande
pssuivante.
sudo ps fauxwpsest 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 ?
Section titled “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
Section titled “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 COMMANDalban 209950 0.0 0.0 6820 2340 ? S févr.02 0:00 /bin/bashalban 209962 2.7 4.8 4052524 783580 ? Sl févr.02 49:15 \_ /usr/lib/thunderbird/thunderbird----- ------ ---- ---- ------ ---- ------- --- -------- ---- ---------------USER : UtilisateurPID: Numéro du process%CPU, %MEM : statistiques CPU / RAMVSZ, RSS : Usage mémoireTTY : Terminal attaché au processSTAT : état du processSTART : Temps de départTIME : Temps de calcul écouléCOMMAND : Programme exécutéLe signe \_ dans la commande indique un process enfant.
Docker est un “gestionnaire de process”
Section titled “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.sockroot 293777 0.0 0.1 754284 21988 ? Ssl 10:27 0:03 \_ /portainerroot 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.sockroot 301541 0.0 0.0 111380 2664 ? Ssl 10:06 0:00 \_ /go/bin/web-password-generatorAvancé
ps fauxw | grep containe[r] -C 1On 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.