Dockerを使って、Django開発環境を共通化しておく
二人以上で開発するなら、Django開発環境を共通化して置いたほうが良いので、Docker環境を構築しよう。
dockerに必要なファイル3種類、ネストな階層構造になっている
1, docker-compose.yml
WebサービスやDBサービスを定義(一番の大枠)
2, Dockerfile
公式DockerイメージがあるpostgreSQLやnginxでは不要(接続情報だけ追加)だが、djangoでは個別に指定する必要がある
※独自のアプリコードを含んだ状態でDockerイメージを作る必要があるので、Dockerfileで記述する
3, requirements.txt
pythonに必要なパッケージを指定する(django, postgreSQLドライバなど)
0, まず親プロジェクトディレクトリ生成
1 2 |
mkdir myproject cd myproject |
1, docker-compose.yml
WebとDBサービスを定義
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
services: web: build: context: . dockerfile: Dockerfile container_name: django_app volumes: - .:/code ports: - "8000:8000" env_file: - .env depends_on: - db db: image: postgres:15 container_name: postgres_db volumes: - postgres_data:/var/lib/postgresql/data/ environment: POSTGRES_DB: mydb POSTGRES_USER: user POSTGRES_PASSWORD: password volumes: postgres_data: |
2, Dockerfile
Webサービスの内容を定義(必要なパッケージはrequirements.txtに記述)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# ベースイメージ FROM python:3.11-slim # 作業ディレクトリを設定 WORKDIR /code # 必要ファイルをコピー COPY requirements.txt . # パッケージインストール RUN pip install --no-cache-dir -r requirements.txt # プロジェクト全体をコピー COPY . . # ポート開放 EXPOSE 8000 # デフォルトコマンド(サーバ起動) CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] |
3, requirements.txt
(pythonに必要なパッケージを記述)
1 2 |
Django>=5.2 psycopg2-binary>=2.9 |
4, .envファイルの導入
.env.example ← gitに含ませて、.envとして使う
.env ← gitに含ませない本物の環境設定ファイル
1 2 3 4 5 6 7 8 9 10 11 |
# Djangoの設定 DJANGO_SECRET_KEY=your-secret-key DEBUG=True ALLOWED_HOSTS=localhost,127.0.0.1 # DB接続用 DB_NAME=mydb DB_USER=postgres DB_PASSWORD=postgres DB_HOST=db DB_PORT=5432 |
5, Djangoプロジェクトの作成
以下のコマンドを実行して、DjangoプロジェクトをDockerコンテナ内で作成します
Docker Desktopなど、Docker実行環境が構築済み前提
1 2 |
# カレントディレクトリに manage.py や settings.py が生成されます。 docker-compose run web django-admin startproject myproject . |
6, myproject/myproject/settings.pyを修正。SQLite→PostgreSQL、.envを反映させる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', # } # } import os SECRET_KEY = os.getenv("DJANGO_SECRET_KEY", "fallback-secret") DEBUG = os.getenv("DEBUG", "True") == "True" DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': os.getenv("DB_NAME", "mydb"), 'USER': os.getenv("DB_USER", "user"), 'PASSWORD': os.getenv("DB_PASSWORD", "password"), 'HOST': os.getenv("DB_HOST", "db"), 'PORT': os.getenv("DB_PORT", "5432"), } } // ついでに日本語化 LANGUAGE_CODE = 'ja-jp' TIME_ZONE = 'Asia/Tokyo' |
7, git管理開始
.gitignore
1 2 3 4 5 6 7 8 9 10 11 12 |
# Python __pycache__/ *.pyc # Envファイル .env # SQLite(使っていない場合でも一応) db.sqlite3 # VSCodeなどの設定 .vscode/ |
1 2 3 4 5 6 |
git init git add . git commit -m "初回コミット: Django + Docker 開発環境構築完了" git branch -M main git remote add origin https://github.com/fddcddhdd/docker-django.git git push -u origin main |
別の環境でgit clone
1 2 3 4 5 6 7 8 9 |
# 好きなディレクトリでgit cloneする git clone https://github.com/fddcddhdd/docker-django # Dockerfile に基づいて Webアプリ用のイメージが作成 docker-compose build #Webサーバー(Django)と DB(PostgreSQL)を起動 http://localhost:8000 にアクセス docker-compose up |