yoshiislandblog.net
元営業の駆け出しアラサーSEが、休日にMACと戯れた際の殴り書きメモ。日々勉強。日々進歩。

この記事は3年以上前に書かれた記事で内容が古い可能性があります

Django on Docker超入門1(ロケットの画面まで)

2018-11-09
Quickstart: Compose and Django
上記リンクを参考にセットアップ


前提

MacOS 10.13.3 Docker Version 18.06.1-ce-mac73 Dockerのインストール方法はこちらを参考に サクッとDocker始める

必要ファイルを作成

適当な作業ディレクトリを作成
% mkdir django_work
% cd django_work

配下に以下のようなファイルを作成

% ls
Dockerfile          docker-compose.yml

Dockerfileの中身

% cat Dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

docker-compose.ymlの中身

% cat docker-compose.yml
version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

こちらインデントおかしくなっていると以下のようなエラーが出るので注意
※TinyMCE Advancedを設定したつもりなのだが、なぜかスペースが挿入されていないので、よしなに解釈ください、、

ERROR: In file './docker-compose.yml', service must be a mapping, not a NoneType.

requirementsも作っておく

% cat requirements.txt
Django
psycopg2

docker-compose run

以下コマンドでコンテナを立ち上げる
myappはサイト名なので、なんでも良い

% sudo docker-compose run web django-admin.py startproject myapp .

Databasese設定編集

./myapp/settings.pyのDATABASESに以下を記載する。

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

コンテナ立ち上げ

docker-compose upで、コンテナが2つ立ち上がる(web・db)

% docker-compose up
django_work_db_1 is up-to-date
Starting django_work_web_1 ... done
Attaching to django_work_db_1, django_work_web_1
db_1   | The files belonging to this database system will be owned by user "postgres".
db_1   | This user must also own the server process.
db_1   |
...
...
db_1   | 2018-11-09 06:38:15.475 UTC [1] LOG:  database system is ready to accept connections
...
web_1  | Django version 2.1.3, using settings 'myapp.settings'
web_1  | Starting development server at http://0.0.0.0:8000/
web_1  | Quit the server with CONTROL-C.

database system is ready to accept connections
Starting development server at http://0.0.0.0:8000/
の二つの文言が見えたら無事に立ち上がっている証拠

HOSTS ALLOWにアクセスするIPを追加しておく
クオテーションでくくらないとエラーになるので注意

% cat myapp/settings.py | grep ALLOW
ALLOWED_HOSTS = ['0.0.0.0','127.0.0.1']

これを入れておかないと、以下のように怒られる

web_1  | Invalid HTTP_HOST header: '0.0.0.0:8000'. You may need to add '0.0.0.0' to ALLOWED_HOSTS.
web_1  | Bad Request: /favicon.ico

web画面確認

http://0.0.0.0:8000 にアクセスする
ロケットの画面が見えれば成功

うまくいかない場合は、djangoのバージョン周りを確認すると良いかも

続きは Django on Docker超入門2(管理画面ログインまで)