この記事は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.ymlDockerfileの中身
% 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 psycopg2docker-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.icoweb画面確認
http://0.0.0.0:8000 にアクセスする
ロケットの画面が見えれば成功うまくいかない場合は、djangoのバージョン周りを確認すると良いかも