no way to compare when less than two revisions
Différences
Ci-dessous, les différences entre deux révisions de la page.
Révision précédente Prochaine révision | |||
— | technique:docker:good_practices:init [2020/10/13 14:51] – qduchemi | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{indexmenu_n> | ||
+ | # Utiliser un système d' | ||
+ | ## Problématique | ||
+ | |||
+ | Parfois, le `Dockerfile` spécifie une commande (`CMD`) qui s' | ||
+ | |||
+ | Autre problème, même si la commande s' | ||
+ | |||
+ | < | ||
+ | |||
+ | Ce processus est le parent de tous les autres, et doit transmettre les signaux qu'il reçoit à ses enfants (par exemple, un signal de terminaison). | ||
+ | |||
+ | < | ||
+ | Un peu d' | ||
+ | * `SIGTERM`, pour demander à un processus de se terminer | ||
+ | * `SIGINT`, envoyé avec un `Ctrl+C`, par exemple | ||
+ | * `SIGKILL`, pour tuer un processus | ||
+ | * `SIGHUP`, souvent utilisé pour recharger la configuration d'un service | ||
+ | Ces signaux peuvent être envoyés avec la commande `kill`. | ||
+ | </ | ||
+ | |||
+ | Les processus peuvent enregistrer des *handlers*, qui sont exécutés lorsqu' | ||
+ | |||
+ | Sauf... pour le processus de PID 1. Dans ce cas, il n'y a pas de comportement par défaut. | ||
+ | |||
+ | < | ||
+ | |||
+ | Or, la plupart des applications lancées avec le PID 1 (par exemple Python) n'ont pas de *handlers*. | ||
+ | |||
+ | ## Solution | ||
+ | |||
+ | Compose, depuis la version 3.7, adresse ce problème avec une directive très simple : | ||
+ | ```yaml | ||
+ | services: | ||
+ | exemple: | ||
+ | init: true | ||
+ | ``` | ||
+ | |||
+ | Cette directive a pour effet d' | ||
+ | |||
+ | Tini va : | ||
+ | |||
+ | * S' | ||
+ | * S' | ||
+ | * Transmettre les signaux aux enfants : comme ils n'ont pas le PID 1, alors le fonctionnement par défaut (à savoir tuer le processus s'il n'a pas installé de *handler*) fonctionne. | ||
+ | * Attendre la terminaison de son enfant pour terminer, même si celui-ci s' | ||
+ | * Terminer avec le code de retour de son enfant, ce qui permet de savoir s'il y a eu une erreur ou non. | ||
+ | |||
+ | < |