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