目次
開発環境
- Visual Studio Code:version 1.73.0
- OS:Windows10
- Docker Engine:v23.0.5
DockerでDjango+Gunicorn+Nginx+MySQLの環境構築をする手順
DockerでDjango+Gunicorn+Nginx+MySQLの環境構築をする手順について解説していきます。
ディレクトリ構成
今回のディレクトリ構成は下記を目指していきます。
1 2 3 4 5 6 7 | project-root/ ├── docker/ │ ├── web/ # Pythonコンテナ(Dockerfile) │ ├── database/ # MySQLコンテナ(Dockerfile) │ └── nginx/ # Nginxコンテナ(Dockerfile + 設定ファイル) ├── web/ # Djangoプロジェクトを配置するディレクトリ └── docker-compose.yml # Docker Composeファイル |
docker-compose.ymlを作成
まずはdocker-compose.ymlを作成していきます。
ルートディレクトリの直下にdocker-compose.ymlを作成し、以下のようにしてください。
1 2 3 4 5 6 7 8 9 10 11 12 | version: '3.8' services: web: build: context: . dockerfile: docker/web/Dockerfile container_name: django_web ports: - "8000:8000" volumes: - ./web:/var/www/html |
Pythonコンテナを作成
次にPythonコンテナを作成していきます。
docker/web/
ディレクトリの直下にDockerfileを作成し、以下のようにしてください。
1 2 3 4 5 6 7 8 | FROM python:3.11 WORKDIR /var/www/html COPY ./docker/web/requirements.txt /var/www/html/ RUN pip install --upgrade pip RUN pip install -r requirements.txt |
docker/web/
ディレクトリの直下にrequirements.txtを作成し、以下のようにしてください。
1 2 3 | Django mysqlclient gunicorn |
Djangoプロジェクトの作成
次にDjangoプロジェクトの作成をしていきます。
まずは以下のコマンドでプロジェクトディレクトリに移動します。
1 | cd project-root |
以下のコマンドでPythonコンテナをビルドします。
1 | docker-compose build |
以下のコマンドでDjangoプロジェクトを作成します。
1 | docker-compose run --rm web django-admin startproject config . |
Pythonコンテナの修正
次にPythonコンテナを修正していきます。
1 2 3 4 5 6 7 8 9 10 | FROM python:3.11 WORKDIR /var/www/html COPY ./docker/web/requirements.txt /var/www/html/ RUN pip install --upgrade pip RUN pip install -r requirements.txt CMD ["gunicorn", "--bind", "0.0.0.0:8000", "config.wsgi:application"] |
MySQLコンテナを作成
次にMySQLコンテナを作成していきます。
docker/database/
ディレクトリの直下にDockerfileを作成し、以下のようにしてください。
1 | FROM mysql:8.0 |
Nginxコンテナを作成
次にNginxコンテナを作成していきます。
docker/nginx/
ディレクトリの直下にDockerfileを作成し、以下のようにしてください。
1 2 | FROM nginx:alpine COPY ./docker/nginx/default.conf /etc/nginx/conf.d/default.conf |
docker/nginx/
ディレクトリの直下にdefault.confを作成し、以下のようにしてください。
1 2 3 4 5 6 7 8 9 10 11 | server { listen 80; server_name localhost; location / { proxy_pass http://web:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } |
docker-compose.ymlを修正
docker-compose.ymlを修正していきます。
ルートディレクトリの直下のdocker-compose.ymlを以下のように修正してください。
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | version: '3.8' services: web: build: context: . dockerfile: docker/web/Dockerfile container_name: django_web ports: - "8000:8000" volumes: - ./web:/var/www/html depends_on: - db db: build: context: . dockerfile: docker/database/Dockerfile container_name: django_db environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: django_db MYSQL_USER: django_user MYSQL_PASSWORD: django_password ports: - "3306:3306" volumes: - db_data:/var/lib/mysql nginx: build: context: . dockerfile: docker/nginx/Dockerfile container_name: django_nginx ports: - "80:80" depends_on: - web volumes: - ./web:/var/www/html - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf volumes: db_data: |
Dockerコンテナをビルド
次にDockerコンテナをビルドしていきます。
まずは以下のコマンドでプロジェクトディレクトリに移動します。
※プロジェクトディレクトリに移動済の場合はスキップしてください。
1 | cd project-root |
以下のコマンドでDockerコンテナをビルドします。
1 | docker-compose build --no-cache |
Djangoプロジェクトのデータベース設定
次にDjangoプロジェクトのデータベース設定をしていきます。
Djangoプロジェクトのsettings.py
設定を以下のように修正します。
1 2 3 4 5 6 7 8 9 10 | DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_db', 'USER': 'django_user', 'PASSWORD': 'django_password', 'HOST': 'db', 'PORT': '3306', } } |
次に以下のコマンドでマイグレーションを実行します。
1 | docker-compose exec web python manage.py migrate |
ブラウザでhttp://localhost
にアクセスし、Djangoアプリケーションの初期画面が表示されていれば成功です。
まとめ
今回はDockerでDjangoの環境構築をする手順について解説していきましたが、いかがだったでしょうか。
個人開発のみであればDockerは不要かもしれませんが、Dockerコンテナで開発環境を構築することにより、複数人でプロジェクトを進める場合でも同じ環境で開発を進めることができます。
Dockerを使った開発は必須となりつつありますので、是非、チャレンジしてみてください。