docker-paas-example

boot2docker な Docker に対して、git push 契機でコンテナを作り、Heroku の buildpacks でコンテナ内にWebアプリケーション環境をオンデマンドでビルドして、実際にそこでアプリケーションを立ち上げる・・・ということをやる実装例。

要するに git push するとコンテナでアプリケーションが起動するという、Heroku 的なもの。

Docker Meetup Tokyo #2 に向けて試作した。

結果的には Dokku がやっていることそれと同じになってしまったが、まああくまで結果的なのでそれはよしとする。

仕組み

  • Dockerfile でイメージをビルドすると、コンテナの元になるイメージが作られる
    • このイメージには、git サーバーへの鍵、buildpacks など最小限のものが入ってる
  • create_repos.rb で OSX 内に git のリモートレポジトリを作る。heroku create に相当
    • create_repos.rb は作ったレポジトリの post-update hooks に docker run で buildpack するスクリプトを配備する
  • できたレポジトリを remote ブランチに設定して、git push すると post-update hooks が動く
  • buildpack で生成された yaml ファイルを読み取って、対象のアプリケーションを指定の起動方法で exec する

なお、OSX とコンテナの通信は VirtualBox のホストオンリーアダプタで行う。VirtualBox 側でインタフェースを追加して、boot2docker の /var/lib/boot2docker/bootlocal.sh に設定しておく

ip addr add 192.168.56.100/24 dev eth1
ip link set eth1 up

スクリーンショット

Sinatra なアプリケーションを push するとコンテナが立ち上がりビルドされて URL が振られてアクセス可能になる。

docker attach すると、buildpack でコンテナがビルドされる様子がわかる。ruby が入り、bundle exec でモジュールが入る。

参考にしたもの

注意

  • 他人が動かすことはほとんど考慮してない。この手のを試しに動かしたい、という場合は Dokku を使いましょう