Heroku Logo

先週 Building Docker Images with heroku.yml が GA になってました。

Building Docker Images with heroku.yml Is Generally Available

heroku.yml は使ったことがなく、最近 Redash を Docker on Heroku で
立て、モチベーションが上がっているので、早速試してみました。

今までの方法と比較しながら、気づいたことを中心にまとめていきます。

Container Registry & Runtime (Docker Deploys)

今まで Heroku で Docker を使うときは、このようにデプロイしていました。

$ heroku container:push web    # (1)
$ heroku container:release web # (2)

(1) でローカルで docker build して、Heroku の Docker registry に
push します。

(2) で push した Docker Image をデプロイします。

heroku への git push は不要でした。ローカルで docker build するの
で、ビルド環境による差異はゼロではないと思います。

https://github.com/masutaka/redash-on-heroku/tree/trial を使うと、
この方法で Redash を立てられます。

Building Docker Images with heroku.yml

今回 GA になったのがこちらです。

heroku.yml が必須となっており、git push すると、Heroku 側で docker
build と、Heroku の Docker registry への push をしてくれます。

$ git push heroku master

Activity にも記録されます。

git push with heroku.yml

https://github.com/masutaka/redash-on-heroku/tree/trial-heroku-yml
を使うと、この方法で Redash を立てられます。

次に heroku.yml の各 section を見ていきます。

setup section

setup section はまだベータで、beta 版の Heroku CLI と manifest
plugin が必要です。

$ heroku update beta
$ heroku plugins:install @heroku-cli/plugin-manifest

あとで stable 版に戻すことも出来ます。

$ heroku update stable
$ heroku plugins:remove manifest

setup section は create 時に一度だけ参照されました。
–manifest オプションも必要でした。

$ heroku create your-app-name --manifest

setup section は省略可能で、今までのように heroku addons:create や
heroku config:set でも代用できます。app.json と似ています。

build section

build section はおそらく必須です。

今回は 2 つの Dyno に別々の Dockerfile を指定しました。

build:
  docker:
    web: Dockerfile.web
    worker: Dockerfile.worker

この書き方が最小なのかな。

build:
  docker:
    web: Dockerfile

release section

今までの Procfile の process type <release> に相当します。
今回は使いませんでした。

run section

今までの Procfile の process type <release> 以外に相当します。

run section がなければ Dockerfile の CMD が使われます。今回は CMD
を使ったので、run section は使いませんでした。

app.json と Procfile

app.json はまだ Review apps 用に必要なようですが、今後は
heroku.yml に移行していくのでしょう。

Procfile は run section に取って代わられたようです。

※ いずれも Docker on Heroku の話です。

heroku.yml への移行

今までの heroku container コマンドから heroku.yml の移行は簡単です。
手元で試したところ、heroku.yml を git commit して、git push heroku
master するだけでした。

まとめ

heroku.yml を使った Docker Deploy を試しました。Heroku 上で Docker
build されるのが良いと言うか、普通になりました。

Review Apps にも対応したので、移行を検討していきます。