目次

目次

HerokuでDocker Registryが使えるようになっていたので試してみた

松木佑徒
松木佑徒
最終更新日2017/09/08 投稿日2017/09/08

dockerのアプリをホスティングする環境を探していたら HerokuでdockerのPrivate Registryを作れるようになっていたので試してみました。 https://devcenter.heroku.com/articles/container-registry-and-runtime

今回は単純なPythonのWebアプリなので以下のようなDockerfileを作成。

FROM python:3.6

ADD . /app
WORKDIR /app/
RUN pip install -r requirements.txt

ENTRYPOINT ["python", "manage.py", "runserver", "--host", "0.0.0.0", "--port", $PORT]

brew upgrade でherokuコマンドラインツールを最新にしてからアプリをデプロイしてみます。 heroku container:push web でbuildからpushまでまとめてやってくれるので簡単でした。

$ brew upgrade heroku
$ heroku container:login
Login Succeeded
$ heroku create
Creating app... done, ⬢ hogehoge-fugafuga-123456
https://hogehoge-fugafuga-123456.herokuapp.com/ | https://git.heroku.com/hogehoge-fugafuga-123456.git
$ heroku container:push web
=== Building for web  (/Users/y-matsuki/PycharmProjects/hoge/Dockerfile)
Sending build context to Docker daemon  275.7MB
Step 1/6 : FROM python:3.6
 ---> 968120d8cbe8
...

push後、Webアプリを起動するときに以下のエラーが発生。

unsupported: Your Docker image must specify a `CMD` instruction.

ドキュメントを読むと ENTRYPOINT でなく CMD を使用してくれということなので Dockerfileを以下のように修正すると成功しました。

FROM python:3.6

ADD . /app
WORKDIR /app/
RUN pip install -r requirements.txt

#ENTRYPOINT ["python", "manage.py", "runserver", "--host", "0.0.0.0", "--port", $PORT]
CMD python manage.py runserver --host 0.0.0.0 --port $PORT

Herokuを無料で使っているとしばらくアクセスがないとスリープするのですが、 復帰した場合はイメージを立ち上げ直すのかコンテナ内のデータが消えていたので 用途によっては注意が必要かもです。

松木佑徒

目次