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 を使いましょう