Wsl2, DockerでDjangoの開発環境を構築!
環境
・Window 10
・Wsl2
・Docker version 20.10.13
・Docker Compose version v2.3.3
・Python 3
・Django Django>=3.0,<4.0
・Mysql 8.0
WSL2+Docker環境構築手順以下に参考してください。
ディレクトリの構成
Django
└── app
├── docker-compose.yml
├── mysql
│ ├── Dockerfile
│ └── my.cnf
└── python
├── Dockerfile
└── requirements.txt
ディレクトリの作成
<!-- プロジェクト用のディレクトリを作成(appディレクトリがdjangoプロジェクトのルートディレクトリ) -->
mkdir Django && cd Django
mkdir app && cd app
Django の設定
Dockerfileを作成する
mkdir python && cd python && touch Dockerfile
以下を入れる
# syntax=docker/dockerfile:1
FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
# Expose ports.
EXPOSE 80
EXPOSE 443
python/requirement.txtを作成する
touch requirements.txt
以下を入れる
Django>=3.0,<4.0
mysqlclient
autopep8
docker-compose.yml への記述
touch docker-compose.yml
以下を入れる
services:
db:
build: ./mysql
command: --default-authentication-plugin=mysql_native_password
volumes:
- db-store:/var/lib/mysql
ports:
- 3306:3306
web:
build: ./python
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
environment:
- MYSQL_USER=django_user
- MYSQL_DATABASE=django_local
- MYSQL_PASSWORD=secret
- MYSQL_ROOT_PASSWORD=secret
depends_on:
- db
volumes:
db-store:
MySQL の設定
dockerfileを作成する
mkdir mysql && cd mysql && touch Dockerfile
以下を入れる
FROM mysql:8.0
ENV MYSQL_DATABASE=django_local \
MYSQL_USER=django_user \
MYSQL_PASSWORD=secret \
MYSQL_ROOT_PASSWORD=secret \
TZ=Asia/Tokyo
COPY ./my.cnf /etc/mysql/conf.d/my.cnf
RUN chmod 644 /etc/mysql/conf.d/my.cnf
my.cnfを作成する
touch my.cnf
以下を入れる
[mysqld]
default-authentication-plugin = mysql_native_password
character_set_server = utf8mb4
collation_server = utf8mb4_0900_ai_ci
# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM
# Error Log
log-error = mysql-error.log
# Slow Query Log
slow_query_log = 1
slow_query_log_file = mysql-slow.log
long_query_time = 1.0
log_queries_not_using_indexes = 0
# General Log
general_log = 1
general_log_file = mysql-general.log
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
コンテナを起動 & ブラウザで確認
以下のコマンドを実行し、Docker サービスを構築する。
$ docker-compose build
もし以下のようなエラーが出た場合は
=> ERROR [app_app internal] load metadata for docker.io/library/python:3
=> ERROR [app_db internal] load metadata for docker.io/library/mysql:8.0
------
> [app_app internal] load metadata for docker.io/library/python:3:
------
------
> [app_db internal] load metadata for docker.io/library/mysql:8.0:
------
failed to solve: failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to authorize: rpc error: code = Unknown desc = failed to fetch anonymous token: Get "https://auth.docker.io/token?scope=repository%3Alibrary%2Fmysql%3Apull&service=registry.docker.io": net/http: TLS handshake timeout
解決方法2つがあります。
Docker Desktop → 設定 → Docker Engine
1. docker.io を insecure-registries に追加
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"debug": false,
"experimental": false,
"features": {
"buildkit": true
},
"insecure-registries": [
"docker.io"
],
"registry-mirrors": []
}
2. buildkit を false に設定
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"debug": false,
"experimental": false,
"features": {
"buildkit": false
},
"insecure-registries": [],
"registry-mirrors": []
}
Save & Restart
Django プロジェクトの実行
docker-compose run web django-admin startproject django_app .
以下のコマンドを実行し、コンテナを立ち上げる。
docker-compose up -d
下記 URL にアクセスして Django のページが表示されれば、正常にインストールが完了です。
MySQL の設定
django_app/ 配下にある settings.py を編集します。
変更前
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
変更後
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_local',
'USER': 'django_user',
'PASSWORD': 'secret',
'HOST': 'db',
'POST': 3306
}
}
実際に接続がうまくいっているかは、以下のマイグレーション実行で確認できます。
docker-compose exec web ./manage.py migrate
これで Docker での Django + MySQLの開発環境構築は完了です。
Enjoy!!!
Author And Source
この問題について(Wsl2, DockerでDjangoの開発環境を構築!), 我々は、より多くの情報をここで見つけました https://zenn.dev/toccaduong/articles/901868e8710896著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol