Django4+Mysql8の環境をdocker-composeで構築する
こんにちはタカモリです。 ここ最近は毎日新しいことにチャレンジしておりますので、今日は勉強していたDockerでDjango4の環境を構築していきます。 (以前も似たような記事をあげていますのでremakeとなります。) (以前の記事)Django3.2(python)+MySQLをDockerで環境構築する
環境 Mac Monterey 12.4 Docker version 20.10.17
ディレクトリ構成 testAppとして今回は作成していきます。
testApp
docker-compose.yaml
Dockerfile
requirements.txt
まずは上記のファイルを3つ用意します。
docker-compose.yaml
services:
mysql:
image: mysql:8.0.20
container_name: test-mysql
environment:
MYSQL_ROOT_PASSWORD: test
MYSQL_DATABASE: test-local_db
MYSQL_USER: test
MYSQL_PASSWORD: test
TZ: 'Asia/Tokyo'
command: >
mysqld --default-authentication-plugin=mysql_native_password
volumes:
- ./data/data:/var/lib/mysql
ports:
- 3306:3306
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- mysql
volumes:
data:
Dockerfile
FROM python:3
RUN apt-get update && \
apt-get -y install mariadb-client
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
requirements.txt
Django>=4.0
mysqlclient
それではビルドしていきます。 testAppのあるディレクトリで
$ docker-compose build
続いて
docker-compose run web django-admin startproject test .
MySQLの接続
これでtestというDjangoのプロジェクトが作成されたと思いますので、DjangoからMySQLに接続できるようにしていきます。
現在のディレクトリ構成です。
testApp
- data
- test
__init__.py
asgi.py
settings.py
urls.py
wsgi.py
docker-compose.yaml
Dockerfile
requirements.txt
この中のsettings.pyの記述を変更していきます。
# Database
# https://docs.djangoproject.com/en/4.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
こう記述されている部分をdocker-composeで設定したものに変更していきます。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test-local_db',
'USER': 'test',
'PASSWORD': 'test',
'HOST': 'mysql',
'PORT': '3306'
}
}
ではこれでデータベースの接続も完了と思われますのでターミナルから
docker-compose up -d
エラー等なければこちらのURLからブラウザにアクセスします。http://localhost:8000