1. HOME
  2. ブログ
  3. エンジニアリング
  4. Django開発環境をDockerで構築<MySQL>

BLOG

ブログ

エンジニアリング

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.ymldbに一致)

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を使用することで、開発環境の構築が容易になり、依存関係の管理もシンプルになります。この基盤をもとに、さらなる機能を追加してアプリケーションを発展させていくことができます。

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

関連記事