最近自分のSNSのフィードを読んでいる方には色々と新しめのツールを使ったりして今までやれなかったことをやろうと色々とつまづきながら学習しているのがわかると思うのですが、その一環としてConsulやらなにやらをがっつり使おうと思ってさー、やるぞ!と思ったら二つほど問題があってはまった:
  1. Consulもぼちぼち設定が面倒くさいからDockerで投入したいのに、DockerにARPまわりにバグがあるらしく、UDP経由のraft通信が時々おかしなことになる(多分コレ
  2. 何百台もマシンを使いたいわけじゃないから、Consulの認証・セキュリティ周りを設定するのがだるい
ConsulはDNSのインターフェースが非常にすてきで使いたかったんだが、うーーーーむ。registratorも見てみたんだけど、なんかAddress欄がうまくコンテナが動作してるサーバーのIPアドレスになってないような感じもして微妙〜〜〜〜な感じを受けた。削除もうまくいかなかったし… そしてドキュメントが… う〜む。

というわけで一歩戻って「俺は何をしたいのか?」と考えたところ、したいことは「コンテナをデプロイした時に何かトリガーを走らせたい」というだけだということがわかった。これなら小さそうだし、ちょうどregistratorのコードを読んでdocker remote APIも把握したところだったので、じゃあ、ということで二つほどツールを書いた。

tp (lightwegith template processor)

tp=template processorのイメージ。もうアホみたいに簡単なツール。ただただシェルスクリプトとかでJSONをSTDINに受け取って、テンプレート(goのtext/template形式)に渡して処理してSTDOUTに吐く。それだけ。だけで手元にあると超便利じゃね?

こんな感じで、curlでJSONのAPI叩いて、直接流し込む感じで使うイメージ

001


dockeractd (docker event receiver)

dockerの走ってるサーバー上でコンテナの開始とかのイベントを受け取った時に任意のコマンドを動かすためだけのツール。 コンテナが作成された、稼働した、止まった、等々のイベントが受け取れるので、それをJSON形式でSTDIN経由で任意のコマンドに流す。それをどうするかはあなたの自由。分散システム的な要素はないけど、serf agentの動きに似てます。

自分の意図としてはとりあえずdockerでアプリのコンテナを起動した時に前段にあるnginxのupstream設定を書き換えてHUPしたい。それだけ!

001


あ、コマンドラインの引数とか途中までしか書いてないし超絶いけてないので、PRとかissuesとかまってます。