💻
Django4.2 コンテナ環境構築
概要
Django4.2 コンテナ環境構築に関する手順やメモ
環境:windows11(wsl2+ubuntu)
コンテナ構成:Django + MySQL
ファイル構成(今回作成するもの)
$ tree -aL 2 django-env/
django-env/
├── .env
├── Dockerfile
├── docker-compose.yml
├── manage.py
├── myblog
│ ├── __init__.py
│ ├── __pycache__
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── requirements.txt
手順
docker 初期導入手順
# install
sudo apt-get update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# iptables-nft -> iptables-legacy 切り替え(WSL2 + Ubuntu22.04のみ)
sudo update-alternatives --config iptables
# sudo 権限なしで dockerコマンド
sudo usermod -aG docker $USER
# セッションリフレッシュ
exec su -1 $USER
# 失敗したとき用
# docker compose で完全削除
docker-compose down --rmi all --volumes --remove-orphans
Djangoコンテナ設定
作業ディレクトリの作成
mkdir django-env ; cd django-env
Dockerファイル作成
cat <<EOF > Dockerfile
FROM python:3.12
USER root
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
RUN apt-get update \
&& apt-get -y install locales \
&& localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
RUN pip install --upgrade pip \
&& pip install --upgrade setuptools
COPY requirements.txt /code/
RUN pip install -r ./requirements.txt
COPY . /code/
EOF
requirements.txt作成
cat <<EOF > requirements.txt
Django~=4.2
psycopg2~=2.9
python-environ
mysqlclient~=2.1.0
EOF
env作成
cat <<EOF > .env
DJANGO_DB_HOST=db
DJANGO_DB_PORT=3306
DJANGO_DB_NAME=myblog_db
DJANGO_DB_USER=myblog_user
DJANGO_DB_PASSWORD=myblog_password
DJANGO_DB_ROOT_PASSWORD=root_password
EOF
docker-compose.yml作成
cat <<'EOF' > docker-compose.yml
version: '3'
services:
db:
image: mysql:latest
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
ports:
- '3306:3306'
environment:
TZ: Asia/Tokyo
MYSQL_ROOT_PASSWORD: '${DJANGO_DB_ROOT_PASSWORD}'
MYSQL_DATABASE: '${DJANGO_DB_NAME}'
MYSQL_USER: '${DJANGO_DB_USER}'
MYSQL_PASSWORD: '${DJANGO_DB_PASSWORD}'
volumes:
- /var/lib/mysql
env_file:
- ./.env
web:
build: .
command: "python manage.py runserver 0.0.0.0:8000"
volumes:
- .:/code
- /etc/passwd:/etc/passwd:ro
- /etc/group:/etc/group:ro
ports:
- "8000:8000"
depends_on:
- db
env_file:
- ./.env
EOF
Djangoプロジェクトの初期化
docker compose run -u (id -u $USER) web django-admin startproject myblog .
Django 設定
下記を追記(追記箇所は良しなにお願いします。)
emacs myblog/settings.py
---
import os
import environ
# .env読み込み
env = environ.Env()
env.read_env(os.path.join(BASE_DIR, '.env'))
ALLOWD_HOSTS = ['*']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': env('DJANGO_DB_HOST'),
'PORT': env('DJANGO_DB_PORT', default='3306'),
'NAME': env('DJANGO_DB_NAME'),
'USER': env('DJANGO_DB_USER'),
'PASSWORD': env('DJANGO_DB_PASSWORD'),
}
}
---
DB立ち上げ&DB初期化
docker compose up db -d
docker compose run -u $(id -u $USER) web python manage.py migrate
コンテナ起動
docker compose up -d
管理ユーザの設定
docker compose exec -u $(id -u $USER) web python manage.py createsuperuser
---
Username: admin
Password: **********
Password (again): *********
Superuser created successfully.
---
確認
下記確認できれば完了です。
- http://localhost:8000/ に接続できること
- http://localhost:8000/admin に接続してログインできること
Discussion