Docker SwarmとDocker Composeについての軽い所感

Docker社が前々から作ってたよって言ってたアレコレが先日公開されました。

Dockerが、分散環境構築ツール群「Docker Machine」「Docker Swarm」「Docker Compose」を公開 - Publickey

コンテナクラスタの構築やらスケジューリングやらサービスディスカバリやらルーティングやらが公式謹製ツールでいい感じになるのかなぁと思って触ってみた感想です。*1

Docker Swarm

複数のDocker Engineをひとつに見せる、と言ってもよく分かりませんが、要するに複数ホストで稼働しているdockerデーモンをひとまとめにしたAPIエンドポイントを作るやつのようです。
Docker Swarmが提供するAPIエンドポイント経由でDockerクライアントを使うと、Inter-Hostで動いてるコンテナが見れたりします。*2
じゃあこれ使ってrunするとどのホストで起動するの?と言うと、現在2種類の戦略があるらしく、ひとつは"リソースが空いてそうなホストを選ぶ"、もうひとつは"ランダム"。
Docker Swarmを使うことによって、クライアントからは複数のコンテナホストがまるでひとつのホストであるかのように扱えるようになるということっぽいです。*3
ただ、サービスディスカバリとしてはイマイチで、コンテナクラスタに参加しているDockerホストの一覧は取得できるんですが、その上で動いているコンテナの情報(どのコンテナがどのホストどのポートで動いているか)は取れないっぽくて惜しいなあと言う感じがしました。
コンテナクラスタを大資源ぽく抽象化してデプロイ出来るのは良いです。

Docker Compose

figと呼ばれていた奴と同じです。公式に飲み込まれて名前が変わりました。
runする時の設定をyamlに書いておいてdocker-composeコマンドに指定すると、そのyamlの定義に従ってコンテナを立ち上げたりします。
figの時はシングルホスト用であんまり使い道ないなあって思ってたんですがSwarmと合わせて利用することでcompose側から見た時にswarmによってマルチホスト的なところが隠蔽されるので、マルチホストで使えるcomposeみたいになって非常によいです。scaleもちゃんと動きました。
composeでグワッと撒いてscaleでズバッと簡単スケールアウトみたいなのむっちゃ近未来っぽいんですがdockerエコシステムの中にサービスディスカバリとルーティングの機構がないのでグワッとしてズバッとしてもサービスが動いてる場所を特定できないのつらみがあります。惜しい。

まとめ

インストールも楽だし公式でこういうツール出てくるの手っ取り早くて嬉しいんですが個人的にはまだ機能不足という感じ。
だったらregistrator動かしてるdockerホストにmesos-marathonで撒いてetcd経由でconfdでnginxの設定書き換えた方がマシなんじゃと言う気持ちになりました。

終わり。

*1:使い方やセットアップとかはQiitaやらにいっぱい記事あるので書きません。

*2:Swarm APIはDocker APIと互換性があるので既存のクライアントからもちゃんと呼べる

*3:簡易mesos-marathonみたいな感じ?