Django開発環境をDockerで構築<MySQL>
目次
ソースコード
https://github.com/techinit-blog/django-docker-workspace
ワークスペースを作成
まず、プロジェクトのディレクトリを作成します。
mkdir django-docker-workspace
ファイルを作成
ディレクトリ構成
次に、ディレクトリ構成を作成します。以下のようにファイルを配置します。
.
├── compose.yml
└── docker
└── python
├── Dockerfile
└── requirements.txt
compose.yml: Docker Composeの設定ファイルで、複数のサービス(アプリケーションやデータベースなど)を定義します。
docker/python/Dockerfile: Python環境を構築するためのDockerイメージの定義ファイルです。
docker/python/requirements.txt: プロジェクトで必要なPythonパッケージを指定します。
docker/python/requirements.txt
docker/python/requirements.txt
には、必要なライブラリを記述します。
Django
mysqlclient
Django: Webフレームワーク本体。
mysqlclient: MySQLデータベースとDjangoを接続するためのライブラリ。
docker/python/Dockerfile
docker/python/Dockerfile
では、Pythonのベースイメージを指定し、必要な環境を設定します。
FROM python:3
ENV PYTHONUNBUFFERED=1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
FROM python:3: Python 3の公式イメージをベースにします。
ENV PYTHONUNBUFFERED=1: 標準出力をリアルタイムで表示するための環境変数です。
RUN mkdir /code: アプリケーション用のディレクトリを作成します。
WORKDIR /code: 作業ディレクトリを設定します。
COPY requirements.txt /code/: requirements.txt
をコンテナ内にコピーします。
RUN pip install -r requirements.txt: 必要なPythonパッケージをインストールします。
ADD . /code/: プロジェクトの全ファイルをコンテナ内に追加します。
compose.yml
compose.yml
では、DjangoアプリケーションとMySQLデータベースを設定します。
services:
app:
build: ./docker/python
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
db:
image: mysql:8.4
environment:
MYSQL_DATABASE: database
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
services: 複数のサービスを定義します。ここではapp
(Djangoアプリ)とdb
(MySQLデータベース)を設定。
app:
- build: Dockerfileの場所を指定。
- command: アプリケーションの起動コマンド。
- volumes: ホストのファイルシステムとコンテナのファイルシステムを共有します。
- ports: ホストとコンテナのポートをマッピングします。
- depends_on:
db
サービスが起動するまで待機します。
db:
- image: 使用するMySQLのDockerイメージ。
- environment: データベースの設定(データベース名、ユーザー、パスワード)。
- volumes: データの永続化のためのボリューム。
ビルドして起動
以下のコマンドを実行して、Dockerイメージをビルドし、サービスを起動します。
docker compose up -d --build
-d: デタッチモードで実行し、バックグラウンドでコンテナを動かします。
–build: 変更があった場合、再ビルドします。
Djangoプロジェクト作成
コンテナ内でDjangoプロジェクトを作成します。
docker compose run app django-admin startproject myapp .
これにより、Djangoプロジェクトがmyapp
という名前で作成されます。
.
├── compose.yml
├── docker
│ └── python
│ ├── Dockerfile
│ └── requirements.txt
├── manage.py
└── myapp
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-312.pyc
│ ├── settings.cpython-312.pyc
│ ├── urls.cpython-312.pyc
│ └── wsgi.cpython-312.pyc
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py
Dockerコンテナ再起動
以下のコマンドでDockerコンテナを再起動します。
docker compose restart
これによってcompose.ymlで定義したcommandが実行されます。
services:
app:
build: ./docker/python
command: python3 manage.py runserver 0.0.0.0:8000
# 以下省略
動作確認
http://localhost:8000
を開く。
MySQLのへの接続設定
myapp/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'db',
'PORT': '3306',
}
}
ENGINE: 使用するデータベースの種類
NAME: データベース名
USER: データベースユーザー名
PASSWORD: データベースパスワード
HOST: データベースサービス名(compose.yml
のdb
に一致)
PORT: データベースのポート番号
マイグレーション
データベースの構造を作成するために、マイグレーションを実行します。
Dockerコンテナに入る
docker compose exec app bash
マイグレーションコマンド実行
python manage.py migrate
以下のログが出れば成功です。
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
まとめ
この手順で、DjangoとMySQLをDockerを使って効率的にセットアップすることができました。Dockerを使用することで、開発環境の構築が容易になり、依存関係の管理もシンプルになります。この基盤をもとに、さらなる機能を追加してアプリケーションを発展させていくことができます。
この記事へのコメントはありません。