Update 2014-08-05
: DockerのHTTP Routing - Part8: xip.io と Nginx と confd 0.6 で動的リバースプロキシ
Part1でリストしたconfdの使用例がCoreOSをfleetctlから操作する - Part2: hello.serviceで参考にしているExperimenting with CoreOS, confd, etcd, fleet, and CloudFormationの後半に出てきました。今回はconfdの使い方を見ていきます。いろいろ考えていくとconfdの仕組みが一番わかりやすそうです。
nginx.serviceのUnit
marceldegraaf/nginxをCoreOSのUnitに登録するserviceファイルです。
[Unit] |
fleetctlを使いnginx.serviceをUnitに登録します。
$ fleetctl submit nginx.service |
confd
confdはetcdやConsulのキーを監視します。起動時にTOML形式の設定ファイルを-config-file
で指定します。
キーの変更をトリガーにして、TOMLファイルに指定した処理を実行します。
src
に指定したテンプレートから、dest
に指定したconfファイルを生成する。dest
にconfファイルを生成後に、reload_cmd
に指定したコマンドを実行する。
今回の例では、Nginxの設定ファイルが再作成され、Nginxがreloadされます。
[template] |
marceldegraaf/nginx
marceldegraaf/nginxのDockerfileです。
... |
コンテナが起動すると、/opt/boot.sh
を実行して以下の処理を行います。
- confdの監視登録
- confdをバックエンドで起動
- Nginxの起動
... |
まとめ
DockerクラスタをCoreOSで構築する場合にはconfdを使うと動的なリバースプロキシが便利に作れます。
一方でシングルノードのDockerホストの場合は、Docker Remote API
のGET /eventsからpollingかstreamingで通知を受ける方法もあります。
Part1では、後者の方がミニマルで簡単のように思いましたが、どこかで通知を受け、その後のコマンドを実行するプロセスを管理する必要があります。
confdはこの目的に作られているので、TOML形式の設定ファイルで何をしているのか非常にわかりやすくまとまります。