Docker×Django×PostgreSQLの環境構築(備忘録)
始める前に
dockerの公式に載っている方法で始めると間違いなく失敗するので、
最新版のDocker×Django×PostgreSQLの環境構築をここに備忘録として載せておきます。
また今回はnginxやgnicornといった本番環境で使用するソフトウェアは使用せず、
あくまでミニマムでアプリが動くような環境を構築します。
最終的ディレクトリ構成は以下になります。
backend /
┣myproject /(任意のプロジェクト名)
┃ ┣_pychache_ /
┃ ┣_init.py
┃ ┣asgi.py
┃ ┣setting.py
┃ ┣urls.py
┃ ┣wsgi.py
┣ docker-compose.yml
┣ Dockerfile
┣ manage.py
┣requirements.txt
それでは始めましょう。
Dockerファイル作成
まずDockerfileにイメージを定義します。
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
requirements.txtファイル作成
requirements.txtにdjangoとpostgresqlを接続するために必要なライブラリを記述します。
psycopgはPostgreSQLを使用する際に必要なライブラリです。
Django
psycopg2
docker-composeファイル作成
version: "3"
services:
db:
image: postgres
environment:
- "POSTGRES_USER=postgres"
- "POSTGRES_PASSWORD=postgres"
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
プロジェクトファイル作成
以下のコマンドでコンテナを一時的に作成し、プロジェクトフォルダを作成。
(myprojectの部分はお好みのプロジェクト名に変えてください。)
$ docker-compose run --rm web django-admin startproject myproject .
setting.pyを修正
現在のディレクトリにプロジェクトフォルダ(ここではmyproject)が作成されたら、
その中のsetting.pyを編集します。
デフォルトではデータベースの設定はsqlite3になっているので、PostgreSQLの設定に変更します。
// setting.py
~~~~
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
コンテナを立ち上げる
以下コマンドで db(データベース)とweb(djangoアプリ)のそれぞれのimageをコンテナに立ち上げます。
$ docker-compose up -d
サーバーを立ち上げる
$ python manage.py runserver 0.0.0.0:8000
最後は http://0.0.0.0:8000/ にアクセス
起動成功!
アプリが起動成功です!
Discussion