Djangoの環境をDocker使って作ってみますか

Docker

前回、Windows10 Home環境にDockerのインストールができたので、早速Django環境を作っていこうかと。

Dockerのページに、解説ページがあったので、そちらを参考にすすめていきます。

http://docs.docker.jp/v1.9/compose/django.html

プロジェクトの構成ファイル郡を作りましょう

プロジェクト用のフォルダ作成

コチラは適当に。分かりやすいのを作っとけばOKでしょ。

こんなフォルダでいいかな~

E:\docker\django_env

Dockerfileってのを作りましょう

作ったフォルダの直下に、Dockerfileという拡張子無しのファイルを作成します。
Djangoが動くサーバ(コンテナ)の設定を記載していきます。

そして、開いて編集

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

Documentだと、Python2.7でしたけど、今から作るなら3系ですね。

Python公式だと、https://www.python.org/

3.8が最新っぽかったので、そちらに変更。

requirements.txtを作成

またまた、作ったフォルダに requirements.txt というファイルを作りましょう。
今ファイルには、上記で作ったDjangoが動くコンテナに、使用するライブラリを記載していきます。Django環境を作る際にPipコマンドでインストールするものを、ここに記載しておきます。

内容は

Django
psycopg2

で、保存しておきましょう。まずは、動かすだけなので、コレでOKです。

今度は、docker-compose.ymlってファイルを作成

同じく、作ったフォルダ直下にdocker-compose.yml というファイルを作成

内容は、

db:
  image: postgres
web:
  build: .
  command: python manage.py runserver 0.0.0.0:8000
  volumes:
    - .:/code
  ports:
    - "8000:8000"
  links:
    - db

で、保存

ファイルの構成

今までの流れをやっていくと、こんな感じですね。

作ったフォルダの直下に、ファイルを3つ作りました。

Djangoプロジェクト作成

コマンドプロンプトで、先程作ったフォルダに移動します。

コマンドプロンプトでドライブ移動

ちょっと脱線しちゃいますが、、、

え~どうやるんだっけ~って、なったので一応記載。

C:\>e:

e:\>

移動したら、こんな感じね。

e:\docker\django_env>dir

e:\docker\django_env のディレクトリ

2020/05/24 02:21 <DIR> .
2020/05/24 02:21 <DIR> ..
2020/05/24 02:23 168 docker-compose.yml
2020/05/24 01:48 151 Dockerfile
2020/05/24 02:20 16 requirements.txt
3 個のファイル 335 バイト
2 個のディレクトリ 713,117,704,192 バイトの空き領域

e:\docker\django_env>

そしてフォルダに移動したら、コマンドを実行しましょう。

ちなみに、最後の「composeexample 」という所がプロジェクト名ね。今回は、サンプルのままで。

docker-compose run web django-admin.py startproject composeexample .

各種ダウンロードしますんで、結構時間かかります。。。

そして、実行後にフォルダを覗いて見ると

ちゃんと、composeexampleフォルダができてますね。

データベースに接続

composeexampleフォルダの下に、setting.pyがあるので、そいつを編集。

DATABASESの箇所をこんな感じに。

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

で、保存

よいよ、動かす

コマンドを実行

docker-compose up

あら、、エラーが

Starting django_env_db_1 ... done
Creating django_env_web_1 ... error

ERROR: for django_env_web_1 Cannot start service web: Cannot link to a non running container: /django_env_db_1 AS /django_env_web_1/db

ERROR: for web Cannot start service web: Cannot link to a non running container: /django_env_db_1 AS /django_env_web_1/db
ERROR: Encountered errors while bringing up the project.

django_env_db_1 が、動いてませんぜ~ってことですね。

Docker Dashboardを開いて、django_env_db_1 のLogsを見てみると、、

まずDBのInitializeしろと。

docker-compose.yml にパスワードを追記してやります。(赤文字を追加)

db:
  image: postgres
  environment:
   POSTGRES_PASSWORD: Password
web:
  build: .
  command: python manage.py runserver 0.0.0.0:8000
  volumes:
   - .:/code
  ports:
   - "8000:8000"
  links:
   - db

settings.py にも、パスワードを追加します。

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

そして、再度

docker-compose up

ん、、、、今度はうまく行ったみたい。

http://localhost:8000/ に、アクセスしてみると。。。

感想とか

ん~思ったより早く行ったな。といった感想。

自分でイチから環境作った時は、結構時間掛かった記憶。(もう二度とやりたくないとか、ちょっと思ってるぐらい)

これなら、思い立ったら簡単にプロトタイプ作っちゃおうかな~とか思ったりできるよね。

今後

自分のLocal環境にはDocker環境できましたんで、

  1. ちょっとしたサンプルアプリをLocalで開発
  2. AWSにDocker受け入れ環境を作って、デプロイ!

って感じでやってみますかね。