Docker with PyCharm
経緯と結果
Docker Desktop for Windowsのインストールに続き、普段の個人開発環境にDockerを導入してみようということで、PyCharmのインタプリタにDockerで作った環境を用いてみました。
尚、以下のような注意点があり、
- PyCharmProでないとDockerとの連携機能が使えない
- Dockerfile単体でインタプリタ作成 → PyCharmがなぜか固まる(バージョン2019で発生確認)
- Docker composeでインタプリタ作成 → skelton updateが永遠に終わらない(バージョン2019で発生確認)
結果として、PyCharmProの2020版でやっとこの機能を使うことができました。
ただ、コンテナの起動停止を伴うせいか、ローカルのインタプリタの利用と比べて、プログラムの実行・デバッグの停止が数秒ずつ遅くなってしまいました。またライブラリを追加した際に、キャッシュの削除が必要になるのも面倒そうです。。
Dockerfileの作成
Python環境が構築されるコンテナを定義します。
FROM python:3.8 ADD . /var/pycharm/prj WORKDIR /var/pycharm/prj RUN pip install -r ./requirements.txt
FROM python:3.8
- ベースイメージとしてpython:3.8を指定(親イメージを持たないイメージをベースイメージと呼ぶ)
ADD . /var/pycharm/prj
- ADD [src] [dist] であり、ビルドコンテキストからみた[src]を、Dockerイメージ内の[dist]に追加.
WORKDIR /var/pycharm/prj
docker-compose.yml
version: '3.8' services: app: build: context: ../ dockerfile: ./docker/Dockerfile volumes: - '../:/var/pycharm/prj' container_name: python environment: - COMPOSE_PROJECT_NAME='sandbox' tty: true working_dir: '/var/pycharm/prj'
services
: docker-composeを通して構築されるサービス(コンテナ?)を定義app
: サービス名の任意の名前version
: docker-composeのバージョンbuild
: ビルドコンテキストとしてDockerに送信するディレクトリの指定(context)とビルドに用いるDockerファイルの指定volume
: ボリューム(コンテナ間で共通してアクセス可能な領域)のマウント。host_dir : docker_dirという対応。ここではPyCharmのプロジェクト内のファイル(../)が/var/pycharm/prj以下に配置されるようになっている。
インタプリタの作成
こちらを参照。
追加ライブラリのインストール
- requirements.txtを更新
- イメージの再作成
docker-compose -f ./docker/docker-compose.yml build
これでPython interpreterを見るとライブラリが追加されてると思います。
一方、エディター上ではimportしてもライブラリが無いというエラーが出たままになったりします。
これはキャッシュの削除で直りました。