Windows環境にdocker入れてJupyter環境作ろうとして苦悩した話
私のWindows環境にdockerを入れようと思ってちょっとハマったので記事にしてみる。
ー アジェンダ ー
1. Dockerとは何か
2. Docker Desktop のインストール
3. Docker Toolbox をインストールしてみた
4. Docker Quickstart Terminal を使ってgit clone!
5. Windowsでmakeコマンドを使用する方法
6. 開発環境(コンテナ)をセットアップ
7. Jupyterの設定ファイルを作成
8. Jupyter Notebook をChromeで使う
なぜdockerなのか?
教えてくれる人がdockerだったから、あと社内でDocker使いがどうやら多いらしいし、今の勉強するには最適らしい。
1. Dockerとは何か
Dockerはコンテナ型の仮想化環境を提供するオープンソースソフトウェアである。VMware製品などの完全仮想化を行うハイパーバイザ型製品と比べて、ディスク使用量は少なく、仮想環境 作成や起動は速く、性能劣化がほとんどないという利点を持つ。(wiki)
ということで、仮想環境の一つ、すでに他の仮想環境もあるのだが、せっかくなので勉強がてら入れてみる。
2. Docker Desktop のインストール
Docker Desktop
https://www.docker.com/products/docker-desktop
Download for Windows に進む
Get Docker からダウンロードする
Docker Desktop requires Windows 10 Pro or Enterprise version 14393 to run.
調べてみたらどうやらWindowsのバージョンの問題らしい(?)
が、Windowsが言う事を聞いてくれず更新が保留のまますすまない
Windows 10 のダウンロード
https://www.microsoft.com/ja-jp/software-download/windows10
ここから最新のWindowsアップデートを手動で試みる
今すぐアップデートをクリック
今すぐ更新をクリック
ダウンロードが始まってますがすごい時間かかります
このあたりから急激に遅くなりましたが辛抱強く我慢
そして更新が終わったら、先ほどのDocerインストーラが動いてくれるかな?
そして3時間くらいかけてやっとWindowsの更新がおわった!
Windows Update
最新の状態です
最終チェック日時:今日、19:35
Docker Desktop requires Windows 10 Pro or Enterprise version 14393 to run.
でもね。この子はまだ居座っていました。
という話です。
でもよーく見てみたら
Get Docker Desktop (Windows)
Docker Desktop (Windows) is available for free.
Requires Microsoft Windows 10 Professional or Enterprise 64-bit. For previous versions get Docker Toolbox.
Windows 10 Home に対応してないやんけ!!
そんなおまぬけな事を3時間くらいやっておりました。
・・・
そして、続きがあります。
3. Docker Toolbox をインストールしてみた
※ ここでネタ晴らし
Docker は Linux の技術を利用していますが、Windows 上で Docker を利用するために Docker Desktop(Docker For Windows) というソフトウェアが用意されています。
Docker Desktop は、Windows 10 Professional か Enterprise で 64版でないと使えません。これらでないと、「Hyper-V」 という Microsoft の仮想化技術が使えないからです。それ以外の Windows には、Docker Toolbox というツールが提供されています。
Install Docker Toolbox on Windows(Docker Toolbox)
https://docs.docker.com/toolbox/toolbox_install_windows/
ファイルサイズは小さいのですぐ Wizard立ち上がります
パスを入れて
インストールコンポーネント設定して
Select Addtional Task 選択して
Ready to Install で Install して
シークバーでしばしご歓談して
すぐインストールは終わりました
4. Docker Quickstart Terminal を使ってgit clone!
前の章でDockerが正常にインストールされていればデスクトップにもショートカットができているはずだ。
流れとしては下記のコマンドで作業を進める予定
git clone https://github.com/takahi-i/mlbook.git
make init-docker
make create-container
make jupyter
では最初の、git clone する前にこのgit の説明
フリーライブラリで学ぶ機械学習入門 サンプルコード
https://github.com/takahi-i/mlbook
ここのソースを拝借して練習します。
ここからクローンしたいのでパスを頂きます。
右上の「Clone or Download」からパスを拝借します。
https://github.com/takahi-i/mlbook.git
これをクローンしたいので、ターミナルで先ほどのコマンド(下記)を打ち込みます
git clone https://github.com/takahi-i/mlbook.git
コマンドの準備ができたのでさっそくターミナル立ち上げます。
デスクトップに先ほどDockerのターミナルショートカットを作ってあるので確認してみよう。
「Docker Quickstart Terminal 」のほうを起動
黒い画面がでましたね。ターミナル
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com
Start interactive shell
kurita@xps MINGW64 /c/Program Files/Docker Toolbox
$
「$」から始まるターミナル(コマンド)操作ができるようになります。
コマンド「cmd」でもおなじみ「dir」も使えます。
では早速「git clone」してみます。
git clone https://github.com/takahi-i/mlbook.git
数秒待つとcloneが終わりました
Checking connedtiviby... done.
が出たらクローンが完了です。
5. Windowsでmakeコマンドを使用する方法
make init-docker
次にこちらのコマンドですが、なんとWindowsではこの「make」コマンドが使えないのでちょっと工夫します。
イイ感じにまとめてくれてるページがあるので参考にします。
Make for Windows
http://gnuwin32.sourceforge.net/packages/make.htm
「Make for Windows」なるサイトから「Complete package, except sources」をダウンロードして実行します
そう、名前の通り、「Make」を「Windows」で使えるようにするツール
Welcome to the Make Setup を Next
Licence Agreement を同意して Next
C:\Program Files (x86)\GnuWin32
Select Destination Location でインストール場所をして。そのまま で Next
Select Components はそのまま Next
Select Start Menu Folder もそのまま Next
Select Additional Tasks もそのまま Next
Ready to install でインストール開始
Complating the Make Setup Wizard で完了です。Finish
ではこれが使えるようにするために「環境変数の設定」
環境変数の「Path」に make.exe のパスを通す必要があります。
インストールしたフォルダのbinに入っていますので、下記のパスを登録します。上記のようにWindowsのコントロールパネルから「システムの詳細設定」の「環境設定」タブから「環境変数」をクリックして画面をだします。
環境変数の「Path」に「新規」で下記を追記してください。
C:\Program Files (x86)\GnuWin32\bin
上記環境設定が問題なければコマコマンドプロンプトを起動して、make -vを実行して下記のように表示されればインストールは完了です。
>make -v
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
これはフリーソフトウェアです. 利用許諾についてはソースを
ご覧ください.
商業性や特定の目的への適合性の如何に関わらず, 無保証です.
This program built for i386-pc-mingw32
このように動いたら問題ありません。次に進みます。
6. 開発環境(コンテナ)をセットアップ
残り作業コマンドは以下の3つ
次のコマンドでDockerコンテナに開発環境を設定します。
まずDockerイメージ(仮想領域)を準備します。
make init-docker
make create-container
make jupyter
上記のコマンドは、make initで作成したDockerイメージからDockerコンテナーを作成し、それをDockerコンテナーに開発環境を作成しています。
では、上記コマンドを実行する前にコマンドが通る様に場所の移動してからひとつずつ進みます。
まず先ほど、「git clone」した場所にクローンしたデータがあるのでチェンジディレクトリコマンド「CD」で移動します。
# C:\Share\httpd に移動したいときは下記
$ cd /C/Share/httpd
Windowsの「cmd」コマンドプロンプトの場合と違って、エクスプローラーに表示されるパス「>cd C:\Share\httpd」では通らないので注意です。
クローンしたデータは、通常なら、マイドキュメントにできてるので念のため確認してみる。
マイドキュメント直下にフォルダができていました
https://github.com/takahi-i/mlbook.git
なので、「mlbook」フォルダにありました。
ではここで「make」コマンドが使えるようになっているので打ってみます
make init-docker
ごにょごにょ黒い画面が出てきます
まだ続く・・・
長かったけど完了した
終わったら次はコンテナを用意します
$ make create-container
を実行します。
kurita@xps MINGW64 /C/Users/mlbook (master)
$ make create-container
docker run -it -v `pwd`:/work -p 8888:8888 --name mlbook-container mlbook-image
docker@80993d14e8cb:/work$
部分的に抜粋すると下記
kurita@xps MINGW64 /C/Users/mlbook (master)
$ make create-container
docker run -it -v `pwd`:/work -p 8888:8888 --name mlbook-container mlbook-image
# ~中略~
docker@80993d14e8cb:/work$ make jupyter
jupyter-notebook --ip=0.0.0.0 --port=8888
[I 17:06:09.901 NotebookApp] Writing notebook server cookie secret to /home/docker/..
[I 17:06:10.581 NotebookApp] Serving notebooks from local directory: /work
[I 17:06:10.582 NotebookApp] The Jupyter Notebook is running at:
[I 17:06:10.583 NotebookApp] http://(80993d14e8cb or 127.0.0.1):8888/?token=052d9f..
[I 17:06:10.584 NotebookApp] Use Control-C to stop this server and shut down all ..
[W 17:06:10.597 NotebookApp] No web browser found: could not locate runnable browser.
[C 17:06:10.598 NotebookApp]
To access the notebook, open this file in a browser:
file:///home/docker/.local/share/jupyter/runtime/nbserver-19-open.html
Or copy and paste one of these URLs:
http://(80993d14e8cb or 127.0.0.1):8888/?token=052d9ffa1f07e3a45cb85d6ac72a7059086e30200341179c
これで jupyter notebook がローカルサーバーで使えるようになりました。
・・・
が、これではなぜか、jupyter notebook がブラウザで動かなかった。
Anaconad だけの時はローカルホストで直打ちで行けたのだがちょっと設定を変更してみる。
7. Jupyterの設定ファイルを作成
ターミナルからJupyterの設定ファイルを作成します。ターミナルに以下のコマンドを入力します。
$ Jupyter notebook --generate-config
すると、以下のディレクトリにjupyter_notebook_config.pyという設定ファイルの雛形が作成されます。
/.jupyter/jupyter_notebook_config.py
デフォルトのインストール環境であれば、マイドキュメント直下に「jupyter_notebook_config.py」ファイルが格納されているので、エディタで編集してみます。
C:/Users/(ホーム)/.jupyter/jupyter_notebook_config.py
ー1「c.NotebookApp.browser 」のブラウザパスを指定する
90行あたり、Chromeの直パスがこちらの場合
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
## Specify what command to use to invoke a web browser when opening the notebook.
# If not specified, the default browser will be determined by the `webbrowser`
# standard library module, which allows setting of the BROWSER environment
# variable to override it.
# c.NotebookApp.browser = ''
c.NotebookApp.browser = '"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe" %s'
ブラウザ(Chrome)のパスを設定して、以下同様に設定をいくつか変更
ー2 juypyter notebook起動時のブラウザ起動
## Whether to open in a browser after starting. The specific browser used is
# platform dependent and determined by the python standard library `webbrowser`
# module, unless it is overridden using the --browser (NotebookApp.browser)
# configuration option.
# c.NotebookApp.open_browser = True
c.NotebookApp.open_browser = True
ブラウザ起動がコメントアウトされていたので解除
をしたら、あらためて、jupyterを再起動して表示されたトークン付きのローカルホストでブラウザにアクセスしてみたら表示されるようになりました。
ー3 localhost に設定
200行あたり、ローカルホストを有効に設定変更しておきます
## The IP address the notebook server will listen on.
# c.NotebookApp.ip = 'localhost'
c.NotebookApp.ip = 'localhost'
8. Jupyter Notebook をChromeで使う
上記3つの設定を弄ることでブラウザで次回 jupyter をたたいたときにブラウザで利用できるようになっています。(環境によりどうかな)
URLはローカルホストで見えると思われる。(今回は後者で通った)
もしかしたらポートは重複してるとか、セキュリティーでブロックされてる可能性はあるのでそれは別途調べてください。(cmdでポート調べるとか)
http://localhost:8888/?token=37502a894f6088...2b8cd676d272e1e57
http://127.0.0.1:8888/?token=37502a894f6088...2b8cd676d272e1e57
トークンが生きている間は、下記URLでアクセスできるっぽいです。
http://127.0.0.1:8888/tree
jupyter の使い方はまた別の機会に!
Webのお仕事、元phpプログラマ、今主にWebディレクタ、たまにエンジニア、UXディレクタ、LTのネタ探ししてます。