2015/11/25

Nano Server TP4 を Container Host にする

Windows Server 2016 Technical Preview 4 (TP4) の Nano Server は Containers をサポートしています。

現状、Hyper-V Container のみのサポートで、Windows Server Container は実行できないみたいです。Windows Server Container はカーネルを Container Host を共有するので、Nano Server という別のカーネル上の Container Host で WindowsServerCore イメージのコンテナーは動かないという理屈だと思います。

Nano Server を Container Host としてセットアップするには、いろいろと注意点があるのでメモ。

Windows Server 2016 TP4 の Nested Hyper-V を有効にした Nano Server 仮想マシンを Container Host としてセットアップする手順です。

この手順により、こんなエラーを回避できます(と思います)。






ちょっとややこしいですが、Windows Server 2016 TP4 の Hyper-V の上で Nano Server 仮想マシンが動いていて、Nano Server 仮想マシンが Container Host として、Hyper-V Container を動かします。


Step 1: Hyper-V と Containers のサポートを含む Nano Server の VHD イメージを作成する。

PS> New-NanoServerImage -MediaPath F:(英語版のTP4のISOマウント先) -BasePath .\Base -TargetPath .\mynano01.vhd -ComputerName nanoserver02 -GuestDrivers -Compute -Containers -Language en-us

Step 2: Windows Server 2016 TP4 の Hyper-V に第 1 世代仮想マシン(mynano01)を作成し、Nano Server の VHD イメージを接続してセットアップする。

Step 3: 仮想マシン(mynano01) で Nested Hyper-V を有効にする。

PS> wget https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/master/hyperv-tools/Nested/Enable-NestedVm.ps1 -OutFile .\Enable-NestedVm.ps1
PS> .\Enable-NestedVm.ps1 -VmName "mynano01"


Step 4: 仮想マシン(mynano01)の設定を開いて[統合サービス]の[ゲスト サービス]を有効にする。これは、次の Step で Copy-VMFile を使うため。

Step 5: Nano Server では wget (Invoke-WebRequest) が使えないので、Hyper-V ホスト側で Install-ContainerHost.ps1 をダウンロードして、Copy-VMFile を使ってゲスト サービス経由で Nano Server にコピーする。

PS> wget -uri https://aka.ms/tp4/Install-ContainerHost -OutFile .\Install-ContainerHost.ps1
PS> Copy-VMFile -Name 96mynano01 -SourcePath .\Install-ContainerHost.ps1 -DestinationPath C:\ -FileSource Host
Step 6: コマンドプロンプトを開き、CHCP 65001 (おまじない) に切り替えてから、PowerShell.exe を開始。または、PowerShell で CHCP 432 (おまじない) に切り替える。

C:\> chcp 65001
C:\> powershell.exe
または
PS> chcp 432

Step.7: Hyper-V の PowerShell Direct で Nano Server の PS セッションに接続し、Install-ContainerHost.ps1 を実行する。PowerShell Remoting で接続するなら -PSDirect パラメーターは不要かも。たぶん、Docker サポートのインストールは失敗するので、Docker サポートが不要なら -SkipDocker パラメーターを追加してね。

PS> Enter-PSSession -VMName <Container Host にする Nao Server の仮想マシン名>
[仮想マシン名]: PS> C:\Install-ContainerHost.ps1 -HyperV -PSDirect


もし、Getting Container OS image (NanoServer) ... の直後に C:\Install-ContainerHost.ps1 : Value cannot be null. エラーで終わってしまったら、一時フォルダー ($env:temp) に NanoServer.wim がダウンロード済みかどうかを確認し...

[仮想マシン名]: PS> dir $env:temp

-WimPath パラメーターを指定してベース OS イメージのインストールのところから再開。

[仮想マシン名]: PS> $mywim = "$($env:temp)\NanoServer.wim"
[仮想マシン名]: PS> C:\Install-ContainerHost.ps1 -HyperV -PSDirect -WimPath $mywim

成功すると、こんな感じで終わります。Docker まわりは失敗してますが (-SkipDocker をお勧め)...
Windows Server Container 用の WindowsServerCore はセットアップされません。


Step 7 : Hyper-V Container を作成してみる。

PowerShell を普通に開いて (おまじないは不要)...

PS> Enter-PSSession -VMName <Container Host  にした Nano Server の仮想マシン名>
[仮想マシン名]: PS> New-Container -Name MyContainer01 -ContainerImageName NanoServer -SwitchName "Virtual Switch" -RuntimeType HyperV
[仮想マシン名]: PS> Start-Container -Name MyContainer01
[仮想マシン名]: PS> Get-Con


Enter-PSSession -ContainerName MyContainer01 -RunAsAdministrator は Specified method is not supported. と言われて使えませんでした。

Step 8: おそうじ。

[仮想マシン名]: PS> Stop-Container -Name MyContainer01
[仮想マシン名]: PS> Remove-Container -Name MyContainer01

おまけ

New-NanoServerImage で作成した VHD のサイズは既定で 4GB。足りなくなるかもしれないので、Hyper-V マネージャーのディスクの編集で VHD のサイズを拡張しておきましょう。
仮想マシン側のボリュームの拡張は、Nano Server だと Diskpart とか使えなくて面倒だと思いますが、サーバー マネージャーでリモート管理できるようにしてあれば簡単です。




0 件のコメント: