Windows ServerコンテナーとHyper-Vコンテナーの違いは、一言でいってしまえば隔離度の違いでしかありませんが、実はもう一つ大きな違いがあります。それは、コンテナーイメージの違いです。
Windows ServerコンテナーがServer Coreインストールベースのアプリケーション実行環境であるのに対し、Hyper-VコンテナーはNano Serverがベースです。そのため、コンテナー内で利用できる役割や機能、コマンドに違いがあります。
例えば、Windows ServerコンテナーでIIS(インターネットインフォメーションサービス)Webサーバーの役割を利用するには、コンテナー内で「Install-WindowsFeature Web-Server」または「DISM /Online /Enable-Feature /FeatureName:IIS-WebServer」コマンドレットを実行してIIS Webサーバーの役割をインストールします。
Hyper-VコンテナーはNano Serverベースなので、Windows Server 2016 TP4のインストールメディアの「\NanoServer\Packages」フォルダーに収録されているNano Server用のIISパッケージ(Microsoft-NanoServer-IIS-Package.cab)を追加する必要があります。しかし、ここで問題があります。通常の仮想マシンとは異なり、コンテナーにはDVDメディアやISOイメージをマウントする方法が提供されていません。
そこで、Windows Server 2016 TP4には、コンテナーホストとコンテナー間のファイル共有機能が追加されました。
Windows PowerShellで操作する場合は、Windows Server 2016 TP4(英語版であることがポイント)のインストールメディアの「\NanoServer\Packages」フォルダーの内容を、例えば「C:\Share」フォルダーにコピーして、Hyper-Vコンテナーを停止した状態で次のコマンドラインを実行し、コンテナーを開始して接続します(画面3)。
1 Add-ContainerSharedFolder -ContainerName <コンテナー名> -SourcePath C:\Share -DestinationPath C:\Packages
2 Start-Container -Name <コンテナー名>
3 Enter-PSSession -ContainerName <コンテナー名> -RunAsAdministrator
最初の「Add-ContainerSharedFolder」コマンドレットは、Windows Server 2016 TP4で追加された新しいコマンドレットで、コンテナーホストのフォルダーをコンテナー内にマウントする機能を提供します。この機能は、Windows Serverコンテナーでも利用できます。なお、Dockerコマンドでは「docker run」コマンドに「-v <ローカルパス>:<コンテナー内のパス>」パラメーター(例:-v c:\share:c:\packages)を追加して指定します。
3行目の「Enter-PSSession」コマンドレットの「-ContainerName」パラメーターもWindows Server 2016 TP4で追加されました。TP3では「-ContainerId」パラメーターにコンテナーIDを指定する必要がありましたが、TP4からはコンテナー名を指定できるようになりました。
コンテナーに接続したら、次のコマンドラインを実行することで、IIS Webサーバーの役割を追加し、サービスを開始できます(画面4)。なお、筆者の環境では最初のコマンドラインが失敗しました。失敗したコマンドラインは、言語パッケージ(en-us\Microsoft-NanoServer-IIS-Package.cab)の追加後に再実行することで成功しました。
1 DISM /Online /Add-Package /PackagePath:C:\Packages\Microsoft-NanoServer-IIS-Package.cab
2 DISM /Online /Add-Package /PackagePath:C:\Packages\en-us\Microsoft-NanoServer-IIS-Package.cab
3 NET START W3SVC
なお、現時点では、Windows Server 2016 TP4のコンテナーホスト上で、コンテナーイメージ「NanoServer」をWindows Serverコンテナーとして実行することはできません。また、コンテナーイメージ「WindowsServerCore」をHyper-Vコンテナーとして実行することもできません。
一方、コンテナーホストがNano Serverの場合は、コンテナーイメージ「NanoServer」をWindows ServerコンテナーまたはHyper-Vコンテナーで実行することができます。コンテナーホストであるNano Serverでコンテナーイメージ「NanoServer」をWindows Serverコンテナーとして実行できるのは、コンテナーホストとコンテナーが同じカーネルベースであり、コンテナーがコンテナーホストのカーネルを共有できるからです。
この制約は将来変更になるかもしれませんが、現時点ではこの通りです。
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手がける。個人ブログは『山市良のえぬなんとかわーるど』。
Copyright © ITmedia, Inc. All Rights Reserved.