Docker for Windowsをインストールしてみた話。
WindowsのPCで、Pythonのディープラーニングの環境を作るのにDockerを使えば楽というので試してみている。(機械学習名古屋勉強会で講師のantimon2さんがDockerイメージを公開しているので、それを使ってみる)
今まではWindowsでDockerを使う場合、Docker toolboxというのを使ってVirtualBoxという仮想環境と組み合わせて動かさないといけなかった。
最新版のDocker for Windowsは、Hyper-Vで動くようになっている。ただしHyper-V for Windows10のみサポートなので、Windows10のPro版以上でないと動かせない。
なので、GPUが載ったゲーミングノートPCのOSをWindows10 Homeから、例の激安なWindows10 Proにアップグレードした。
Docker for Windowsをインストールしてみる。公式サイトからインストーラーをダウンロードして動かした。
Hyper-Vを前もって有効にしておかなかったので、DockerのインストーラーがHyper-Vをenableにするか聞いてくる。
再起動後にHyper-Vが有効になり、Dockerが起動する。
特にDockerの起動画面とかウィンドウが出てこないが、タスクトレイのインジケーターにDockerのアイコンが表示される。
タスクトレイのDockerアイコンを右クリックして設定を開くと、動作状態を確認したり、設定を変更したり、停止やリスタートができる。
Dockerを実際に使う場合、コマンドラインのdockerコマンドを用いる。cmd.exeから起動してみた。
dockerコマンドが確認できたので、さっそく実際にDockerでpython環境を動かしてみるのを試してみた。
しかし、「Firewall detected」というエラーのダイアログが表示されて、うまく動かない。
ドキュメントにはファイアウォールのport 445を開ける設定をすればいいようなことが書いてある。
自分の場合、ウイルス対策ソフトのカスペルスキーを入れているので、ファイアウォール機能はWindows Firewallを使わずに、カスペルスキーのファイアウォール機能を使っている。
カスペルスキーのファイアウォール機能の設定を変更してみる。
ファイアウォール機能の設定画面はこのようになっている。
「ネットワーク」、「アプリケーションルールの設定」、「パケットルールの設定」という3つのサブの設定メニューがあるようだ。
順に開いて試してみた。
最初に「ネットワーク」を開いてみたのだが、よくわからなくて関係なさそうだと思ったので無視して飛ばした。(後述するが、ここで設定をするのが正解だった)
次に「アプリケーションルールの設定」を試してみたが、うまくいかなかった。
アプリケーションのdocker.exeを探して、通信を許可するか禁止するかを設定できるので、許可に設定したのだが、何かうまくいっていないみたいでdockerはさっきのエラーを表示してしまう。
次に、「パケットルールの設定」を試してみたが、これもうまくいかなかった。
よくあるルーターのNAT機能のような設定と同じで、プロトコル毎にポート指定してそのポートを開放するか禁止するか、あるいは通信先を限定して許可するとかの設定ができる。
このようにポート445をHyper-Vの仮想マシンに対して許可したつもりなのだが、うまくいっていないみたいで、やはりdockerでエラーが出る。
再度「ネットワーク」を開いて仮想マシンのネットワークインターフェース自体に許可を設定するのを試してみた。(ここに許可の設定があるのになかなか気がつかなかったので、だいぶ試行錯誤してしまった)
接続する設定にしたら、うまくいった。
dockerコマンドでサーバーに環境をダウンロードしにいくお馴染みの表示が出てきて、無事にダウンロードした環境を起動することができた。