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

## 転載元
当記事は以下ブログからの転載です。
[TECH BACK](https://techback.info/django-environment-in-docker/)

## はじめに
[前回](https://qiita.com/teckback/items/c048faef648da6c83058)、Windows10 Home環境にDockerのインストールができたので、早速Django環境を作っていこうかと。 Dockerのページに、解説ページがあったので、そちらを参考にすすめていきます。 
[http://docs.docker.jp/v1.9/compose/django.html](http://docs.docker.jp/v1.9/compose/django.html)
## プロジェクトの構成ファイル郡を作りましょう

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

コチラは適当に。分かりやすいのを作っとけばOKでしょ。 こんなフォルダでいいかな～ E:\\docker\\django_env 
[![](http://techback.info/wp-content/uploads/2020/05/img_5ec951f86cf59.png)](http://techback.info/wp-content/uploads/2020/05/img_5ec951f86cf59.png)

### 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コマンドでインストールするものを、ここに記載しておきます。 内容は 

```
<span class="n">Django
psycopg2</span>
```

で、保存しておきましょう。まずは、動かすだけなので、コレで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つ作りました。 [![](http://techback.info/wp-content/uploads/2020/05/img_5ec95c50e157e.png)](http://techback.info/wp-content/uploads/2020/05/img_5ec95c50e157e.png)

## 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フォルダができてますね。 [![](http://techback.info/wp-content/uploads/2020/05/img_5ec964826d254.png)](http://techback.info/wp-content/uploads/2020/05/img_5ec964826d254.png)

## データベースに接続

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しろと。 [![](http://techback.info/wp-content/uploads/2020/05/img_5ecaa9eb1d648.png)](http://techback.info/wp-content/uploads/2020/05/img_5ecaa9eb1d648.png)

docker-compose.yml にパスワードを追記してやります。 

```
db:
  image: postgres
<span style="color:">  environment:</span>
<span style="color:">   POSTGRES_PASSWORD: Password</span>
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,
<span style="color:">'PASSWORD': 'Password'</span>
}
}
```

### そして、再度

```
docker-compose up
```

ん、、、、今度はうまく行ったみたい。 
[![](http://techback.info/wp-content/uploads/2020/05/img_5ecaae0708d35.png)](http://techback.info/wp-content/uploads/2020/05/img_5ecaae0708d35.png)

http://localhost:8000/ に、アクセスしてみると。。。 
[![](http://techback.info/wp-content/uploads/2020/05/img_5ecaae52e4162.png)](http://techback.info/wp-content/uploads/2020/05/img_5ecaae52e4162.png)

## 感想とか

ん～思ったより早く行ったな。といった感想。 自分でイチから環境作った時は、結構時間掛かった記憶。(もう二度とやりたくないとか、ちょっと思ってるぐらい) これなら、思い立ったら簡単にプロトタイプ作っちゃおうかな～とか思ったりできるよね。 
### 今後

自分のLocal環境にはDocker環境できましたんで、 1. ちょっとしたサンプルアプリをLocalで開発
2. AWSにDocker受け入れ環境を作って、デプロイ！

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