PyCharmを介して、リモートRaspbian上のDockerコンテナ内でPythonファイルを実行する
前回からの続きです。今回はpycharmを介して、リモートdockerコンテナ内でpythonファイルを実行します。少しややこしいのでまとめると以下を行います。
ファイルの編集はローカル上で行うが、これをリモート上と同期させる
実行時は、リモートのdockerにあるpythonインタプリタをpycharmに認識させて実行する
リモートのdockerはリモート上のファイルを認識して実行する
dockerを使うかdocker composeを使うか以外はこちらと同一です。pycharmが直接リモート上のコードを編集できれば良い気がするのですが、なぜかこれはできません。
Raspbian上のDockerの設定
Dockerのサービスにアクセスするには
Dockerはクライアント・サーバモデルのアプリケーションであり、dockerデーモン(サーバ)に対して処理を要求を行うことでdockerを利用することができます。dockerコマンドを通す際などデフォルトではUnixソケットを通して通信を行っていますが、設定を行えばTCPソケットを通して通信を行うこともできます。これを利用するとローカルからリモート上のdockerデーモンに処理を要求することができます。この辺りのdockerの仕組みに関してはこちらのサイトが参考になりました。ちなみに、ローカルのUnixソケットをリモート上のUnixソケットにフォワードすることでも、リモートからサーバのdockerを動かすこともできるみたいです。
設定
参考サイトそのままですが、以下を実行することで、remoteのdockerにtcpソケットを通して処理を要求することができます。(本来は、通信を行う際に証明書を利用しないと本番環境では危ないないらしいですが、それはまた別途設定することにしましょう。この辺りはこちらと公式のこちらが詳しいです。)
サーバ上で以下を実行することで、TCPソケットを介してpycharmからdockerを叩けるようになります。
# 設定の修正
$ sudo vim /etc/systemd/system/docker.service.d/startup_options.conf
# 設定への記載内容
$ cat /etc/systemd/system/docker.service.d/startup_options.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:// -H tcp://0.0.0.0:2376
# 読み込み&再起動
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker.service
# 設定の確認
# "/usr/bin/dockerd -H unix:// -H tcp://0.0.0.0:2376"があればOK
$ service docker status
Redirecting to /bin/systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/docker.service.d
└─docker-bridge-yj.conf, startup_options.conf
Active: active (running) since Tue 2019-06-18 12:54:47 JST; 4 days ago
Docs: https://docs.docker.com
Main PID: 4595 (dockerd)
Tasks: 26
Memory: 9.2G
CGroup: /system.slice/docker.service
└─4595 /usr/bin/dockerd -H unix:// -H tcp://0.0.0.0:2376
PyCharmのリモートとローカルのファイルの同期
Preference>Build, Execution, Deployment>DeploymentのConnectionタブから同期の設定を行います。
Host: Raspberry piのIPアドレス、User name: raspbianのユーザ名、Passwordにユーザのパスワードを入力します。Root pathはRaspberry Piのどこを"ルート"として認識させるかを設定します。(つまりこれはRaspberry Piのルートパス/とは一致している必要はありません。)
Web server URLにはhttps://[Raspberry PiのIPアドレス]と入力します。
続いて、Mappingタブからの設定も行います。
こちらのLocal path: で同期したいローカルフォルダを設定します。また、Deployment pathで先ほど設定したRoot pathからの相対パスとして、同期したいパスを指定します。
Tools>Deployment>OptionsからUpload changed files automatically to default serverにチェックをつけておけば、ファイルを書き換えると同時に、勝手に同期を行ってくれて便利です。
Docker-composeを利用したPythonインタプリタの設定
公式はこちら。
Dockerの設定
Preference>Build, Execution, Deployment>Deployment>DockerでリモートのDockerを追加します。TCPソケットは、tcp://[IPアドレス]:[先ほど設定した番号]です。
Preference>Project>Project Interpreterから歯車のマークをクリックし、Project Interpreterを追加します。Serverで先ほど設定したDockerを選択します。また、Configuration file(s)には自分で作成したdocker-compose.ymlを設定します。
以上でpycharm上からRUNをすると、dockerコンテナ内のpythonインタプリタがうごくはずです。
Author And Source
この問題について(PyCharmを介して、リモートRaspbian上のDockerコンテナ内でPythonファイルを実行する), 我々は、より多くの情報をここで見つけました https://qiita.com/K-USK/items/39719707006c7fff2f21著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .