focuslightをdockerを利用して多数起動する
focuslightという
GrowthForecastとのAPI互換を持つ
Ruby実装のツールがリリースされていたことを最近知り、興味が合ったのでdocker image化してみた。
docker indexに登録済みなので、
dockerで使いたいという方は以下の手順で試せる。
> docker pull futoase/docker-focuslight
> docker run -p 3000:80 -d futoase/docker-focuslight
で、最近chefの代わりに使いたいなと思って気になってるansibleの練習がてら
focuslightを1つのインスタンス内で多数起動させる、
というansible playbookを書いてみた。
ansible playbook ソース
動作を確認するための下準備
MacOS X であるなら、以下の手順を踏めば終わり。
- Vagrantのdmgパッケージをインストールする
-
brew install ansible
を実行しansibleをインストールしておく
動作テスト
以下の手順でリポジトリからソースを取ってきて
コマンドを実行すれば終わるようにしてある。
> vagrant up --provision
ansible playbook内で、
以下のホスト名とVagrantで立ちあげたゲストマシンの
IPアドレスを結びつけるために/etc/hostsに書き出す。
sudo echo "192.168.33.200 focuslight focuslight2 focuslight3 focuslight4 focuslight5" >> /etc/hosts
出来上がりイメージ
こんな形でfocuslight, Vagrant boxの環境ができあがる。
focuslight個別のdocker container内で
nginxでリバースプロキシを利用するようにしている。
アクセスしてみる
早速それぞれのfocuslightインスタンスに対してアクセスしてみる。
> open http://focuslight/
> open http://focuslight2/
別々のdocker containerに保存されているか確認する
curlコマンドでhttp://focuslight/のAPIを叩いてみる。
> curl -F number=10 http://focuslight/api/socialgame/member/register
うまくいった。
> curl -F number=200 http://focuslight2/api/mainichi/ga/nichiyoubi
別々のdocker imageを利用して立ちあげたdocker containerに対して
APIを叩いても大丈夫なようだ。
一応Vagrantホスト側のディレクトリをdocker focuslight containerで
立ちあげているdockerマシンの/root/focuslight/dataディレクトリとして
使える形でansible playbookで作成している。
ので、docker containerを再起動してもデータが消えることはない。
dockerで複数のアプリケーションを立てる意味
immutable infrastructureとか言われてて、
dockerが注目されてる。
アプリケーションのデプロイに関する事前動作確認でも、
staging環境をサーバ単位では用意せず
productionとあいのりした形で準備できるかもしれない。
または今回のfocuslightのような
データのグラフ可視化ソフトウェアについて
サービス別(ゲームだとしたらタイトル別)に
docker containerを立てることで
タイトル別のグラフはdocker container別に管理することが
できるようにする、とか。MySQL DBの切り分けとか
考えなくて良いと思うし。
ansibleを利用する意味
chefで最初サーバの冪等性を保証する形で
レシピを書いていたけど、適応するレシピの量が多いとゴテゴテしてきてしまう。
notifiesを利用して実行順序保証がだるい。
ansibleが最適解かはわからないものの、
今のところは良いんじゃないかなと思った。