Docker for WindowsでJupyter Notebookを動かす奮闘記
1 きっかけ そもそも、『Interface』2017年6月号の記事、「第2部 科学技術のイチオシPython入門」「第1章 今どき科学技術Pythonソフト!超強力Jupyter Notebook』の記事を見て、Jupyter Notebookを使ってみようと思ったのがきっかけ。2 記事のとおりやってみて、ファイルが保存できないことに気が付く。 上記の記事の61頁の「今どきのやり方」「その1:仮想的Dockerを使う」のとおりやってみる。手順1 Dockerをインストールする。 公式サイトからダウンロードして、Docker for Windowsをインストールした。(Dockerには、Linux版、Windows版、Mac版があるが、勤務先のパソコンのOSは、Windows10で、次の3項目を満足していたので、Windows版をインストールした。 ・64bit版のWindows 10(バージョン1511、ビルド10586以降)、ProもしくはEnterprise/Educationエディション ・Hyper-Vが利用できること ・コンテナ実行用の仮想マシンには、メモリ2GB、ディスク60GB(容量可変タイプの仮想ディスクで、初期サイズは4GB程度)のリソースが必要)(参考)http://www.atmarkit.co.jp/ait/articles/1609/01/news053.html 「無償の「Docker for Windows」で手軽にLinuxコンテナを利用する」手順2 Jupyter Notebookを動かしてみる。 Docker上で動くJupyter Notebookのイメージはたくさんあるらしいが、記事に沿って、jupyter/scipy-notebookを動かしてみることにする。 記事のとおり、Windows上のターミナル(コマンドプロンプト)を開き、下記のコマンドを入力してみた。C:¥Users/hoge>docker run -d -p 8888:8888 jupyter/scipy-notebook Chromeなどのブラウザで、 http://localhost:8888を開き、要求されたtokenを入力することで、Jupyter notebook(Scipy-notebook)を起動できた。 ただ、このままでは、ファイルを保存することができなかった。3 どうやらファイルを保存できそうな記事を見つけたので、その方法をやってみたがうまくいかない。(参考)https://qiita.com/yamasakih/items/d23ac0bf773e9b1b4d9d 「サーバーのDockerで起動したJupyter Notebookを他のパソコンからアクセスできるようにした話」手順1 ポートを開放する。 デフォルトで8888になっているとのことで、何もせず。手順2 Docker image のダウンロードおよびコンテナの作成 次のコマンドを実行。 C:¥Users/hoge>docker create jupyter/scipy-notebook手順3 パスワードを設定する。 記載のとおり、パスワードを設定した。手順4 マウントするフォルダおよびjovyanユーザの設定 /home/jovyan/workのuid、gid、groupsを調べてみると、それぞれ、 uid=1000(jovyan), gid=100(users), groups=100(users) だったので、これを使用することにした。手順5 仮想環境を起動する。 次のコマンドを実行した。 C:¥Users/hoge>docker run -e GRANT_SUDO=yes -e NB_UID=1000 -e NB_GID=100 -d -p 8888:8888 --rm -v /jupyter_nb:/home/jovyan/work --user root --name jupyter-notebook jupyter/scipy-notebook start-notebook.sh --NotebookApp.password='sha1:hogehogehogehogehogehogehogehogehogehoge' 所定のパスワードで、見事に起動したが、なんと/home/jovyan/workにアクセスできない!(最終的に分かったことだが、記事のホストOSがLinuxであったため、共有するフォルダのvオプションの記述方法が間違っていたこと、共有するには、「シェアドドライブス(Shared Drives)」の設定が必要であったことに、この後気づくことに。)4 Docker for Windowsに関する記事を見つけ、実行してみることに。ファイルの保存もうまくいった。(やったー)(参考)http://dr-asa.hatenablog.com/entry/2017/08/11/151151 「WindowsでのJupyter演習環境の準備手順」手順1 Windows環境の確認 2の手順1とほぼ同じ。手順2 Docker for Windowsのインストール手順 2とほぼ同じ手順だが、2よりやや詳しく、そして図なども付けてくれているので分かりやすい。 この記事の中に「次に、WindowsマシンとDockerコンテナでドライブを共有する設定を行います。」との記載があり、今までは、この作業を実施していなかったことに気づく。 実際の作業は、次のとおり。 「Dockerの管理メニューを表示して、[Settings]を選択した後、[Shared Drives]のタブから共有したいドライブを選択し、[Apply]を押して、設定変更を反映します。ここでは、Cドライブを共有しています。 」 なお、設定の途中でパスワード入力を求められたので、PCの立ち上げ時のパスワードを入力した。手順3 Dockerコンテナの起動 この記事のコマンドは、次のとおり。 C:¥Users/hoge>docker run -itd --name jupyter -p 8888:8888 -p 6006:6006 -v /c/data:/root/notebook -e PASSWORD=passw0rd enakai00/jupyter_tensorflow:latest これで起動することを確認。Windowsにおけるフォルダー(ドライブ)の共有の記載方法が分かった。「-v /c/hogehoge:/root/hogehogehoge」などと書けば良いらしい。(「-v c:hogehoge:/root/hogehogehoge」という記述もあったが、筆者は試していない。)5 うまくいった。 ということで、最終的には次のコマンドで起動することで、ファイルも保存できるようになりました。めでたし、めでたし。 C:¥Users/hoge>docker run -e GRANT_SUDO=yes -e NB_UID=1000 -e NB_GID=100 -d -p 8888:8888 --rm -v /c/jupyter_nb:/home/jovyan/work --user root --name jupyter-notebook jupyter/scipy-notebook start-notebook.sh --NotebookApp.password='sha1:cd2a2dff19fb:b5953f97e6aa15823c00a8557192bd333d2fd49e' -e、-d、-p、-v、--rm、--user root、--name、--NotebookApp.password=などのオプションについては、次の記事などを参照のこと。 https://qiita.com/yamasakih/items/d23ac0bf773e9b1b4d9d 「サーバーのDockerで起動したJupyter Notebookを他のパソコンからアクセスできるようにした話」6 まとめ 以上のことをまとめると、手順1 Windows環境を確認する。 ①64bit版のWindows 10(バージョン1511、ビルド10586以降)、ProもしくはEnterprise/Educationエディションであること。 ②Hyper-Vが利用できること ③コンテナ実行用の仮想マシンには、メモリ2GB、ディスク60GB(容量可変タイプの仮想ディスクで、初期サイズは4GB程度)のリソースが必要手順2 Docker for Windowsをインストールする。 公式サイトからダウンロードして、Docker for Windowsをインストールする。手順3 Docker上でJupyter Notebookを動かす。 ①共有ドライブの設定を行う。 Dockerの管理メニューを表示→[Settings]→[Shared Drives]→共有したいドライブを選択→[Apply] 設定の途中でパスワード入力を求められるので、PCの立ち上げ時のパスワードを入力する。 ②Jupyter Notebookを起動する。 Windows上のターミナル(コマンドプロンプト)で、次のコマンドを投入する。 C:¥Users/hoge>docker run -e GRANT_SUDO=yes -e NB_UID=1000 -e NB_GID=100 -d -p 8888:8888 --rm -v /c/jupyter_nb:/home/jovyan/work --user root --name jupyter-notebook jupyter/scipy-notebook start-notebook.sh --NotebookApp.password='sha1:cd2a2dff19fb:b5953f97e6aa15823c00a8557192bd333d2fd49e' 次に、Chromeなどのブラウザで、 http://localhost:8888を開き、設定したパスワードを入力することで、Jupyter notebook(Scipy-notebook)が起動する。