Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Django Heroku Docker Container registory and runtime を使ってみる。再トライ!

概要

Django Heroku Docker Container registory and runtime を使ってみる。再トライ!

参考サイト

devcenter.heroku.com

やってみた

Dockerfileをalpinehelloworldを元に、修正してみる。

Dockerfile

#Grab the latest alpine image
FROM alpine:latest

# Install python and pip
RUN apk add --update python py-pip bash postgresql-client postgresql-dev gcc musl-dev python3-dev python-dev
ADD requirements.txt /tmp/requirements.txt

# Install dependencies
RUN pip install -r /tmp/requirements.txt

# Add our code
ADD . /opt/webapp/
WORKDIR /opt/webapp

# Expose is NOT supported by Heroku
# EXPOSE 5000

# Run the image as a non-root user
RUN adduser -D myuser
USER myuser

# Run the app.  CMD is required to run on Heroku
# $PORT is set by Heroku
CMD gunicorn --bind 0.0.0.0:$PORT gettingstarted.wsgi
  • postgresql-dev gcc musl-dev python3-dev python-dev これはpsycopg2 を入れるために必要だった。alpineは軽量な分、pip installで必要なファイルが入ってないことが多いので、難しいなぁ。。。

とりあえず、これでbuildしてみる。ちなみに、python-getting-started というherokuのdjangoチュートリアルのファイルをそのまま使っている。

$ docker build -t herokutest  ./

無事buildできた!!よかった〜。

次にこれでlocalで動くか確認してみる。これは、docker run -p 5000:5000 -e PORT=5000 <image-name>で確認できる。herokuの公式サイトを参照。

$ docker run -p 5000:5000 -e PORT=5000 herokutest

localhost:5000にアクセスすると表示された!よかった〜。

次は、これをubuntuに修正してみる。なぜなら、anaconda3は、debianベースのものを使う予定のため。

alpine->ubuntuにかえてみる。

Dockerfile

#Grab the latest alpine image
FROM ubuntu:latest

# Install python and pip
RUN apt-get update && apt-get install -y --no-install-recommends postgresql-client python-pip build-essential libpq-dev python-dev
ADD requirements.txt /usr/src/app/requirements.txt

# Install dependencies
RUN pip install setuptools
RUN pip install -r /usr/src/app/requirements.txt

# Add our code
ADD . /usr/src/app/
WORKDIR /usr/src/app

# Expose is NOT supported by Heroku
# EXPOSE 5000

# Run the image as a non-root user
RUN useradd -m myuser
USER myuser

# Run the app.  CMD is required to run on Heroku
# $PORT is set by Heroku
CMD gunicorn --bind 0.0.0.0:$PORT gettingstarted.wsgi

Errorでまくったので、最終的に上記のようなパッケージをinstallした。buildしてみる。

docker build -t ubuntutest  ./

buildは無事完了!

$ docker run -p 5000:5000 -e PORT=5000 ubuntutest

とりあえず、localでは無事起動!これをherokuにpushしてみる!

herokuにpushしてみる。

$ heroku container:login
$ heroku create ubuntudjangotest
$ heroku container:push web --app ubuntudjangotest
$ heroku open --app ubuntudjangotest

よっしゃ動いた!!

あとは、このDockerfileのFROM ubuntuを、anaconda3に変えるだけかな!性格には、anaconda3(FROM ubutu)か。