😊

Docker×Django×PostgreSQLの環境構築(備忘録)

2021/11/01に公開

始める前に

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にイメージを定義します。

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ファイル作成

docker-compose.yml

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

// 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/ にアクセス

django-success

起動成功!

アプリが起動成功です!

Discussion