2
3

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.

【Python】DockerでDjangoの開発環境を構築

Last updated at Posted at 2020-08-28

DockerとDocker-composeを使って、DjangoとpostgreSQLの開発環境を構築していきます。http://localhost:8000を叩いて下記画像の画面が表示されるまで。

スクリーンショット 2020-08-28 13.44.31.png

Djangoのインストール

Djangoがすでに入っている方はしなくていいです。

pip install Django

Dockerのインストール

ここからDockerをインストール

バージョンの確認

$ docker --version
Docker version 18.09.2

Docker-composeのインストール

以下のコマンドでDocker-composeをインストールします。

$ curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

$ chmod +x /usr/local/bin/docker-compose

バージョンの確認

$ docker-compose --version
docker-compose version 1.23.2

Django用のディレクトリを作成

$ mkdir docker-demo-with-django && cd docker-demo-with-django
$ mkdir app && cd app

Pipfileをappに作成

$ vi Pipfile

/app/Pipfile

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
Django = "==3.1"

[requires]
python_version = "3.7.5"

pipenvを導入

以下のコマンドで、インストールからログインまで行います。

$ pip install pipenv
$ pipenv install
$ pipenv shell

Djangoプロジェクトのスタート

以下のコマンドで、プロジェクトのスタートから、サーバーの起動までを行います。

$ django-admin.py startproject django_demo .
$ python manage.py migrate
$ python manage.py runserver

Dockerコンテナの構築

ここから、Dockerコンテナの設定をやっていきます。

Dockerfile

Dockerfileを作成

$ vi Dockerfile

app/Dockerfile

# 公式からpython3.7 on alpine linuxイメージをpull
FROM python:3.7-alpine

# 作業ディレクトリを設定
WORKDIR /usr/src/app

# 環境変数を設定
# Pythonがpyc filesとdiscへ書き込むことを防ぐ
ENV PYTHONDONTWRITEBYTECODE 1
# Pythonが標準入出力をバッファリングすることを防ぐ
ENV PYTHONUNBUFFERED 1

# psycopg2のインストール
RUN apk update \
    && apk add --virtual build-deps gcc python3-dev musl-dev \
    && apk add postgresql-dev \
    && pip install psycopg2 \
    && apk del build-deps

# Pipenvをインストール
RUN pip install --upgrade pip \
&& pip install pipenv

# ホストのpipfileをコンテナの作業ディレクトリにコピー
COPY ./Pipfile /usr/src/app/Pipfile

# pipfileからパッケージをインストールしてDjango環境を構築
RUN pipenv install --skip-lock --system --dev

# ホストのカレントディレクトリ(現在はappディレクトリ)を作業ディレクトリにコピー
COPY . /usr/src/app/

# entrypoint.shを実行
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]                 

docker-compose.ymlを作成

vi ./../docker-compose.yml

docker-demo-with-django/docker-compose.yml

version: '3.7'

services:
    # サービス名は自由に設定
    django:
        # appディレクトリの中から`Dockerfile`を探す
        build: ./app
        # サービス起動後に入力されるコマンドを設定
        command: python manage.py runserver 0.0.0.0:8000
        # データを永続化させる場合の設定。`host:container`でパスを記載
        volumes:
            - ./app/:/usr/src/app/
        # 開放するポートを指定。`host:container`でポートを記載
        ports:
            - 8000:8000
        # 環境変数を指定
        environment:
            # 1ならデバックモード
            - DEBUG=1
            - SECRET_KEY=hoge
            - DATABASE_ENGINE=django.db.backends.postgresql
            - DATABASE_DB=django_db
            - DATABASE_USER=django_db_user
            - DATABASE_PASSWORD=password1234
            - DATABASE_HOST=postgres
            - DATABASE_PORT=5432
        # 接続するサービスを指定
        depends_on:
            - postgres

    postgres:
        # 公式からイメージをpull
        image: postgres:11.4-alpine
        # データベースの永続化
        # ホストのディレクトリにマウントしない様に、先頭に`./`をつけない
        volumes:
            - postgres_data:/var/lib/postgresql/data
        # su権限を持つ、指定されたユーザーと同じ名前のデータベースを作成
        # valueはdjangoサービスで指定したものと同じ様に記載する
        environment:
            - POSTGRES_USER=django_db_user
            - POSTGRES_PASSWORD=password1234
            - POSTGRES_DB=django_db

# トップレベルに書く「名前付きvolumes」は複数サービスから参照できる
volumes:
    postgres_data:         

#!/bin/sh

if [ "$DATABASE" = "postgres" ]
then
    echo "Waiting for postgres..."

    while ! nc -z $DATABASE_HOST $DATABASE_PORT; do
      sleep 0.1
    done

    echo "PostgreSQL started"
fi

python manage.py flush --no-input
python manage.py migrate

exec "$@"

ビルドと起動

$ docker-compose up -d --build

以下のURLに接続し、接続できたら、構築完了
http://localhost:8000

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?