DcokerでPython、Django環境の構築

docker-composeファイルのテンプレート

version: '3'
services:
  web:
    build: .
    volumes: 
    - .:/code
    tty: true
    ports: 
    - 8000:8000
    networks:
      - external.group
networks:
  external.group:
    external: true

Dockerfileのテンプレート

# 公式からpython3.10 linuxイメージをpull
FROM python:3.10
# Pythonがpyc filesとdiscへ書き込むことを防ぐ
ENV PYTHONDONTWRITEBYTECODE 1
# Pythonが標準入出力をバッファリングすることを防ぐ
ENV PYTHONUNBUFFERED 1
# aptをアップデート
RUN apt update
# ディレクトリを作成
RUN mkdir /code
# 作業ディレクトリを設定
WORKDIR /code
# requirements.txt を /code ディレクトリに追加
ADD requirements.txt /code/
# pipをアップデート
RUN pip install --upgrade pip
# requirements.txt からライブラリをinstall
RUN pip install -r requirements.txt
# モジュールをワークスペースに追加
ADD . /code/

このファイルは、 docker-compose.yml と同階層に設置する。

requirements.txtファイルのテンプレート

Django==4.1
mysqlclient==2.1.1

Dockerfileから読み込まれるので、Dockerfileで指定している位置に配置する。
今回のテンプレートの場合は同階層。

起動コマンド

Dockerは下記のコマンドを使用して起動する。

docker-compose up -d --build

初期時は、環境的に何もないため、オプションとして --build を指定している。

プロジェクトの作成

下記のコマンドを実行してDjango上にプロジェクトを作成する。

docker container exec -it [コンテナ名] django-admin startproject [プロジェクト名]

データベースの接続情報変更

作成したプロジェクトの settings.py の DATABASES 部分にデータベースへの情報を入力する。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '[データベース名]',
        'USER': '[テータベース接続ユーザー]',
        'PASSWORD' : '[テータベース接続パスワード]',
        'HOST': '[ホスト]',
        'PORT': 3306,
    }
}

プロジェクトを起動

下記のコマンドを実行し、プロジェクトを起動する。

docker container exec -it [コンテナ名] python [プロジェクト名]/manage.py runserver 0.0.0.0:8000