Gitのコミット単位で動的にDockerイメージをデプロイするプロキシサーバpool

Gitのコミット単位で動的にDockerイメージをデプロイするプロキシサーバpoolというソフトウェアがあります。

poolとは

poolは、WebアプリとDockerfileをGitで管理している場合に、コミットidをサブドメインとして( http://<commit-id>.pool.dev/ )poolにアクセスするだけで、そのGitレポジトリのコミット時の状態でWebアプリのDockerイメージをデプロイし、Webアプリのポートへとリバースプロキシして、Webアプリのレスポンスを返します。もちろん、コミットidをキーに複数の状態にどんどんアクセスできます。(mod_mrubyのユースケースを調査していてたまたま見つけました)。

このpoolというソフトウェアはシンプルですが、ある種Dockerの差分管理やコンテナ型の利点をうまく利用していて、この構造を利用すると効率の良いDockerのデプロイ環境が構築できるように思いました。また、DockerとVagrantの利点もうまく組み合わせていて、このpool自体のデプロイも非常に簡単になっています。この辺りの設計の良さに関しては最後にまとめます。

例えば、poolで対象にするレポジトリをmod_mrubyにしていた場合、mod_mrubyのレポジトリにはDockerfileも置いてあって、ビルド後のDockerイメージは/mruby-helloにアクセスするとレスポンスが返るようにしています。

つまり、poolのREADMEの通り、例えば http://1d4980db6f9f90a3e4954b126044db623f498917.poo.dev/mruby-hello にアクセスすると、そのGitコミットID単位でDockerfileからDockerビルドして、動的にDockerのポートをプロキシサーバであるApacheが検出してそのポートにリバースプロキシしてくれます。

このpoolで動作しているリバースプロキシはApache+mod_mrubyで実装されていて、こういう動的なポート割り当てやDockerデプロイみたいな事をしたい場合は、mod_mrubyngx_mrubyは使いやすいと思います。ngx_mrubyもほとんど同様の事を実装できそうですね。

VagrantとDockerとGitの組み合わせを活かした設計

この設計の良い所は、

  • GitとDockerの差分管理を利用
  • 一旦Dockerデプロイされるとイメージの差分をキャッシュするので別コミットIDでのデプロイが高速
  • デプロイしたDockerイメージのサービスポートとドメインを動的に紐付ける(設定変更が不要)
  • Vagrantでpool自体を様々な環境に簡単にデプロイし、デプロイされた仮想マシン内でDockerのサービスを動的かつ高速にデプロイする(仮想マシンとコンテナの良さをうまく利用)

だと思います。

この設計をうまく使うと、VagrantとDockerの良さをうまく両立したWebシステムが作れそうですね。

1冊の技術書と青春18切符を持って一人旅してきた(中編)

前回記事「1冊の技術書と青春18切符を持って一人旅してきた」からの続き(中編)です。

画像の読込に時間がかかるので、

に分けました。

前半を読んでいない方はまずは上記リンクから前編のエントリを御覧ください。

http://instagram.com/p/rgeq84I7T1/

今日はその旅の中であったことを時系列に徒然と書いていこうと思います。旅の流れとしては、以下のようになりました。

  • 1日目 大阪から金沢
  • 2日目 金沢から新潟
  • 3日目 新潟から弘前
  • 4日目 弘前から函館
  • 5日目 函館から札幌
  • 6日目 札幌から大阪

上記の旅路を章ごとにまとめ、これらに加えて、

  • 持って行って良かったもの
  • 思っていたより良かった事
  • 思っていたより辛かった事
  • 買ってよかったお土産
  • 旅を追えての感想

を最後に書いていますので、そちらも御覧ください。

では続きの3日目からです。

続きを読む

1冊の技術書と青春18切符を持って一人旅してきた(後編)

前編「1冊の技術書と青春18切符を持って一人旅してきた」、中編「1冊の技術書と青春18切符を持って一人旅してきた(中編)」からの続きです。

画像の読込に時間がかかるので、

に分けました。

前半、または、中編を読んでいない方はまずは上記リンクから前半や中編のエントリを御覧ください。

http://instagram.com/p/rhFyAMo7R5/

今日はその旅の中であったことを時系列に徒然と書いていこうと思います。旅の流れとしては、以下のようになりました。

  • 1日目 大阪から金沢
  • 2日目 金沢から新潟
  • 3日目 新潟から弘前
  • 4日目 弘前から函館
  • 5日目 函館から札幌
  • 6日目 札幌から大阪

上記の旅路を章ごとにまとめ、これらに加えて、

  • 持って行って良かったもの
  • 思っていたより良かった事
  • 思っていたより辛かった事
  • 買ってよかったお土産
  • 旅を追えての感想

を最後に書いていますので、そちらも御覧ください。

では続きの5日目からです。

続きを読む

1冊の技術書と青春18切符を持って一人旅してきた

(画像が多いので、一旦データを全て読み込んでからブログエントリを読み始めた方が良いかもしれません…)

http://instagram.com/p/rgfgD4I7VE/

ちょっと明日から1人でLinuxの旅に行ってくる」エントリに書いた通り、先週Linuxプログラミングインタフェースというとっても重たい技術書と青春18切符と最低限の着替えを持って、北海道目指して鈍行や快速を乗り継ぎ、技術書を電車の中でひたすら読む1人旅をしてきました。

今日はその旅の中であったことを時系列に徒然と書いていこうと思います。旅の流れとしては、以下のようになりました。

  • 1日目 大阪から金沢
  • 2日目 金沢から新潟
  • 3日目 新潟から弘前
  • 4日目 弘前から函館
  • 5日目 函館から札幌
  • 6日目 札幌から大阪

上記の旅路を章ごとにまとめ、これらに加えて、

  • 持って行って良かったもの
  • 思っていたより良かった事
  • 思っていたより辛かった事
  • 買ってよかったお土産
  • 旅を追えての感想

を最後に書いていますので、そちらも御覧ください。

画像の読込に時間がかかるので、

に分けました。

続きを読む