1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

docker-compose×Django×Postgresqlの開発環境構築

Last updated at Posted at 2021-10-01

目的

公式リファレンスを参考にしてdocker-compose×Django×Postgresqlの開発環境構築をする。

環境

MacBook Pro(intel)
Docker Desktop
Django3.2
python3.8.5
postgres12

前提

  1. docker,docker-composeがインストールされている状況
  2. 公式リファレンスを参考にしています
  3. 利用するバージョンは公式とは違いますが、2021年10月時点で動作が確認出来ているものです。

スタート

プロジェクト用の空のディレクトリを作成

% mkdir docker-compose-test
% cd docker-compose-test

作成したプロジェクトディレクトリ内にDockerfileを作成する。

% vi Dockerfile

FROM python:3.8.5 
ENV PYTHONBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

Dockerfileの中身

FROM: ベースとなるイメージを指定します。

ENV:永続的な環境変数を設定します。
今回はPYTHONBUFFERED 1としました。これは標準エラー出力をバッファに溜め込まない指示をしています。

RUN:イメージ作成時に実行。イメージ作成後に/codeというディレクトリを作成しています。

WORKDIR:各種命令を実行する際のカレントディレクトリを指定します。 RUNで作成したcodeディレクトリがWORKDIRとなります。

ADD:ローカルファイルやディレクトリをコピーし、コンテナ内のファイルシステム上にある指定されたパスに追加します。ここでは作成したcodeディレクトリにコピーします。また、URLを指定することも出来ます。この場合はリモートイメージをcodeディレクトリにダウンロードしてADDすることが出来ます。※requirements.txtは後ほど作成します。

RUN:FROMで指定したイメージ上で、シェル形式のコマンドを実行します。ここでは、後ほど作成するrequirements.txtに記載したシステムをpipでインストールしています。

ADD:カレントディレクトリ.を codeディレクトリにコピーしています。

以上

作成したら保存して閉じます。

requirements.txtの作成

Dockerfileと同じディレクトリにrequiremenrs.txtを作成します。
% vi requirements.txt

requirements.txt
Django=3.2
psycopg2

requirements.txtの中身

Dockerfileで支持したrequirements.txtをここで作成しています。
Django=3.2:インストールするDjangoのバージョンを指定。

psycong2:postgresqlのドライバーを指定しています。

作成したら閉じます。

docker-compose.ymlの作成

% vi docker-compose.yml

docker-compose.yml
version: '3'

services:
  db:
    image: postgres
    ports:
      - "5432"
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

docker-compose.ymlの中身

version:docker-composeのバージョンを指定。

services:ここに作成するコンテナをを定義していきます。ここではdbとwebコンテナを作成しています。

db:使用するデータベースを指定します。ここではimageをpostgresを指定してます。
ports:DBコンテナとwebコンテナの接続ポートを指定しています。5432はpostgresqlのデフォルトのポート番号です。
enviroment:環境変数を定義しています。これもpostgresqlの設定になります。

web:webサーバーを指定しています。ここではDjangoに備わっている開発webサーバーの使用を前提としています。
build: Dockerfile のあるディレクトリのパスを指定します。この値が相対パスで指定された場合は、yml ファイル自身がある場所からの相対パスになります。また、ディレクトリは内容構築のため、Docker デーモンにも送られます。

command:docker-compose upでファイルを実行する時に実行するデフォルトのコマンドを指定しています。DockerfileでもCMDでコマンドを指定できますが、こちらはdocker runコマンド時(イメージをビルドする時)に実行する時に指定します。

volumes:パスをボリュームとしてマウントします。オプションとしてホスト側のパスを指定(ホスト:コンテナ)したり、アクセスモードを指定します(ホスト:コンテナ:ro)。ここではホスト側のカレントディレクトリとりもーと側のcodeディレクトリをvolumeとして共有することになります。

ports: ポートを公開(expose)します。ホストとポートを指定(ホスト:コンテナ)するか、コンテナのポートのみ指定します(ホスト側のポートはランダムに選ばれます)。

depends_on:コンテナの依存関係を指定します。ここではdbコンテナと依存関係を持っていることがわかります。

Djangoプロジェクトの作成

プロジェクトディレクトリに移動し、docker-compose runコマンドを実行しdocker-compose.ymlで定義したビルドコンテキストを実行しコンテナを作成します。

  1. % cd <プロジェクトディレクトリ>
  2. % docker-compose run web django-admin.py startproject composeexample .
    1. web サービスイメージがビルドされると Compose はこのイメージを起動し、コンテナ内でコマンド django-admin startproject を実行します。 このコマンドは Django に対して、Django プロジェクトを組み立てるファイルやディレクトリを生成することを指示するものです。
  3. コンテナが作成されているか確認
    1. % docker ps -a

Postgresqlの設定

Djangoプロジェクトが作成されたら、setting.pyを開いてDatabase設定を編集する。

settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

ここでの設定はpostgresqlの設定に準じて行います。

コンテナを起動

プロジェクトディレクトリに移動し、
% docker-compose upコマンドを実行してコンテナを起動する。

ブラウザーで127.0.0.1:8000にアクセスしてdjangoのデフォルトページが表示されれば成功です。\(^o^)/

ありがとうございました。

参考にさせていただいたページ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?