こんにちはタカモリです。 ここ最近は毎日新しいことにチャレンジしておりますので、今日は勉強していたDockerでDjango4の環境を構築していきます。 (以前も似たような記事をあげていますのでremakeとなります。) (以前の記事)Django3.2(python)+MySQLをDockerで環境構築する

環境 Mac Monterey 12.4 Docker version 20.10.17

ディレクトリ構成 testAppとして今回は作成していきます。

testApp
  docker-compose.yaml
  Dockerfile
  requirements.txt

まずは上記のファイルを3つ用意します。

docker-compose.yaml


services:
  mysql:
    image: mysql:8.0.20
    container_name: test-mysql
    environment:
      MYSQL_ROOT_PASSWORD: test
      MYSQL_DATABASE: test-local_db
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      TZ: 'Asia/Tokyo'
    command: >
      mysqld --default-authentication-plugin=mysql_native_password
    
    volumes:
    - ./data/data:/var/lib/mysql

    ports:
    - 3306:3306

  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - mysql

volumes:
  data:

Dockerfile

FROM python:3
RUN apt-get update && \
    apt-get -y install mariadb-client
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt

requirements.txt

Django>=4.0
mysqlclient

それではビルドしていきます。 testAppのあるディレクトリで

$ docker-compose build

続いて

docker-compose run web django-admin startproject test .

MySQLの接続

これでtestというDjangoのプロジェクトが作成されたと思いますので、DjangoからMySQLに接続できるようにしていきます。

現在のディレクトリ構成です。

testApp
  - data
  - test
       __init__.py
       asgi.py
       settings.py
       urls.py
       wsgi.py
  docker-compose.yaml
  Dockerfile
  requirements.txt

この中のsettings.pyの記述を変更していきます。

# Database
# https://docs.djangoproject.com/en/4.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

こう記述されている部分をdocker-composeで設定したものに変更していきます。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test-local_db',
        'USER': 'test',
        'PASSWORD': 'test',
        'HOST': 'mysql',
        'PORT': '3306'
    }
}

ではこれでデータベースの接続も完了と思われますのでターミナルから

docker-compose up -d

エラー等なければこちらのURLからブラウザにアクセスします。http://localhost:8000 django.png