Update 2014-08-07
: DockerのHTTP Routing - Part10: xip.io と Hipache で動的リバースプロキシ
DockerのHTTP Routing - Part8: xip.io と Nginx と confd 0.6 で動的リバースプロキシではconfdを使い、動的リバースプロキシのサンプルをつくりました。
今回は同じことをOpenRestyで試してみます。DockerのHTTP Routing - Part3: OpenResty はじめにでは3scale/openrestyの使い方がわからなかったのですが、いろいろ勉強していくと少しずつ理解できるようになりました。
OpenResty(Nginx+Lua+Redis)という組み合わせはおもしろく、GinでJSON-APIサーバーが書けるように勉強したいと思います。
3scale/openresty
3scale/openrestyをベースイメージにしてDockerfileを作成します。
まずはプロジェクトを作成します。
$ mkdir ~/docker_apps/openresty |
Dockerfileです。
FROM 3scale/openresty |
Supervisorの設定ファイルです。
[program:openresty] |
Nginxの設定ファイルです。rewrite_by_lua
の箇所でRedisからルーティング情報を取得して、upstreamの値にセットしています。
こちらのGistを参考にしました。proxy_set_header
を設定しないと、リダイレクトしてしまうので追加します。
Luaで簡単にNginxの機能拡張ができます。個人的には発想の転換になりました。
worker_processes 1; |
イメージのビルドとコンテナの実行
イメージをビルドします。
$ docker build -t masato/openresty . |
OpenRestyコンテナを起動します。
$ docker run --name openresty -i -t -d -p 80:80 masato/openresty |
ルーティング情報の設定
--rm
と--link
オプションで、Dockerホストからワンショットのredis-cli用のコンテナを使ってルーティングをセットします。disposableでとてもDockerらしい使い方で気に入っています。
$ docker run -it --rm --link openresty:redis dockerfile/redis bash -c 'redis-cli -h $REDIS_PORT_6379_TCP_ADDR set p5001.10.1.2.164.xip.io 172.17.0.37:5000' |
確認
Dockerホストからcurlで確認します。
$ curl p5001.10.1.2.164.xip.io |
まとめ
confdよりも慣れているRedisを使うこともあり、OpenRestyの方が好みです。
HipacheもバックエンドにRedisを使うので同じ感じに使えそうです。
confdの場合は設定ファイルが書き換わるかちょっと不安になります。
この前のバージョンではテンプレートに表現力が足りないので、サブドメイン毎に設定ファイルを書くことになり、
あまり動的な感じがしません。
逆に静的ファイルを作成してしまった後は、ルーティング情報はデータベースを持たないので安心だったりもします。
最後にHipacheの動的リバースプロキシを試してみて、どれを採用しようか決めようと思います。