PyCharmでの開発でDockerを使う

Posted by rhoboro on 2017-01-21

気づいたら新年一発目をまだ書いてなかった(笑)
昨日、Python mini hack-a-thon 雪山合宿 2017@shimizukawaさんがPyCharmでDockerを使っているという話をしていたので、自分でも試してみました。

手順

ざっくりした手順は下記。

  1. Docker環境の準備
  2. Interpreterとして、実行するPythonが入ったImageを指定
  3. Run時にそのInterpreterを指定する

Docker環境の準備

まず、Dockerインストール済みの環境を用意します。 ここで、Macの方はDocker for Macではなく、docker-machineなどでVMを作成し起動しておいてください。

[alpaca]~/github/blog % docker-machine start
Starting "default"...
(default) Check network to re-create if needed...
(default) Waiting for an IP...
Machine "default" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
[alpaca]~/github/blog % docker-machine env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/rhoboro/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
export DOCKER_API_VERSION="1.24"
# Run this command to configure your shell:
# eval $(docker-machine env)
[alpaca]~/github/blog % eval $(docker-machine env)

Dockerの実行環境ができたら、Python環境の入ったImageを用意します。

[alpaca]~/github/blog % docker pull library/python:3.6
[alpaca]~/github/blog % docker pull library/python:2.7
[alpaca]~/github/blog % docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
python              3.6                 775dae9b960e        2 days ago          687 MB
python              2.7                 cdce25ce87a0        2 days ago          676 MB

PyCharmでInterpreterの設定

Preferences > Project Interpreterで、歯車マーク内のAdd Remoteを選択して、Dockerを指定します。

add_remote select_docker

Newをクリックして、API URLに先ほど用意したDocker環境のホストとポートを指定します。 指定すると自動で接続を始め、Connection Successfulと表示されたらOK。

docker

あとは、使いたいImageを指定するだけです。

images

Run Configurationの設定

Python interpreterで先ほどの設定を指定すればOKです。
また、Docker container settingsを見ると、-v /Users/rhoboro/github/docker:/opt/projectと書かれており、この設定で自動でマウントしてくれます。

run_configuration

実行

ここまでできたら、あとはRunすれば、コンテナが起動して、その中でコードを実行してくれます。
今回は下記のようなコードで確認します。

f = open("docker.txt", "a")
f.write("docker\n")
f.close()

初回はdocker.txtが作られ、

run_01

2回目以降は上書きされていく。

run_02

もちろんブレークポイントを張って、デバッグも可能。
Show Python PromptからInterpreterを起動することもできます。

debug

はまったとこ

まだDocker for Macは使えない

API URLにはUnixドメインソケットの指定ができず、Docker for Macでは使えませんでした。 ちなみに、ここを見ると、IntelliJ IDEAの2.5にそれっぽい記載があったので、PyCharmでもいずれ使えるようになるかと。

2.5.0:

IDEA-159223 Support direct connection via unix:// on Mac OS X

どうしてもDocker for Macで使いたい方はhttpに変換して使うということもできそうではありますが、そこまでする価値があるかどうか。。。
Connecting via unix-socket to the docker-daemon

DigitalOceanはなぜか使えなかった...

せっかくdocker-machineを使ったので、どうせならリモートのマシンを使ってみよう!と思って試してみましたが、 ここでフリーズしたり、

dg_01

ここでフリーズしたりとうまくいかなかったので諦めました。。。

dg_02

まとめ

一度慣れてしまえば、簡単に利用できていいですね。
まだまだ、痒いところに手が届かない感はありますが、Jetbransは活発に開発してくれているので気長に待てばいいかなと思います。

tags: PyCharm, Docker