Djangoプロジェクトで設定しておくべきこと (2) docker
この記事は以下の記事の続きです。
今回はDockerを使ってDjangoプロジェクトの設定をします。
1. dockerを使う理由
Djangoを使ったWEBアプリケーションの開発環境は
dockerコンテナ
で作成します。
本番環境でコンテナを利用しない場合でも、開発環境はコンテナを使った方が良いです。
理由は
- チーム全員の開発環境が同じになる
- プロジェクトjoin時や、パソコン変更時の環境構築コストが減る
からです。
うちはK8SやECSを導入するつもりはないからdockerは必要ない。
のではなく、
- 問題が起きても、チーム全員の環境が同じなので原因の特定がしやすい
- 情報の共有ができる
等、効率的な情報共有のために環境を揃えるべきです。
特に今後は、オンラインでの作業がメインになっていくはずです。
情報を共有しやすい環境を整えるということは大切なスキルになってくると思います。
1-1. docker
では、Djangoの開発環境をdockerで作成していきます。
プロジェクトrootにdockerフォルダを配置して、子階層にdevelopmentフォルダとDockerfileを作成します。
|--docker
| |--development
| | |--Dockerfile
Dockerfileにコードを書きます。
FROM python:3.9.1-buster as builder
# Default to UTF-8 file.encoding
ENV LANG C.UTF-8
# app directory
RUN mkdir -p /usr/src/app
COPY ./requirements/development.txt /usr/src/app
WORKDIR /usr/src/app/
RUN pip install -r development.txt
COPY . /usr/src/app
EXPOSE 5000
pythonのバージョンは3.9系を利用していますが、これはこの記事を記載している時点で3.10の正式リリースがまだだからです。
そのうち変更します。
requirementsフォルダは設定ファイルを格納するフォルダです。
このフォルダの中に
- development.txt
- production.txt
のように環境に応じた設定ファイルを配置します。
portは5000を指定します。
1-2. docker-compose
Djangoの開発環境に
- データベースサーバー
- メールサーバー
を追加します。
データベースとメールサーバーは、どんなシステムでもほぼ100%必要になる環境なので
docker-compose
を使って環境を構築します。
プロジェクトrootフォルダ配下にdocker-compose.ymlを作成します。
|--docker-compose.yml
docker-compose.ymlにコードを書きます。
version: '3.6'
services:
django_template:
build:
context: .
dockerfile: ./docker/development/Dockerfile
image: django_template
container_name: django_template
tty: true
volumes:
- .:/usr/src/app/
ports:
- "9026:5000"
depends_on:
- django_template-db
env_file:
- .env
django_template-db:
build:
context: .
dockerfile: ./docker/mysql/Dockerfile
image: django_template-db
container_name: django_template-db
tty: true
environment:
MYSQL_USER: masa
MYSQL_PASSWORD: masa
MYSQL_DATABASE: masa_production
MYSQL_ROOT_PASSWORD: root
volumes:
- ".docker/mysql:/home"
ports:
- 3317:3306
django_template-mailserver:
image: mailhog/mailhog:latest
container_name: django_template-mailserver
ports:
- 8025:8025
django_template-dbがmysqlサーバーでdjango_template-mailserverがメールサーバーです。
mysqlとメールサーバーもホストから確認できるようしているのは、
- ブラウザからテストメールを確認する
- ローカルのツールでmysqlに接続する
ためです。
こうすることで、開発効率が高くなると思います。
また、この記事ではmysqlサーバーもデフォルト設定でなく、別にdockerファイルを用意してcnfファイルを用意しています。
開発環境でDBの細かい設定まで必要としない場合は、
image: mysql:5.7
としてしまっても良いと思います。
mysqlのversionを8以上にすると、少し設定を変更する必要がありますが、こちらはDjangoの設定とはまた別の範囲になるのでここでは説明を省きます。
ここまで記載したら後はコマンドを実行します。
docker-compose up
全てのコンテナが立ち上がれば成功です。
1-3. ドキュメント
docker-composeの立ち上げに成功したらドキュメントを作成します。
これは初回の記事で説明したように
ドキュメントを見て5分で開発環境が構築できる
対応になります。
せっかく環境を構築したのにドキュメントがないと、生産性と再現性に問題が生じてしまいます。
README.mdに
- ビルド方法
- 開発環境コンテナに入る方法
を記載しましょう。
ドキュメントは最低限の情報だけ簡潔に記載します。
ダラダラと長文で記載すると誰も読まなくなります。
ドキュメントの記載が終われば
- 誰でもドキュメントを見て5分で開発環境が作成できる
のタスクが完了です。
次の記事ではvscodeを連携させて、さらに便利なDjango環境構築を作る方法を説明します。
Discussion