web-dev-qa-db-fra.com

Quelle est l'importance de dumb-init pour Docker?

J'espère que cette question ne sera pas marquée comme primarily opinion-based, mais qu'il y a une réponse objective à cela.

J'ai lu Présentation de dumb-init, un système d'initialisation pour les conteneurs Docker , qui décrit en détail pourquoi et comment utiliser dumb-init. Pour être honnête, pour quelqu'un qui n'est pas trop expérimenté avec le fonctionnement de la structure du processus Linux, cela semble assez dramatique - et on a l'impression que vous faites des choses complètement mauvaises si vous n'utilisez pas dumb-init.

C'est pourquoi je pense à l'utiliser dans mes propres images Docker… ce qui m'empêche de le faire, c'est que je n'ai pas encore trouvé d'image Docker officielle qui l'utilise.

  • Prenons mongo comme exemple: ils appellent directement mongod.
  • Prenons postgres comme exemple: ils appellent directement postgres.
  • Prenons node comme exemple: ils appellent directement node.

Si dumb-init est si important - pourquoi apparemment personne ne l'utilise? Qu'est-ce que j'oublie ici?

30
Golo Roden

Quelque chose comme dumb-init ou tini peut être utilisé si vous avez un processus qui engendre de nouveaux processus et que vous n'avez pas de bons gestionnaires de signaux implémentés pour capturer les signaux enfants et arrêter votre enfant si votre processus doit être arrêté, etc.

Si votre processus ne génère pas de nouveaux processus (par exemple, Node.js), cela peut ne pas être nécessaire.

Je suppose que MongoDB, PostgreSQL, ... qui peuvent exécuter des processus enfants ont de bons gestionnaires de signaux mis en œuvre. Sinon, il y aurait eu des processus zombies et quelqu'un avait déposé un problème pour résoudre ce problème.

Le seul problème peut être les images en langue officielle, comme node, Ruby, golang. Ils ne contiennent pas dumb-init/tini car vous n'en avez normalement pas besoin. Mais c'est au développeur qui peut implémenter un mauvais code d'exécution enfant de corriger les gestionnaires de signaux ou d'utiliser l'assistant comme PID 1.

18
Stefan Scherer