フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

dokcer上でdjnago+mysqlの構築

はじめに

  • 前回、djangoの開発環境を構築したので、mysqlを利用したアプリケーションを構築したいと思い、djangoからmysqlにアクセスできるところまで調査する

docker-composeでmysql環境を準備する

version: '3'
services:
  backend:
    container_name: backend
    build:
      context: ./
      dockerfile: ./containers/backend/Dockerfile
    volumes:
      - ./backend/:/srv/backend   
    environment:
      - TZ=Asia/Tokyo
    ports:
      - "8000:8000"
    command: /root/.pyenv/versions/3.8.4/bin/python /srv/backend/manage.py runserver 0:8000
    tty: true
    networks:
      - app-net    
  db:
    image: mysql
    container_name: db
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    volumes:
      - ./db/:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: winlogic
      MYSQL_USER: docker-user
      MYSQL_PASSWORD: password
      TZ: "Asia/Tokyo"
    networks:
      - app-net
    ports:
      - "3306:3306"        
networks:
  app-net:
    driver: bridge

データベースの作成

# docker-compose up -d
# docker exec -it db /bin/bash

$ mysql -u root -p
$ create database <データベース作成>;

mysqlclientについて

  • mysqlclientはネイティブドライバーです。これが推奨される選択です。

[django 公式サイト]

mysqlclient is a native driver. It’s the recommended choice.

docs.djangoproject.com

インストール

  • alpine上でインストールする際にmysql-devをインストールしてからmysqlclientをインストールする
# docker exec -it backend /bin/ash
$apk add mysql-dev
#pip install mysqlclient

設定

  • local_settings.pyファイルに下記の記述を追加する
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '<DB名>',
        'USER': '<ユーザー名>',
        'PASSWORD': '<パスワード>',
        'HOST': 'db',
        'PORT': '3306',
    }
}
  • mysql にadminやgroupなどのテーブルを作成する
# python manage.py migrate
  • superuserの作成
# python manage.py createsuperuser