Docker for Windows betaを試す (Hyper-V enabled)

※WordPressが不調でレイアウトがものすごく酷い事になってます。そのうち直します。

docker今更説明不要だと思いますが、Docker。そのDockerの標準提供されている動作環境の一つに「Docker for Windows」があります。

Docker for Windowsは、Dockerの実行環境をWindows上で実現する、手軽なパッケージです。但し、現状のDocker for Windowsは「Virtual Box」を使って実現しているため、Hyper-Vを使用する環境では使えません(Hyper-Vを無効にする必要がある)。

※正確には、Docker for Windowsに含まれる「Docker Engine」がVirtualBoxを必要としています。Docker clientは単独で動作します。

現在新たに開発中のバージョンでは、仮想マシンをVirtualBoxではなくHyper-V上で実現させることが出来るようになっていて、非常に操作性に優れています。このベータ版は、Dockerのベータプログラムに申し込んだユーザーに順次配布されているようで、先日私のところにもやってきたので早速試してみました。

Dockerをサクッと試してみたいという方も、これで始められると思います。


ベータプログラム

ベータプログラムは以下から申し込めます。

Explore a new kind of Docker – Docker early access

いつ配布されるのかは良くわかりません。私もWindows Subsystem for Linuxにかまけてすっかり忘れていました。


インストール

dockerbeta1確かめていませんが、古いDocker for Windowsはアンインストールしておいた方が良いでしょう。

ベータプログラムの順がやってくると、メールで案内が来ます。メール文中にDocker for Windowsのベータ版へのリンクと、アクセスキーが含まれているので、それぞれ保存しておきます。

dockerbeta2ダウンロードしたmsiを実行します。インストールは非常に簡単ですが、Hyper-Vを構成している場合は、デフォルトの構成ファイルと仮想イメージの配置フォルダにDocker Engineが配置されるので、必要であればあらかじめ配置されるフォルダを変更しておくことをお勧めします。

dockerbeta3インストールされると、デスクトップにこのようなアイコンが配置されます。

dockerbeta4起動すると、初回はこのようなダイアログが表示されます。ベータプログラムのキーを入力して開始します。

dockerbeta5すると、タスクトレイにこのようなクジラのアイコンが表示されます。

いくつかの環境で試したのですが、一台だけHyper-Vの仮想スイッチの構成がうまくいかず、「DockerNAT」仮想スイッチが外部ネットワークに接続されていないケースがありました。もし起動時に通信できない事があった場合は、Hyper-Vマネージャの仮想スイッチの構成を確認してみて下さい。

私の環境では、他に仮想スイッチがあった場合に、一旦それらを削除しておいて実行したところ、正常に動作しました。例えば、Visual StudioでWindows Phoneエミュレーターを起動した場合に、自動的に仮想スイッチが構成されるので、これを削除しておきます(DockerNATが作られた後で、手動で戻す)。

Dockerチームはbeta8でこの事を認識しているので、いずれ修正されるでしょう。

“Error response from daemon: dial tcp 10.0.75.2:2375: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond”


Docker EngineがHyper-Vで起動

dockerbeta6これを待ち望んだ人もいるかと思います。ちゃんとHyper-Vの仮想マシンの一員として動作しています。Docker Engineの仮想マシンには「MobyLinuxVM」という名前が付けられており、シャットダウンも普通に可能です。なので一旦シャットダウンし、CPUやメモリ構成を変更することが可能です(どの程度保証されているのかはわかりません)。私は再起動時に前回の状態に復元(起動していれば起動する)するようにしました。

なお、仮想マシンのコンソールには「何も」表示されません。文字通り何も表示されず、Hyper-Vのロゴが表示されたままになっています。これはこの仮想マシンがDockerで必要な最小限のリソースしか使わないように最適化されているからと思われます。なので、基本的に仮想マシンのコンソールを操作することはありません。

dockerbeta7その代わり、タスクトレイのアイコンを右クリックするとコンテキストメニューが表示され、ここで幾つかの操作を行うことが出来ます(但し、興味深い何かはありませんでした)。

  • Docker Engineが起動したかどうかの基本的な確認は「Logs…」で確認できます。
  • 「Dashboard…」は、もっかのところ「Kitematicダウンロードしてね」と表示されるだけです。Kitematicはこの表示で初めて知りました。細かいところはググってみて下さい。使いやすいGUIインターフェイスです。

Hello Docker on Windows/Hyper-V

dockerbeta9ということで、これでもう動いています。また、Docker Client CLIもReadyなので、すぐに使い始めることが出来ます。とりあえず、Docker初めての方向けの手引きです。普通にコマンドラインを開きます。CLIはパスが通っているので、cmd.exe直実行でもOKです。

これですよこれ、この手軽さが欲しかった!

では、DockerでUbuntuコンテナを実行し、bashを操作してみます。

C:\> docker run -i -t ubuntu /bin/bash

これは、DockerHubからubuntuの最新Dockerイメージをダウンロードしてきて、Docker Engine内(つまりHyper-V)で実行して、/bin/bashを実行します。「-i -t」はbashの標準入出力をWindowsのコマンドプロンプトに結合して、直接操作可能にするという意味です。

初回はイメージのダウンロードに時間がかかるかもしれません。成功するとこのようにbashのプロンプトが(コマンドプロンプトに)表示され、普通に操作できます。Welcome Docker!!

dockerbeta10ここでexitでシェルを抜けるとコマンドプロンプトに戻りますが、これでDocker Engine内のubuntuインスタンスは綺麗さっぱり消えています(ダウンロードしたイメージだけキャッシュされている)。もう一度起動すると、今度はほぼ一瞬で起動するはずです。

これがDockerの利点で、後片付けが不要なので、ちょっと何か試すとかの用途には非常に便利です。もちろん、本来のDockerの強みである、DockerFileを定義したコンテナの作成と利用も当然可能です。「ディスポーザブルインフラストラクチャー」として、気軽に使ってみてください。