久しぶりに Heroku を使ってみたら、いつの間にかコンテナも使えるようになっていた。
というくらいに全然 Heroku を使っていなかった。
正確に言うと、 Heroku で動かしているアプリはあるけど、ずっと動かしたままだったので、ダッシュボードを見ることがなかった、という感じ。
検索していると2年半くらい前の記事が多くて、時代に追いついてないのを感じる。
今回頑張ったこと
Dockerfile を書く時、これまでユーザーを意識していなかったので、今回は、 root 以外のユーザーで実行するようにした。
USER
を指定すると、その後の COPY
とかもユーザーで実行するのかと思ったら、そうでもなかったようだ。
調べてみると、最近追加された機能で、ファイルのオーナーを変更できるようになったらしい。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
FROM perl:5.20.3-threaded
RUN useradd -m -s /bin/bash appuser \
&& cpanm Carton
USER appuser
RUN mkdir -p /home/appuser/webapp
WORKDIR /home/appuser/webapp
COPY --chown=appuser:appuser webapp/cpanfile /home/appuser/webapp
RUN carton install
COPY --chown=appuser:appuser webapp /home/appuser/webapp
CMD carton exec -- /home/appuser/webapp/myapp.pl daemon -l http://0.0.0.0:$PORT
|
最後の CMD
はとりあえず Mojolicious で動かしたいので適当に書きました。
ローカルでの開発はあまり意識していないのですが、やるとしたらこんな感じで起動するのかなと。
1
2
|
docker build -t nqounet/serene-lake-43934 .
docker run --rm -p 3000:3000 nqounet/serene-lake-43934 carton exec -- morbo myapp.pl
|
…面倒くさそうですね。
デプロイ方法
コンテナを使う時は、 Container Registry にログインする必要があるようです。
1
2
3
4
5
6
7
8
|
# 必要なら作成
heroku create
# Container Registry にログイン
heroku container:login
# デプロイ
heroku container:push web
|
感想
buildpack を使う方法よりは真っ当な方法な気がします。
というか、コンテナがそのまま公開できるって凄い。
参考