概要
Pythonのようなバージョン依存の強いライブラリが多い言語を用いる場合、システム化等の局面で「コンテナがあれば!」と思うことが多いのですが、私のように普段Windowsを使うユーザーは、開発環境としてコンテナを使おうとすると、GUIがそのままでは使えないことが大きな導入障壁になると思います。そこで、リモートデスクトップ接続やX window systemを設定し、以下①~③で示すような方法でGUI機能を活用できるpythonの開発環境コンテナを作ってみました。
以下でリポジトリやDockerのimageを公開しています。
https://github.com/Rosyuku/mydevenv_python
https://hub.docker.com/r/rosyuku/mydevenv_python
コンテナの説明
OS:Ubuntu Desktop 18:04
コンテナのOSはUbuntu Desktop 18.04を使っています。ベースイメージは日本語化処理やVNCの設定が実施されている「uphy/ubuntu-desktop-jp」を使わせていただきました。
https://hub.docker.com/r/uphy/ubuntu-desktop-jp
アカウント:Rootのみ
このコンテナは、Windows上に立てた開発環境のコンテナという位置付けで、セキュリティは考慮していません。そのためアカウントはRootのみです。パスワードはデフォルトでmypydevenvになっていますので、必要に応じてアカウントの追加やパスワードの変更をしてください。
インストールツール:gedit, git, tig, anaconda3(2020.02)
インストールしているツールはテキスト編集ソフトやgit関連のツール、及びanaconda3です。anaconda3はmatplotlibのフォントがtakaogothicになるようにしています。
サービス:ssh, xrdp, Jupyter
ベースイメージでインストールされているものを除き、上の3つが稼働するようになっています。sshはポート22000、xrdpはポート33890、Jupyterはポート8888でwindows側から接続できるようになっています。sshはパスワードログインを許可するようにしている他、X window関連の設定をしています。xrdpはvncサーバーとの連携の設定をして、デフォルトの設定でログインできるようにしています。Jupyterはパスワードがpasswordになるように設定しています。
マウントフォルダ:./root/workdir/
コンテナは停止すると中身が消えてしまうので、それを取り出す仕組みとして指定したフォルダを上記フォルダ(./root/workdir/)にマウントするように設定しています。
準備
大前提であるDockerをインストールする手順、及びポイント②の処理に必要なツール(クライアント側でX windowを用いたGUIを起動させるため)をインストールする手順を記載します。各種ツールはpowershellの機能であるchocolateyを使ってインストールすることができます。
Dockerのインストール
dockerを使うためには、Hyper-Vの有効化と、Docker for Windowsのインストールが必要です。それぞれ以下のコマンドで有効化及びインストールが可能です。OSのバージョン等の理由でHyper-Vが使えない場合は、docker-toolboxを使う方法もあります。
#Hyper-V 有効化(要再起動) Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All #Docker for Windowsのインストール(要サインアウト) choco install docker-for-windows
参考サイト
Windows 10 上に Hyper-V をインストールする
https://chocolatey.org/packages/docker-for-windows
https://chocolatey.org/packages/docker-toolbox
GUI描画に必要なツールのインストール
必要なツールはXmingとTeraTermの2つです。それぞれ以下のコマンドでインストール可能です。インストール後は、Xmingは起動、TeraTermは初回だけ、起動して設定⇒SSH転送⇒「リモートの(X)アプリケーションをローカルのXサーバに表示する」にチェックを入れてOK⇒ 設定→設定の保存をクリックしTERATERMを上書してからTeraTermを再起動する処理が必要です。
#Xmingのインストール choco install xming #TeraTermのインストール choco install teraterm
参考サイト
https://chocolatey.org/packages/Xming
https://chocolatey.org/packages/teraterm
開発ツール/XmingをTeraTermで使用する
役割としては、コンテナ側がX window systemを用いて描画する情報を作成し、TeraTermがサーバー側(コンテナ側)からSSHでクライアント側(Windows側)に描画情報を転送、Xmingがその情報をもとにWindows上で描画という感じだと理解しています。
VcXsrv等のツールを用いた他の方法もありそうでしたが、この方法で実現できたのでそれで良しとしました。また、PowerShellでのSSHでは、コンテナ側にWindows側の画面の情報が送られないのか、display cannot open等のエラーが出て描画することが出来ずTeraTermが必要そうでした。
使い方
使うためには、コンテナを起動することと、設定ファイルの中のいくつかの意味を理解する必要があります。
起動方法
Docker hubからimageをダウンロードして起動する方法が簡単です。コマンドを実行するフォルダにworkdirというフォルダを作って、マウントしたいファイルを入れておくようにしてください。
#イメージをdocker hubからコピー docker pull rosyuku/mydevenv_python:0.1.0 #イメージからコンテナを起動 docker run -p 22000:22 -p 33890:3389 -p 8888:8888 -v ./workdir:/root/workdir/
設定を変更したりしたい場合は、ソースコードをgitからダウンロードして、docker-composeのコマンドでコンテナを立ち上げることも可能です。anacondaをダウンロード/インストールしたりするので、最初立ち上がるのには少し時間がかかります。
#ソースコードをgitからコピー git clone --depth=1 -b v0.1.0 https://github.com/Rosyuku/mydevenv_python.git #フォルダを移動してコンテナ立ち上げ cd mydevenv_python docker-compose up --build
設定変更方法
例えば以下のような方法で設定を変更することが出来ます。設定を変えてbuildし直すか、これらを考慮した新しいイメージを作っていただくことなります。
- ポートを変えたい場合
- runコマンドのp以降を変更する(例:20000:22にすればSSHは20000でアクセスできるようになる)
- docker-composeファイルを変更してbuildする
- jupyterの設定を変更したい場合
- .jupyterフォルダ内のファイルを変更してbuildする
- matplotlibの設定を変更したい場合
- .matplotlibフォルダ内のファイルを変更してbuildする
- spyderの設定を変更したい場合
- .spyder-py3フォルダ内のファイルを変更してbuildする
接続方法
概要欄に記載した通り、以下のような方法で接続することが出来ます。
- リモートデスクトップ接続
- Windows上でリモートデスクトップ接続を開き、localhost:33890を指定してアクセス。xrdpの画面に移行したらOKを押下。
- SSH接続
- TeraTermでlocalhost:22000を指定してアクセス。パスワードはrootのものと同様。
- Jupyter接続
- ブラウザ上でlocalhost:8888を指定してアクセス。パスワードはデフォルトでpasswordになっている。
まとめ
GUIを活用でき、Windowsユーザーでも比較的活用しやすいpython開発環境のコンテナを作成しました。今後はこれを活用したり、apache等と連携するような部分の作成も進めたいと考えています。