前回は、docker-compose.ymlを中心に記載しました。今回は、Django
アプリケーションの設定を記載します。
下記で公開中です。記事と合わせて参考にして下さい。
Dockerize Django Environment
Djangoプロジェクトの初期化
1.Django
プロジェクトの作成
-
docker-compose.yml
があるディレクトリ下で以下のコマンドを実行します。
docker-compose run web django-admin.py startproject 任意のプロジェクト名 .
- 実行後にホスト側の
web
ディレクトリ(Django
用ディレクトリ)内が以下のようになります。
┣web
┃ ┗任意のプロジェクト名ディレクトリ
┃ ┗Dockerfile
┃ ┗requirements.txt
┃ ┗manage.py
2.PostgreSQL
へ接続
- 接続情報を手順1で作成したプロジェクトディレクトリ下にある
settings.py
ファイルに定義します。
任意のプロジェクト名ディレクトリ/settings.py
# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'postgres',
'PORT': 5432,
}
}
3.WSGI
サーバ(アプリケーションサーバ)の設定
- 今回、WSGIサーバはGnicornを使用します。
- WSGIとは、
Web Server Gateway Interface
の略です。名前の通り、webサーバとwebアプリケーションの間の汎用的なインターフェースです。
任意のプロジェクト名/settings.py
WSGI_APPLICATION = '任意のプロジェクト名.wsgi.application'
4.コンテナを立ち上げる
ここまで、設定が出来たらコンテナを立ち上げます。
docker-compose up
アプリケーションを作成する
- いよいよアプリケーション開発に着手します。下記のコマンドを実行してアプリケーションを作成します。
docker-compose run web python manage.py startapp 任意のアプリケーション名
- 実行後にホスト側の
web
ディレクトリ(Django
用ディレクトリ)内が以下のようになります。
┣web
┃ ┗任意のプロジェクト名ディレクトリ/
┃ ┗Dockerfile
┃ ┗requirements.txt
┃ ┗manage.py
┃ ┗任意のアプリケーション名ディレクトリ/
┃ ┃ ┗__init__.py
┃ ┃ ┗admin.py
┃ ┃ ┗apps.py
┃ ┃ ┗migrations/
┃ ┃ ┃ ┗__init__.py
┃ ┃ ┗models.py
┃ ┃ ┗tests.py
┃ ┃ ┗views.py
2.admin(管理画面の有効化)と静的ファイルの読み込み
-
settings.py
のINSTALLED_APPS
が下記のようになっているか確認します。
任意の任意のプロジェクト名ディレクトリ/settings.py
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
- データベースにテーブルを作成します。
docker-compose exec web python manage.py migrate
- 静的ファイルディレクトリを定義します。
任意の任意のプロジェクト名ディレクトリ/settings.py
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
- 静的ファイルを配信するディレクトリに集めます。下記のコマンドを実行します。
docker-compose run web python manage.py collectstatic --noinput
- 管理者ユーザーを作成します。下記のコマンドを実行し、任意のuser名とパスワードを入力します。
docker-compose exec -it web python manage.py createsuperuser
展望
- Django REST Frameworkと併用して画面とAPIを分割してマイクロサービスを構築する。
まとめ
docker
で環境構築するのは、各フレームワーク、ミドルウェアの仕様を押さえてない嵌ることを思い知りました。今回で、Docker
+ Django
の組合せで環境構築出来るようになったので個人プロジェクトの開発をどんどん進められそうです。展望にも書きましたが、マイクロサービス構成を容易に出来るのもDocker
のメリットなので挑戦したいと思います。公開している情報で誤りなどがありましたらご指摘頂ければ調査して修正していきたいと考えていますので、よろしくお願いします。