Windows Server 2016でWindows Serverコンテナーを使い始める

この記事は、[「クラウド時代のシステム管理」](http://www.takanyan.net/windows-server-container-1/)の記事を転記したものです。
Windows Server 2016からDocker APIに対応した「Windows Serverコンテナー」と、より強固なプロセス分離機能を備えた「Hyper-Vコンテナー」の2つのコンテナ技術を利用可能になりました。今回はこのうちWindows Serverコンテナーについて、使い始めるための手順を解説します。

<!--more-->

本記事は、Microsoftの<a href="https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/quick-start-windows-server" target="_blank">こちらのドキュメント</a>をもとに記述しています。以前は一部コマンドのオプションが間違っていましたが、修正されているため、本記事執筆時点では参照先サイトの手順をそのまま実行可能です。

## 1. Windows Serverコンテナー機能の有効化

事前にWindows Updateを行い、最新のHotfixを適用します。Windows Server 2016リリース直後（RTM）の状態ではコンテナーは正常に動かないためです。次に、サーバーマネージャーから「管理」＞「役割と機能の追加」をクリックして機能の追加ウィザードを開始します。開始後、「コンテナー」項目にチェックをつけてインストールを行います。

<a href="http://www.takanyan.net/wp-content/uploads/2017/06/install-container.png"><img src="http://www.takanyan.net/wp-content/uploads/2017/06/install-container.png" alt="install-container" class="aligncenter size-full wp-image-353" /></a>

インストールが終わったらOS再起動を行います。

## 2. Dockerのインストール

Windows Server用のDockerをインストールするためには管理者用Windows PowerShellを起動したうえで2つのステップを踏みます。1つ目は<a href="https://www.powershellgallery.com/packages/DockerMsftProvider/1.0.0.1" target="_blank">PowerShell Gallery</a>からDockerパッケージを管理するためのプロバイダーモジュールをインストールします。

```
PS C:\＞ Install-Module -Name DockerMsftProvider -Repository PSGallery –Force
```

次に実際にDockerパッケージをインストールします。インストールコマンドを実行するとインストールするパッケージを信頼済みにするかどうか聞かれるので「A」と回答します。

```
PS C:\＞ Install-Package -Name docker -ProviderName DockerMsftProvider
```

実際に一連のコマンドを実行すると以下のような表示になります。

<a href="http://www.takanyan.net/wp-content/uploads/2017/06/powershell.png"><img src="http://www.takanyan.net/wp-content/uploads/2017/06/powershell.png" alt="Install Docker on Windows PowerShell" class="aligncenter size-full wp-image-359" /></a>


インストール完了後、再度OS再起動を実施します。

## 3. Dockerコマンドでコンテナを起動してみる

OS再起動が完了したらPowerShellを起動して、Dockerのバージョンを表示し、インストールされていることを確認します。

```
PS C:\＞ docker version
Client:
 Version:      17.03.1-ee-3
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   3fcee33
 Built:        Thu Mar 30 19:31:22 2017
 OS/Arch:      windows/amd64

Server:
 Version:      17.03.1-ee-3
 API version:  1.27 (minimum version 1.24)
 Go version:   go1.7.5
 Git commit:   3fcee33
 Built:        Thu Mar 30 19:31:22 2017
 OS/Arch:      windows/amd64
 Experimental: false
PS C:\＞
```

次に、サンプルのイメージ空コンテナを起動します。今回は.NET CoreのキャラクターBOTを表示するだけのものになります。なお、初回起動時はDocker Hubからイメージをダウンロードするため、インターネットにつながっている必要があります。

```
PS C:\＞ docker run microsoft/dotnet-samples:dotnetapp-nanoserver

        Dotnet-bot: Welcome to using .NET Core!
    __________________
                      \
                       \
                          ....
                          ....'
                           ....
                        ..........
                    .............'..'..
                 ................'..'.....
               .......'..........'..'..'....
              ........'..........'..'..'.....
             .'....'..'..........'..'.......'.
             .'..................'...   ......
             .  ......'.........         .....
             .                           ......
            ..    .            ..        ......
           ....       .                 .......
           ......  .......          ............
            ................  ......................
            ........................'................
           ......................'..'......    .......
        .........................'..'.....       .......
     ........    ..'.............'..'....      ..........
   ..'..'...      ...............'.......      ..........
  ...'......     ...... ..........  ......         .......
 ...........   .......              ........        ......
.......        '...'.'.              '.'.'.'         ....
.......       .....'..               ..'.....
   ..       ..........               ..'........
          ............               ..............
         .............               '..............
        ...........'..              .'.'............
       ...............              .'.'.............
      .............'..               ..'..'...........
      ...............                 .'..............
       .........                        ..............
        .....


**Environment**
Platform: .NET Core 1.0
OS: Microsoft Windows 10.0.14393

PS C:\＞
```

## 4. Windows Serverコンテナー利用時の注意点

Windows ServerコンテナーはLinux上でのDockerコンテナと同じコマンドを使ってWindowsカーネルベースのコンテナを作ることができます。なおWindows Serverコンテナーを使う上での注意点が2つあります。

1. ホストOSとOSカーネルを共有しているため、Linuxカーネルベースのコンテナを実行することはできません。
2. たまに正常に実行できない場合がありますが、これはWindowsのサービスにある「Docker」と「Docker for Windows Service」のどちらかが起動していない場合に起きます。サービス一覧（services.msc）を開いて上記2つのサービスが実行中かどうか確認してみましょう。

以上がWindows Serverコンテナーを利用開始するまでの手順でした。