Python3 + Django + MySQL5.7環境を作るシンプルなDocker環境構築セット。
https://docs.docker.jp/compose/django.html を参考。
MySQL側で ネイティブパスワードで接続するように指定しても、 Django側が caching_sha2_password
を利用して接続しようとするため。
現時点では 2.2
(LTS)。
バージョンを指定してインストールしたい場合は、 requirements.txt
の下記の行を修正する。
Django>=2.2,<2.3
例えば、次のLTSである 3.2
でインストールしたい場合は、次の通り修正する。
(ただし、現時点では、この方法では 3.2
をインストールすることはできない)
Django>=3.2,<3.3
となることが確定している。(2021/4リリース予定)
https://www.djangoproject.com/download/
MySQLを利用するためのログディレクトリが自動生成される。
$ cd /path/to/
$ ./FirstStep.sh
下記コマンドでDockerイメージをビルドする。
$ cd path/to/
$ docker-compose run web django-admin.py startproject config .
【コマンドの補足】
引数で指定したコンテナ内で、コマンドを実行する。
$ cd path/to/
$ docker-compose run <コンテナ名> <コマンド>
つまり、 web
サービスの中で、 django-admin startproject config .
が実行される。
このコマンドは、 Django
に対して、 Django
プロジェクトを組み立てるファイル群の生成を指示するものである。
config
の部分に指定した名前でディレクトリが作成され、その中に設定ファイル群が生成される。
www/config/settings.py
から DATABASE
と記載されている部分を探し、下記の内容で置き換える。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test_database',
'USER': 'docker',
'PASSWORD': 'docker',
'HOST': 'mysql',
'PORT': 3306,
}
}
Webサーバのコンテナにログインし、DB migrateを実行する。
$ cd path/to/
$ docker-compose exec web bash # コンテナに入る
$ python manage.py migrate
$ docker-compose up
上記コマンドを実行後、 http://localhost にアクセスすると、 Djangoのデフォルトページが表示される。
DjangoはDBとの疎通が正常にできない場合、Django自体もアクセスできない状態となる。
一度MySQL8.0でイメージをビルドし、その後MySQL5.xを使用するように docker-compose.yml
を書き換えてリビルドした場合、
MySQLが起動しなくなる現象が確認されている。
その場合、下記手順に従い、全てのコンテナ・イメージ・ボリュームを全て削除し、再度ビルドすることで、正常に起動するようになる。 https://qiita.com/astrsk_hori/items/6ca1ff27c911673ff7cc
$ cd path/to/
$ docker-compose exec web bash
$ cd path/to/
$ docker-compose exec db bash