Windowsユーザーに優しいDocker Containerのpython開発環境を作ってみた

概要

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等と連携するような部分の作成も進めたいと考えています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA