【Django】PyCharmでDjangoのコンテナ(Docker)開発環境をサクっと構築する

#はじめに
普段業務でPyCharmを愛用しているのですが、Djangoコンテナ開発環境の構築について調べるのに少し時間がかかったので、最小構成で構築する手順を投稿します。

※この記事は[PyCharm Professional](https://www.jetbrains.com/ja-jp/pycharm/download/)（有料　無料期間30日有り）専用機能の紹介です。
無料でやりたい方は別記事で[VSCodeを使ったコンテナ開発環境構築](https://qiita.com/mth1209/items/be2325deb65a30fac65e)を紹介していますのでそちらをご覧ください。VSCodeには強力な拡張機能が多くあるのでDjangoの開発にも十分使えます。

#事前準備
###１．Djangoプロジェクトの作成
※既に開発中のソースがある方はそれを使ってもOKです
今回はPythonインストール済みの環境で以下コマンドから作成したシンプルなDjangoアプリを使用します。


```cmd
> pip install django
> django-admin startproject sampleApp
> cd sampleApp
sampleApp> python manage.py migrate
```

###２．Dockerfileの作成
Djangoアプリを作成したフォルダに以下内容のDockerfileを作成します。

```Dockerfile
FROM python:3.8

# 必要なパッケージがある場合インストール
# RUN apt install ~~~

RUN pip intall django
```

###３．docker-compose.ymlの作成
同じくDjangoアプリを作成したフォルダに以下内容で作成します。

```docker-compose.yml
version: '3'
services:
  app:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - './:/app/sampleApp'
    working_dir: '/app/sampleApp'
    container_name: sampleApp
    privileged: true
    tty: true
```

準備は以上です。
ここまでのディレクトリ構成は以下の通りです。

```
Django-docker-sample-pycharm　#今回のワークスペースフォルダ
|   docker-compose.yml
|   Dockerfile
|
\---sampleApp
    |   db.sqlite3
    |   manage.py
    |
    \---sampleApp
        |   asgi.py
        |   settings.py
        |   urls.py
        |   wsgi.py
        |   __init__.py
```

#リモートインタープリタの設定
ワークスペースフォルダをPyCharmで開きます。
続いて[File]→[Settings]から[Python Interpreter]を選択し、インタープリタの追加画面を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/36f9ffb0-5e4b-79be-4d7b-a1b65c2a1c18.png)

Docker Composeを選択し、[Server]新規作成画面を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/7b81ef4c-5be2-5ff2-6c50-d860ce4c709d.png)

特に何も変更せずOKで作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/40c03817-f12e-412c-e23e-53bf1eca49f3.png)

続いて[Service]のプルダウンから[app]を選択し、OKで設定を完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/ffaa625a-5a99-cbad-8bbd-0b3e2176816f.png)

インタープリタの設定画面でリモートインタープリタが表示されていればOKです。
Dockerfileで「pip install django」を実行していたのでパッケージの一覧にDjangoが表示されていますね。
OKで設定を完了させましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/98146416-2fc2-000b-7a69-2d21d2749eb2.png)

これで「このプロジェクトではワークスペースフォルダ直下にあるdocker-compose.ymlから作成されたコンテナのインタープリタを使用する」という設定が完了しました:cat2:

#いざ実行！
ここからはいつもの手順でrunserverしていきましょう。

[File]→[Settings]からDjangoの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/8bdcf81e-4a64-796b-0e15-d6491d3ef683.png)

[Add Configurations]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/b9abd565-113b-5236-407e-bfc86d48f086.png)

[＋]→[Django Server]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/df8fda68-469c-1f32-8b31-e3909dc4230d.png)

[Name]（任意）と[Host]（0.0.0.0）を設定してOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/8bfd78c0-3a4b-47d2-e846-3e713168ed37.png)

実行！隣の虫マークのボタンからデバッグも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/7c1d0fca-513c-c55e-a4f9-ca09de0d6fd2.png)

ブラウザから<http://localhost:8000>にアクセスしてDjangoテストページが表示されればOK!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/432057cd-5b8a-c5dc-9bf0-6e37c77a773b.png)

コンソールを見るとsampleAppコンテナ内で実行されていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/83c53b4d-21b5-d90f-c670-de4c01b09396.png)

デバッグモードではもちろんブレークポイントも使えます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/7a077238-c8ff-5aee-f462-969662fdbb88.png)

こんなに簡単にリモートインタープリタが使えるなんてさすが有料機能ですね。
これでコンテナを使った開発も捗りそうです:cat2: