はじめに
自分用の個人開発のメモ/備忘録として記録していきます。
環境
docker desktop
windows 11
やりたいこと
Django開発環境をdocker上に作成したい。
最小限の構成とし、必要に応じて修正していく。
ディレクトリ
プロジェクトディレクトリを任意の場所に作成。
docker関連のファイルとその配下にsrcディレクトリを作ることにした。
project directory
│ .env
│ docker-compose.yml
│ Dockerfile
│ requirements.txt
└─ src
必要ファイルを準備
envファイルを作成
envファイルにてホスト側のディレクトリやポートを指定。
ポートは他コンテナと重複しないものを設定する。
# Directory
HOST_WORKDIR=./src
# Python version
PYTHON_VER=3.12-slim-bullseye
# Port
APP_HOST_PORT=8888
# Mode
ENV_STATE=local #'local' / 'staging' / 'production'
requirements.txtファイルを作成
とりあえずdjangoのみ。
必要に応じて追加する。
Django==5.0
docker-compose.ymlファイルを作成
コンテナ側のポートは8000番に指定。
commandとportsのポート番号を合わせれば他のポートでもOK。
version: '3'
services:
app:
build:
args:
- WORKDIR=/var/www/src
- PYTHON_VER={PYTHON_VER:-3.12-slim-bullseye}
context: .
dockerfile: Dockerfile
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- ${HOST_WORKDIR:-./src}:/var/www/src
ports:
- "${APP_HOST_PORT:-8000}:8000"
environment:
- ENV_STATE=${ENV_STATE:-local}
Dockerfileファイルを作成
#ベースイメージ作成
ARG PYTHON_VER
FROM python:${PYTHON_VER}
ENV PYTHONUNBUFFERED 1
#ディレクトリ作成、ワーキングディレクトリ指定
ARG WORKDIR
RUN mkdir -p ${WORKDIR}
WORKDIR ${WORKDIR}
#requirements.txtからパッケージインストール
COPY requirements.txt "${WORKDIR}/"
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
プロジェクト/コンテナ作成
イメージ作成
docker compose build
プロジェクト作成
プロジェクトの共通設定を行うことが多いので名前をconfigとした。
src直下へ作成するため「.」としておく。
docker compose run app django-admin startproject config .
コンテナ作成
docker compose up -d
アクセスしてみる
ブラウザからhttp://localhost:8888
へアクセスしてみる。
下記画面が出れば作成成功
settings.pyを修正
環境によるDEBUGやALLOWED_HOSTSを切り替える。
envstate = os.environ.get('ENV_STATE','local')
if envstate=='production':
DEBUG = False
ALLOWED_HOSTS = []
elif envstate=='staging':
DEBUG = True
ALLOWED_HOSTS = []
else:
DEBUG = True
ALLOWED_HOSTS = [
'localhost',
'www.localhost',
'host.docker.internal',
'gateway.docker.internal',
]
タイムゾーン等も変えておく。
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
スーパーユーザー作成
コンテナに入る
docker compose exec -it app sh
マイグレートする
python manage.py migrate
スーパーユーザー作成
python manage.py createsuperuser --email admin@example.com --username admin
パスワードを聞かれるので任意のものを設定する。
admin画面にアクセスしてみる
ブラウザからhttp://localhost:8888/admin
へアクセスしてみる。
作成したスーパーユーザーでログインしてみる。