Posted at

Heroku Button (app.json) でDocker Containerを使う

最近はDockerを使ってアプリケーションの実行環境を作ることが多いです。Heroku Buttonでワンクリックデプロイをする時も、Dockerを使いたい・・・!ものです。

HerokuにおけるDockerを使ったデプロイは、heroku.ymlで定義できます。app.jsonからheroku.ymlを呼び出すことで、Heroku ButtonでもDockerを使ったデプロイが使えます。

最もシンプルなheroku.ymlは以下のようになります。

build:

docker:
web: Dockerfile
run:
web: bundle exec puma -C config/puma.rb



  1. build: アプリケーションのルートにあるDockerfileを使用してwebというイメージを作成。


  2. run: webイメージから作成したコンテナでコマンドを実行。

runがない場合、DockerfileCMDrunの代わりになります(普通はこちらの方が多いと思います)。

setupのセクションで環境変数やアドオン、releaseでデプロイ前に実行する処理などを指定できます。これらは、app.json側でも定義が可能です。app.jsonscriptspostdeployを指定しておけば、Dockerで実行環境を作ったうえでpostdeployが実行できます。将来的にはheroku.ymlに統合されていくかもしれません。

app.jsonでは、heroku.ymlを参照するようstackcontainerを指定します。

{

"stack": "container"
}

こうすることでHeroku Button => app.json => heroku.ymlといった形で参照が行われ、Heroku ButtonでもDockerを使ったデプロイが可能になります。