📓

DockerでDjango+mysql環境の構築&プロジェクト作成

に公開

Docker を使って Django + MySQL のローカル開発環境を構築し、Django プロジェクトを作成するまでの手順をまとめます。
Docker や Django に初めて触れる方でも一通り環境が立ち上がるところまで再現できることを目指しています。

環境構築手順

  1. 適当なディレクトリを作成
  2. docker-compose.yml, dockerfile, requirements.txt を用意
$ touch docker-compose.yml Dockerfile requirements.txt
  1. それぞれのファイルに必要な項目を記載
requirements.txt
Django>=2.2.4
mysqlclient==1.4.6
dockerfile
FROM python:3.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip3 install -r requirements.txt
ADD . /code/
EXPOSE 8000
docker-compose.yml
version: '3'
services:
 web:
   container_name: "コンテナ名"
   build: .
   command: python3 manage.py runserver 0.0.0.0:8000
   working_dir: /code
   ports:
     - 8000:8000
   volumes:
     - .:/code
   depends_on:
     - db
 db:
   container_name: "コンテナ名"
   image: mysql:5.7
   restart: always
   environment:
     MYSQL_DATABASE: "データベース名"
     MYSQL_ROOT_PASSWORD: password
   volumes:
     - ./mysql:/var/lib/mysql
   ports:
     - 3306:3306

プロジェクトの作成手順

  1. ターミナルからdocker-composeコマンドを叩いてDjangoプロジェクトを作成
$ docker-compose run web django-admin startproject "プロジェクト名" .

Docker Compose V2 を使っている場合は、ハイフンなしの docker compose コマンドに読み替えてください(例: docker compose run web ...)。

  1. "プロジェクト名"/setting.pyのDATABASEを編集
"プロジェクト名"/setting.py
DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.mysql',
 'NAME': 'データベース名',
 'USER': 'root',
 'PASSWORD': 'password',
 'HOST': 'db',
 'PORT': 3306
 }
}

PASSWORD には docker-compose.yml で設定した MYSQL_ROOT_PASSWORD の値を指定します。この設定が抜けているとDBへの接続に失敗するので注意してください。

  1. コンテナ起動
$ docker-compose up -d

動作確認

docker-compose logs web でエラーが出ていないことを確認し、ブラウザで http://localhost:8000 にアクセスして Django の初期画面が表示されれば成功です。

web コンテナが db コンテナより先に起動してDB接続エラーになる場合は、MySQL側の起動が完了する前にDjangoが接続を試みていることが原因のことが多いです。depends_on はコンテナの起動順序のみを保証するため、少し待ってから再実行するか、wait-for-it のようなヘルスチェック用のスクリプトを挟む方法もあります。

参考

https://medium.com/@hokan_dev/docker-composeでdjango-mysqlの環境を作る-bd99cef7df0c

Discussion