#はじめに
初投稿です。
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
#環境構築
フォルダの作成
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 したいパッケージを記載します。
Django==3.2
mysqlclient==1.4.6
####Dockerfile
次にDockerを作成します。
# 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を作成しません。
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です
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があるディレクトリと同階層にファイルとディレクトリが作成されていると思います。
確認してみましょう。
ls
docker-compose.yml Dockerfile manage.py mysql project requirements.txt
以上のような構成になっていることが確認できると思います。
次に、project下にあるsettings.pyのDATABASESを変更します。
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のトップページが確認できると思います。
これで環境構築は終了です。
#最後に
最後まで見ていただきありがとうございました。
もし間違っている点などがあったら是非指摘していただきたいです。
問題ないようでしたらLGTMお願い致します。
また、この後のアプリの作成方法やもっと詳しく解説してほしい点など質問やお願いがありましたらお気軽にコメントお願い致します。
頑張って答えます。
ありがとうございました。