先週 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 にも記録されます。
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 にも対応したので、移行を検討していきます。