PyCharm + Docker + Python3.7の開発環境構築メモ

## Python3.7の環境をDocker for Macで構築
### 1. Docker for Macのインストール
[Install Docker for Mac \| Docker Documentation](https://docs.docker.com/docker-for-mac/install/)
Docker IDの登録もしてください。

### 2. docker-composeインストール
```:terminal
$ brew install docker-compose
```
### 3. ディレクトリ構成
app
├── docker
│   ├── Dockerfile
│   └── docker-compose.yml
├── hello.py (hello world用のスクリプト)
└── requirements.txt

### 4. docker-compose.ymlの作成
公式のpython3.7イメージを使用します。
[DockerHub python](https://hub.docker.com/_/python/)

```yml:docker-compose.yml
version: '3'
services:
  app:
    build:
      context: ../
      dockerfile: ./docker/Dockerfile
    image: python:3.7
    volumes:
      - '../:/var/www/html'
    container_name: python
    tty: true
    working_dir: '/var/www/html'
```
contextやvolumesなどはディレクトリ構成に合わせて書きます。

### 5. Dockerfileの作成
dockerイメージをbuildする時にpip installでrequirements.txtに書かれたライブラリがインストールされる。
今はほとんど書いてないが、後々必要なライブラリが増えてくるかなと思いこの形に。
![スクリーンショット 2018-10-26 14.29.21.png](https://qiita-image-store.s3.amazonaws.com/0/124843/779622a0-6184-032d-a1d1-0ffd562703d4.png)

```Dockerfile:Dockerfile
FROM python:3.7
ADD . /var/www/html
WORKDIR /var/www/html
RUN pip install -r ./requirements.txt
```

### 6. ビルド
docker-compose up コマンドについて
[up — Docker-docs-ja 17.06.Beta ドキュメント](http://docs.docker.jp/compose/reference/up.html)

```:terminal
tomitz:~/workspace/app/docker
$ docker-compose up -d --build
Building app
Step 1/4 : FROM python:3.7
3.7: Pulling from library/python
bc9ab73e5b14: Pull complete
193a6306c92a: Pull complete
e5c3f8c317dc: Pull complete
a587a86c9dcb: Pull complete
72744d0a318b: Pull complete
3493e487c18d: Pull complete
a89e0510fd87: Pull complete
2100d277cd6f: Pull complete
...省略
```

### 7. 確認
コンテナが立ち上がったか確認

```:terminal
tomitz:~/workspace/app/docker
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
e2b390cf63e4        python:3.7          "python3"           4 minutes ago       Up 4 minutes                            python
```

コンテナに入ってみる

```:terminal
tomitz:~/workspace/app/docker
$ docker exec -it python /bin/bash
root@e2b390cf63e4:/var/www/html#
```

## PyCharmのリモートインタプリタにDockerのコンテナを設定
### 1.Project Interpreterの新規作成
PyCharm > Preference > Build, Execution, Deployment > Docker
からDocker for Macと接続します。

![スクリーンショット 2018-10-26 14.29.21.png](https://qiita-image-store.s3.amazonaws.com/0/124843/a7b6f70f-3202-6535-87ca-15301a90fdc4.png)

するとProject InterpreterにDockerコンテナが追加されてると思うので、それを設定してApplyするだけです。

![スクリーンショット 2018-10-26 14.32.12.png](https://qiita-image-store.s3.amazonaws.com/0/124843/1934468d-29d0-ba7c-be2c-07abf4f7ac87.png)

### 2. PyCharmからコンテナに接続してみる
エディタに戻ってexecしてみます。
![スクリーンショット 2018-10-26 14.34.53.png](https://qiita-image-store.s3.amazonaws.com/0/124843/6e3bbe88-dd7c-5a7e-05d0-bffb17cd75d4.png)

createを押すとコマンド入力画面が出てきます。
![スクリーンショット 2018-10-26 14.36.07.png](https://qiita-image-store.s3.amazonaws.com/0/124843/e35013f3-fccf-254b-4a30-7aa405fc9510.png)

こんな感じです。
![スクリーンショット 2018-10-26 14.36.22.png](https://qiita-image-store.s3.amazonaws.com/0/124843/b5363e70-7860-26b6-979f-d00571848c41.png)

あとは試しにスクリプトを実行してみたりしてください。

```:terminal
root@e2b390cf63e4:/var/www/html# python hello.py
Hello
```

### まとめ
- DockerでPython3.7の実行環境を構築した
- Dockerコンテナ内の実行環境をPyCharmのインタプリタとして設定した
- デバッグなどがDockarコンテナ内の環境で実行できる