はじめに
DNNのライブラリなどunixで走らせたいライブラリを用いる際は,私の場合,ubuntuのデスクトップorサーバに(windows pcから)sshで繋いで環境構築したdockerのコンテナを走らせて開発していました.プログラムを走らせるだけであれば問題ないのですが,デバッグ等をやりたいとなると少し不便でした.データの前処理など計算ライブラリを使用しない処理はwindowsで実装し,残りをvimなどで実装していましたが,dockerでvncサーバを走らせることでGUIアプリケーションを動かす方法を知ったので使ってみました.
前提
サーバ:
- ubuntu/centOS
- docker/nvidia-dockerの環境あり
クライアント:
- windows
要望:
- eclipse+pydev(などのIDE)で開発したい,結果を直接ビジュアライズ(matplotlibなど)したい
- tensorflow/chiner/caffeなどのライブラリを走らせたい(windowsには入れづらいライブラリ)
- GPUを使いたい(cuda)
Dockerfile
dorowu/ubuntu-desktop-lxde-vnc
のDockerfileを参考にさせていただきました.(gitHub)
cudaへの対応
上記のdorowuさんのDockerfileを参考にさせていだきますが,cudaを使用したいのでベースイメージを変更します.幸いdorowuさんはubuntuをベースイメージに使っていますので,nvidia/cuda に変更するだけで動きました.
eclipseのインストール
eclipseはダウンロードして展開するだけでいいので,Dockerfileに以下の記述を追加しました.
ADD http://***/eclipse-***.tar.gz /tmp
RUN tar xavf /tmp/eclipse-* -C /opt/
RUN ln -s /opt/eclipse/eclipse /usr/bin
ターミナルから起動してやります(スタートメニュー的なところに追加してないので).
javaのインストール
eclipseを走らせるためにはjavaが必要です.とくにpydevに関して,java8が入っていないとインストールが正常に完了しても使えない(メニュー等に表示されない)という問題が発生します.とりあえずcracleのjava8を入れました.
RUN apt-add-repository ppa:webupd8team/java && apt-get update
# license
RUN echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections
RUN echo debconf shared/accepted-oracle-license-v1-1 seen true | debconf-set-selections
RUN apt-get install -y --force-yes oracle-java8-installer
RUN apt-get install -y --force-yes oracle-java8-set-default
eclipseのプラグイン
例えばpydevを入れるとして,本当はDockerfileに記述したいところですが...
とりあえず,GUIで操作してimageにコミットしました.まぁGUIは開発中に使うだけなのでいいかなと.いい方法があれば教えてください...
eclipseをインストールしたディレクトリをホスト側と共有orホスト側からコピーしてイメージ構築すればいいかもしれません.
開発環境の導入
上で作成したイメージを継承して各ライブラリを導入します.ベースにnvidia/cudaを使っていたイメージ(これとか)であればFROMを今回のイメージに変更するだけで良いはずです.
vncの接続
今回参考にさせていただいたイメージではnoVNCを導入しています.これはブラウザ(HTML5)からvncできるアプリケーションです.とりあえずこれで試します.クライアントソフトを使って接続もできるはずですが,ブラウザでも割と快適でした.