見出し画像

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のネタ探ししてます。