Docker + Django でMySQLを使うのが結構簡単だった

前回の記事 (https://nothing-behind.com/?p=61) でDocker + Djangoを使った環境構築手順をまとめました。今回はその環境でMySQLを使うための方法をまとめていこうと思います。

Requirements.txt

まずはrequirements.txtを編集していきます。MySQLへの接続には `mysql-connector-python`を使用します。

django
mysql-connector-python

settings.py

djangoでは settings.py にデータベースの接続情報を書きます。デフォルトでは下記のようにSQLiteを使うようになっていますが、それをこれから編集していきます。

デフォルト

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

MySQLを使うように編集

DATABASES = {
    'default': {
        'ENGINE': 'mysql.connector.django',
        'NAME': 'データベース名をここに書く',
        'USER': 'root',
        'PASSWORD': 'パスワードをここに書く',
        'HOST': 'db(こことdocker-compose.ymlのコンテナ名を連携させる。dbでもなんでも良い)',
        'PORT': 3306,
    }
}

docker-compose.yml

djangoのコンテナとは別にデータベース用のコンテナを使うように編集していきます。

version: '3.7'
services:
  django:
    restart: always
    build: .
    volumes:
      - ./:/projects
    command: /bin/sh -c "cd /projects; python manage.py migrate; python manage.py runserver 0:8000"
    ports:
      - 8000:8000
    depends_on:
      - db (ここをsettings.pyのhost名と同じにしないと接続できない)
  db: (ここをsettings.pyのhost名と同じにしないと接続できない)
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: データベース名
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: パスワード
    tty: true
    ports:
      - 3306:3306
    command: mysqld --character-set-server=utf8mb4 --explicit_defaults_for_timestamp=true

これで設定は完了です。下記コマンドを実行してブラウザで `localhost:8000`にアクセスできたら成功です!

$ docker-compose up

Related Posts