背景
個人開発で、
・サーバー側はDjangoRestFrameworkを使ってAPIサーバーを構築
・クライアント側はReactを使ってAPIサーバーと通信
みたいな事をやろうとしています。
バックエンドの環境構築はコンテナを用いるのが最近のトレンドかと思いますので、djangorestframeworkの開発環境をDockerで用意していきたいと思います。
今回はささっと環境構築するのを目的としていますので、DBはsqlite、Webサーバーも特に立てずにDjangoが起動できるだけの状態を目指します。
docker-compose.ymlも用意しますが起動するサービスも一つだけです。
爆速で環境構築して、お好みでカスタマイズしてください。
実装
実装というほどのものでもないですが以下の流れで進めます。
- Dockerfileを作成
- docker-compose.ymlを作成
- requirements.txtを作成
- docker-compose build
めちゃ簡単ですね。やっていきましょう。
Dockerfile
# BASE
FROM python:3.7-alpine
#log
ENV PYTHONUNBUFFERD 1
COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
# update pip
# pipのバージョンが古い警告が出る。Pythonのバージョン古いのが原因な気がする
# RUN pip install --upgrade pip
RUN mkdir /django-api
WORKDIR /django-api
COPY ./django-api /django-api
RUN adduser -D user
USER user
docker-compose.yml
version: "3"
services:
app:
build:
context: .
ports:
- "8000:8000"
volumes:
- ./django-api:/django-api
# - site-packages:/usr/local/lib/python3.7/site-packages
command: >
sh -c "python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
# volumes:
# site-packages:
requirements.txt
Django>=3.0.7,<3.1.0
djangorestframework>=3.11.0,<3.12.0
django-cors-headers==3.2.1
ビルドする
上記3つのファイルが用意できたら、docker-compose buildを行います。
(あまり詳しくないのですが、コマンドはdocker-composeからdocker composeに変わるらしい??)
以下のコマンドを実行。
docker-compose build
ターミナルにSuccessfully built ~~
の表記が現れたら環境構築成功です。
後は思うがままに開発をするのみです。
補足
・Dockerfileやdocker-compose.ymlのコメントアウト部分は不要な記述なので、削除していただいてOKです。
・上記の通りに環境構築した場合、ミドルウェアをインストールしようとするとpipのバージョンが古いぜみたいな警告が出る場合があります。おそらくPythonのバージョンが若干古いのが原因なんじゃないかと思っています。FROMで指定するイメージをPython:latest
とかにすると良いかもですね。
・requirements.txtのdjango-cors-headers==3.2.1はなくてもOKです。フロントにReactを用いてAPIで通信したい場合は、CORSを設定しないとなので上記の記述が必要になります。RUN pip install -r /requirements.txt
のタイミングでインストールされます。
・上記の環境では、ライブラリをpip install
した際、一見インストールに成功したように見えますが実際はインストールできません。docker-compose.ymlなどで永続化を行うか、必要なライブラリをrequirements.txtに追加していく事になると思います。
・DBやWebサーバーの設定等はよしなに行ってください。私は以下の記事を参考に、上記から色々改造を行うつもりです。
https://qiita.com/greenteabiscuit/items/c40ba038703c9f33499b