LoginSignup
2
2

More than 1 year has passed since last update.

DockerでDjango3+MySQL8の環境を構築する

Last updated at Posted at 2021-12-05

はじめに

初投稿です。
Dockerでdjango3+mysql8の環境を構築しようとした時に少しハマったので備忘録的な感じで書いていきます。
※dockerについては詳しく説明できませんしません。

環境

ローカル環境
  • OS:macOS Big Sur
  • Docker Desktop
    • docker version: 20.10.7
    • docker-compose version: 1.29.2
作成する環境
  • Django=3.2
  • MySQL=8.0.13

環境構築

フォルダの作成

console
mkdir docker-django-mysql8
cd docker-django-mysql8
touch Dockerfile docker-compose.yml requirements.txt

こんな感じのディレクトリ構成になります

docker-django-mysql8
   |-- Dockerfile
   |-- docker-compose.yml
   |-- requirements.txt

各ファイルの作成

requirements.txt

まず、requirements.txtを作成します。
pip install したいパッケージを記載します。

requirements.txt
Django==3.2 
mysqlclient==1.4.6

Dockerfile

次にDockerを作成します。

Dockerfile
# python3のイメージを指定
FROM python:3   
# バッファリングを無効化
ENV PYTHONUNBUFFERED 1 
# 直下にcodeディレクトリを作成
RUN mkdir /code
# codeディレクトリに移動
WORKDIR /code
# codeディレクトリにrequirements.txtのコピーを配置
COPY requirements.txt /code/
# pipをupgradeしてrequirements.txtに記載したパッケージをインストールする
RUN pip install --upgrade pip && pip install -r requirements.txt
# docker-django-mysql8下のファイルをcodeディレクトリにコピー
COPY . /code/

docker-compose.yml

最後にdocker-compose.ymlを作成します。
mysqlのイメージは提供されているものをそのまま使うためDockerfileを作成しません。

docker-compose.yml
version: '3'
services:
  web:
    container_name: docker-django
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    working_dir: /code
    ports:
      - 8000:8000
    volumes:
      - .:/code  #カレントディレクトリを/codeにマウント
    depends_on:
      - db
  db:
    container_name: docker-django-db
    image: mysql/mysql-server:8.0.13-1.1.8
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_DATABASE: django
      MYSQL_USER: django
      MYSQL_PASSWORD: django
      MYSQL_ROOT_PASSWORD: django
      TZ: 'Asia/Tokyo'
    #codeディレクトリの/var/lib/mysqlをカレントディレクトリにマウント
    volumes:
      - ./mysql:/var/lib/mysql 

必要なファイルの作成は以上でOKです

docker-compose.yml
command: --default-authentication-plugin=mysql_native_password

このコードですが、mysql8からはログイン認証パスワード方式がデフォルトで"caching_sha2_password"に変更されており、それを従来の方式である"mysql_native_password"にdocker-compose.ymlで変更するためものです。

コンテナを立ち上げる

dockerfileとdocker-compose.ymlが作成できたのでそれを元にコンテナを作成します。

docker-compose run web django-admin.py startproject project .

最後に "." をつけることを忘れないでください。
また、"project" はプロジェクト名になりますので自由に変更してください。
このコマンドを実行するとdockerfileがあるディレクトリと同階層にファイルとディレクトリが作成されていると思います。
確認してみましょう。

console
ls
docker-compose.yml   Dockerfile   manage.py   mysql   project   requirements.txt

以上のような構成になっていることが確認できると思います。
次に、project下にあるsettings.pyのDATABASESを変更します。

project/settins.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django',
        'USER': 'django',
        'PASSWORD': 'django',
        'HOST': 'db',
        'PORT': 3306,
    }
}

これで環境が構築できているはずです。
コンテナを立ち上げてみましょう。

docker-compose up

http://127.0.0.1:8000 にアクセスすると、Djangoのトップページが確認できると思います。
image.png

これで環境構築は終了です。

最後に

最後まで見ていただきありがとうございました。
もし間違っている点などがあったら是非指摘していただきたいです。
問題ないようでしたらLGTMお願い致します。

また、この後のアプリの作成方法やもっと詳しく解説してほしい点など質問やお願いがありましたらお気軽にコメントお願い致します。
頑張って答えます。

ありがとうございました。

【参考】
http://hananohana.work/posts/docker_django_mysql/

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2