Help us understand the problem. What is going on with this article?

Dockerコンテナに使える「正しい」軽量init process(PID 1)まとめ

More than 1 year has passed since last update.

Dockerコンテナの「正しい」init processについては、Docker and the PID 1 zombie reaping problemが詳しいです。

Docker 1.13からは--initオプションでtini相当のinit processを仕込んでくれるようになりました(Thanks to @sumomonekoさん :bow:)。以下の内容は--initの機能が未だ利用できない場合(K8Sなどでコンテナを動かす、Docker 1.12以前、など)にのみ有効です。

1コンテナ単一アプリ対応・superviseなし

tini

tini

dumb-init

dumb-init

1コンテナ複数アプリ対応・superviseあり

runit

s6-overlay

s6-overlay

s6というプロセス・スーパバイザをDockerコンテナのinit processとして使うためのツール一式です。

  • S6 Made Easy, with the S6 Overlay | Tutum Blog
  • バイナリは3.4MB
  • 260 stars
  • 170 commits
  • 45 releases
  • superviseの機能あり。
  • superviseプロセスをフォアグラウンドで起動できる
  • 複数アプリケーションを起動して、特定アプリをメインとしたい場合(例えば、cron、syslog、nginxを起動して、nginx以外は落ちたら再起動、nginxが落ちたらコンテナをエラー終了)はこれが唯一の選択肢?

Dockerコンテナ内で複数アプリケーションを実行したいときに使われる他のソリューション

  • Using Honcho to Create a Multi-Process Docker Container | via @codeship
    • HonchoというProcfileベースのアプリケーション用のスーパーバイザ
    • s6-overlay同様、代表的なプロセスが落ちたら、コンテナ自体を落とすことができる
    • ただし、Honchoはinit processではない…ので、「正しく」使いたいなら、他のinit processと組み合わせる必要があり。そうすると、Honchoの必要性は…?
    • プロセス毎にログがわかりやすくラベリングされるのはうれしいけど、Docker Loggingとの相性?

おまけ: Dockerコンテナのブートストラップに使えるテンプレートシステム

環境変数に応じて、設定ファイルや実行時引数を変えてプロセスを実行したい場合、

  • シェルスクリプト等でラップする
  • テンプレートシステムを使う
  • 上記を組み合わせる

という選択肢があります。

対象となる設定ファイルが複数であったり、変数が多かったり、プロセス数が多かったりする場合は、テンプレートシステムを利用するとよいことがあります。

  • voltgrid
  • entrykit (Entrykitはゾンビプロセスをkillしてくれないので、正しいinit processではない認識です。違ってたら誰かこっそりおしえてください)
  • johanhaleby/bash-templater & Simple templating engine in Bash
  • confd (イメージサイズが20MBくらい増えて、Alpine等でがんばってるイメージが台無しになってしまいそうですが、コンテナ内の設定ファイル・テンプレートファイルの配置が規約化されていたりするなど、複雑なテンプレーティングが必要なイメージには向いている印象)
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away