2016-05-22 10 views
19

この質問にprimarily opinion-basedというマークは付けられませんが、客観的な答えがあることを願っています。Dockerにとってdumb-initはどれほど重要ですか?

私はIntroducing dumb-init, an init system for Docker containersを読んでおり、dumb-initの理由と使い方を広く説明しています。正直言って、Linuxのプロセス構造がどのように動作するか経験のない人にとっては、これはかなり劇的に聞こえます。dumb-initを使用しないと、まったく間違っているように感じられます。

これは私自身のDockerイメージ内で使用することを考えている理由です。私がこれをやめないようにするには、それを使用する公式のDockerイメージがまだ見つかりませんでした。

  • mongoを例にとります。mongodを直接呼び出します。
  • 例としてpostgresとしてください:postgresを直接呼び出します。
  • nodeを例に取ると、nodeが直接呼び出されます。なぜ明らかに誰もそれを使用していない - dumb-initそう重要である

場合

  • ...?私はここで何が欠けていますか?などの新しいプロセスを生成のプロセスを持っており、あなたのプロセスが停止する必要がある場合は、子の信号をキャッチし、あなたの子供を停止するために実装良いシグナルハンドラを持っていない場合dumb-inittiniなどの

  • +4

    (免責:私はTiniのメンテナであり、dumb-initは軽量のinitシステムコンテナ用)。公式のDockerの画像の中には、Redmine、Kibana、Mongo-express、Sentry、Jenkinsなどのinitシステムがあります。ご存じのように、これは言語ランタイムではなく本格的なアプリケーションに役立つことが多いです。 –

    +0

    @ThomasOrozco:tiniとdumb-initの違いは何ですか?ちょうど2つについて学び、tiniの歴史について疑問に思ったことは、かゆみがダム・イニシアルで傷ついていたことです。説明から、彼らは同じことをしているようだ(まだソースコードを比較していない)。 – hakre

    +3

    @hakre私は愚かなinitの人々は、彼らがそれを書いたときにTiniを認識していないと信じているので、彼らは彼らがdumb-initで修正したいと思っているTiniに根本的に間違っているものを見つけたのではありません。この2つの機能にはいくつかの違いがあります。たとえば、シグナルの書き換えをサポートしていますが、Tiniはサポートしていませんが、Tiniはサブレポートをサポートしていません。しかし、全体的には、ゾンビ刈り取りを探しているなら、それはどちらかというとどちらかです。 –

    答えて

    13

    何かが

    使用することができます

    プロセスが新しいプロセス(Node.jsなど)を生成しない場合、これは必要ではないかもしれません。

    私は、MongoDB、PostgreSQL、...子プロセスを実行する可能性が高いシグナルハンドラが実装されていると思います。そうでなければゾンビのプロセスがあり、誰かがこれを解決するために問題を提起していたでしょう。

    node、ruby、golangなどの公式言語イメージのみ問題が発生する可能性があります。あなたは通常それらを必要としないので、彼らはそれにダムinit/tiniを持っていません。しかし、悪い子の実行コードを実装してシグナルハンドラを修正するか、ヘルパーをPID 1として使用するのは開発者次第です。

    +0

    さて、ありがとう:-) –

    +1

    これは完全には当てはまりません。たとえば、Bashスクリプトは信号を適切に処理して出力しません。また、Mongo/Postgresは、ゾンビを処理し、子プロセスの処理を処理するために、OSのinitシステム上でRELYを実行します。これはちょうどそれが動作する方法です。 また、dockerはすぐに独自のinitハンドラ(現在はmasterにマージされています)を持っていますが、これをサポートするバージョンがなくても、プロセスを取得できるPID1プロセスが常に必要です。 参照:https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/ –

    +1

    正式な画像の多くは、[ゴス](https: //github.com/tianon/gosu)、例えば。 [mongo's entrypoint.sh](https://github.com/docker-library/mongo/blob/5f4bcf4bec163ef05b4fc67d5c92762989dbde06/3.4/docker-entrypoint.sh)をPID1プロセスとして使用します。 –

    関連する問題