Windows10 Pro上でHyper-Vコンテナーを使い始める手順

この記事は、[「クラウド時代のシステム管理」](http://www.takanyan.net/hyper-v-container-win10/)の記事を転記したものです。
<a href="http://www.takanyan.net/docker-for-windows-install/" target="_blank">以前の記事</a>でDocker for Windowsを使ってWindows10上でLinux Kernelベースのコンテナを実行する手順を紹介しました。今回はWindows10のHyper-Vコンテナーの機能を使って、Windows Kernelベースのコンテナを実行する手順を紹介します。本記事はMSDNサイトにある「<a href="https://msdn.microsoft.com/ja-jp/virtualization/windowscontainers/quick_start/quick_start_windows_10" target="_blank">Windows 10のWindowsコンテナー</a>」という記事を参考にして、Windows 10 Pro Insider Previewを使って検証しました。

<more>

## 1. Windows 10 Pro上で利用できるコンテナー

Windows Server 2016ではWindows ServerコンテナーとHyper-Vコンテナーの２種類のコンテナ機能が利用可能です。この二つのコンテナの違いは以下の通りです。

* Windows Serverコンテナーでは各コンテナはホストの１プロセスとして動き、コンテナのホストとその上で動くすべてのコンテナでWindows Kernelを共有している。
* Hyper-Vコンテナーでは各コンテナは独立した仮想マシン上（つまりvmwp.exeプロセスとして）で実行され、Kernelはコンテナ間で共有されない。

コンテナの操作にはDockerエンジン、Dockerクライアントを利用します。そのため、コンテナの操作感はLinux Kernelベースのコンテナを扱うときと全く変わりません。

## 2. Hyper-Vコンテナー環境のセットアップ

以下、Windows 10 Pro上で実際にHyper-Vコンテナー環境をセットアップする手順を紹介します。

### 2-1. Hyper-Vおよびコンテナー機能の有効化

コントロールパネルの「プログラム」＞「プログラムと機能」画面にて「Windowsの機能の有効化または無効化」をクリックしますすると、次のようなWindowsの機能の有効化ウィンドウが表示されますので、「コンテナー」と「Hyper-V」のチェックボックスをつけます。サブツリーにある項目もすべてチェックをつけます。

<a href="http://www.takanyan.net/wp-content/uploads/2016/12/EnableWindowsContainer01.png"><img src="http://www.takanyan.net/wp-content/uploads/2016/12/EnableWindowsContainer01.png" alt="Enable Hyper-V Container Function"  class="aligncenter size-full wp-image-296" /></a>

次へ進むと昨日のインストールが開始され、その後次のようにOS再起動を促す画面が表示されます。ここでOS再起動を実施します。

<a href="http://www.takanyan.net/wp-content/uploads/2016/12/EnableWindowsContainer02.png"><img src="http://www.takanyan.net/wp-content/uploads/2016/12/EnableWindowsContainer02.png" alt="Enable Hyper-V Container Function 2"  class="aligncenter size-full wp-image-297" /></a>

### 2-2. Docker EngineおよびDocker Clientのインストール

コンテナーを操作するためにDockerをインストールします。Windows用のDockerバイナリは下記のサイトにあります。

<a href="https://master.dockerproject.org/" target="_blank">https://master.dockerproject.org/</a>

上記サイトにある<code>windows/amd64/docker-(バージョン)-dev.zip</code>をダウンロードします。

<a href="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-download.png"><img src="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-download.png" alt="docker-download"  class="aligncenter size-full wp-image-298" /></a>

ダウンロードしたZIPファイルを展開したら、中にある「docker」フォルダを<code>C:\Program Files\</code>にコピーします。

<a href="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-extract.png"><img src="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-extract.png" alt="Docker ZIP Extract" class="aligncenter size-full wp-image-305" /></a>

コピーしたら以下の手順で<code>C:\Program Files\docker</code>をPATH環境変数に追加します。

<strong>1. システムの詳細設定画面を開く</strong>

コントロールパネルの「システムとセキュリティ」＞「システム」画面で「システムの詳細設定」をクリックします。

<a href="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-add-path01.png"><img src="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-add-path01.png" alt="Windows 10 System Configuration" class="aligncenter size-full wp-image-300" /></a>

<strong>2. 環境変数の設定</strong>

以下の図のように「詳細設定」＞「システムの環境変数」内の「Path」を選択して「編集」をクリックします。

<a href="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-add-path02.png"><img src="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-add-path02.png" alt="Windows 10 Environment Variables"  class="aligncenter size-full wp-image-301" /></a>

<a href="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-add-path03.png"><img src="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-add-path03.png" alt="Choose Path"  class="aligncenter size-full wp-image-302" /></a>

<a href="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-add-path04.png"><img src="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-add-path04.png" alt="Edit Path Environment" class="aligncenter size-full wp-image-303" /></a>

<strong>3. Docker用パスの追加</strong>

Pathの編集画面で「新規」ボタンをクリックします。フォーカスされた入力部分に<code>C:\Program Files\docker</code>を入力した後、「OK」ボタンをクリックします。

<a href="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-add-path05.png"><img src="http://www.takanyan.net/wp-content/uploads/2016/12/Docker-add-path05.png" alt="Add Docker Path"  class="aligncenter size-full wp-image-304" /></a>

### 2-3. Dockerのサービス化

DockerデーモンをWiondowsサービスとして登録するために以下のコマンドを管理者権限のコマンドプロンプトにて実行します。

```console
C:\WINDOWS\system32> dockerd --register-service
C:\WINDOWS\system32> sc start docker
```


## 3. Hyper-Vコンテナーの動作確認

ここまでの手順でコマンドプロンプトからdockerコマンドでHyper-Vコンテナーを操作できるようになりました。コンテナが動くことを確認します。

### 3-1. Windows nano serverのコンテナイメージをダウンロード

以下のコマンドを利用してDocker HubからWindows Nano Serverのイメージをダウンロードします。

```console
C:\> docker pull microsoft/nanoserver
```

ダウンロードしたら、イメージがダウンロードできていることを確認します。

```console
C:\WINDOWS\system32>docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
microsoft/nanoserver   latest              787d9f9f8804        5 weeks ago         918 MB
```

### 3-2. Dockerによるコンテナの実行

ダウンロードしたイメージをもとにインタラクティブにコマンドプロンプトを実行するコンテナを起動します。コンテナに入ったことをホスト名などで確認します。

```console
C:\> docker run -it microsoft/nanoserver cmd

Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

C:\>hostname
04700462dbc7
```

上記の結果でホスト名が元の端末と違うことと、Versionの部分がホストと違うことを確認します。

ここで表示されたホスト名はコンテナIDになります。exitコマンドでコンテナ上のコマンドプロンプトを終了させた後に確認できます。

```console
C:\> docker ps -a
CONTAINER ID        IMAGE                  COMMAND             CREATED              STATUS                      PORTS               NAMES
04700462dbc7        microsoft/nanoserver   "cmd"               31 seconds ago       Exited (0) 19 seconds ago                       modest_goldwasser
```

以上で、最初のコンテナの実行まで確認できました。

### 3-3. Hyper-Vコンテナープロセスのホストでの見え方

Hyper-Vコンテナーでは、各コンテナはHyper-V上の仮想マシンとして動くため、コンテナのプロセスは「vmwp.exe」として見えます。このことはコンテナ利用中にホストのタスクマネージャで見ることもできます。

ただし、Hyper-Vを使っているとはいえ、通常の仮想マシンのようにHyper-Vマネージャから見ることはできません。あくまでHyper-Vのハードウェア仮想化機能だけを利用しており、仮想マシンをdockerコマンドで毎回生成しているわけではありません。