Qiitaの他の投稿だと、最初からDocker上に環境を作ってアプリケーション開発始める記事が多そうでした。が、今回ローカルでDjangoで作ったアプリケーションを、後からDockerに載せて公開する、という流れをやったので、手順を残しておきます。
今回の環境
- Windows10Pro
- Django 2.2.5
- Python 3.7.2
- Docker 19.03.2
前提
- ローカルのDjangoで動くアプリケーションが手元にある
- Dockerの環境構築が済んでいる
手順
まずは動かしたいアプリケーションの入ったフォルダを一式用意します。
- hoge
- manage.py
- hoge
- settings.py
- urls.py
- wsgi.py
こんな感じの構成になっているかと思います。(実際には上記に書いていないものも存在するはずです)
requirements.txtの作成
作成したDjangoのアプリケーションを動かすために必要なパッケージを書いていきます。
そもそもrequirements.txtは何かわからない、という場合は以下を参照。
Python, pipでrequirements.txtを使ってパッケージ一括インストール | note.nkmk.me
例
django
Pillow
django-cleanup
wsgi-basic-auth
django-pure-pagination
これを、プロジェクトと同じ階層に置きます。
- hoge
- manage.py
- hoge
- settings.py
- urls.py
- wsgi.py
- requirements.txt
HOSTSの設定
これをやらずに以降の手順を進めると、実際にデプロイしてアクセスした際にエラー画面が出たりします。
- hoge
- hoge
- settings.py <- コレ
- hoge
settings.pyの中にALLOWER_HOSTS
という項目があるので、ここに公開するサイトのドメイン名を記入します。
参考:Django 1.5以降ではALLOWED_HOSTSの設定が必要 – ymyzk’s blog
Dockerfileの作成
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code
Docker で Django 開発環境を構築するを参考にしました。
Dockerイメージを作成する
docker build -t my-sample-app .
最後のdotを忘れるとエラーになります(何度もやった)
ビルドしたDockerイメージを実行
docker run --rm -v [アプリケーションのフォルダへのパス]:/code/ -p 8000:8000 [Dockerイメージ名] python ./hoge/manage.py runserver 0.0.0.0:8000
これで、アプリケーションがDockerコンテナ上で動作しているはずです。