LoginSignup
9
9

More than 5 years have passed since last update.

すぐ始められる Django on Docker

Last updated at Posted at 2018-12-16

きっとうまく行く Django on Docker

サクッとやりたいもののなんだかんだつまづく Docker 。

以下では、
- Django
- PostgreSQL
な開発環境を Docker で構築する手順を記します。

また、以下の Docker 構成は、開発環境のみを想定し、本番までのデプロイは想定していません。

docker-compose インストール

以下の URL を参考にインストールしてください。
https://docs.docker.com/docker-for-mac/install/

$ docker --version
Docker version 17.03.0-ce, build 60ccb22

$ docker-compose --version
docker-compose version 1.11.2, build dfed245

以上のようになればインストール完了です。

Django プロジェクトを動かすぞ

https://github.com/kyon-bll/Django-on-Docker
こちらのリポジトリをクローンしてきます。以下は、このリポジトリ内で作業してください。

Django 用の Docker イメージを Dockerfile から作成

$ docker-compose build

ざっくり以下のようなことをやっています。

  1. Python のイメージをダウンロード
  2. ダウンロードしたイメージに pip を用いて requirements.txt に記述のある django パッケージをインストール

Django プロジェクトを作成

$ docker-compose run web django-admin startproject django_project_name .

最後の . を忘れないように注意してください。

このコマンドで、 Django プロジェクトに関するファイルが作成されます。
1. django_project_name ディレクトリ
2. manage.py ファイル

また、docker-db-data ディレクトリには PostgreSQL のデータが配置されます。

起動

$ docker-compose up

http://localhost:8000/ にアクセスして、以下の画面が表示されれば完了です。
image.png

DB 設定

django_project_name ディレクトリ内の settings.py の DATABASES の記述を PostgreSQL 用に書き直します。

settings.py
...
# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}
...
$ docker-compose exec web python manage.py migrate

migrate に成功すれば完了です。

以降の操作

# docker コンテナ停止
$ docker-compose down

# pip インストール, requirements.txt 更新
$ docker-compose exec web pip install {パッケージ名}
$ docker-compose exec web pip freeze > requirements.txt 

# manage.py コマンド
$ docker-compose exec web python manage.py createsuperuser
$ docker-compose exec web python manage.py makemigration
$ ...

その他の設定箇所とか

  1. Django のバージョン指定: requirements.txt でバージョンの指定をする
  2. Python のバージョン指定: Dockerfile の1行目
  3. PostgreSQL のバージョン指定: docker-compose.yml の17行目
  4. apt-get でのパッケージインストール: Dockerfile コメントアウト箇所参照

wait-for-db.sh て何

DB の準備ができる前に Django から DB へアクセスがあると、エラーで動かなくなってしまうのを防いでいます。
docker-compose.yml の depends_on の記述によって、DB -> Django の順に起動はしてくれるのですが、DB の準備が整うまでは待ってくれないので、環境によってこれがないとうまく動かないことがあります。というか自分はほぼ毎回そうなります。なんとかもうちょっと綺麗に解決したい。

9
9
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
9
9