ちょっとややこしいですが、Windows Server 2016 TP4 の Hyper-V の上で Nano Server 仮想マシンを動かして、Nano Server 仮想マシンが Container Host として、Hyper-V Container や Windows Server コンテナーを動かせるようにしてみました。
Nano Server を Container Host としてセットアップするには、いろいろと注意点があるのでメモ。
※2015/12/08 追記: Azure IaaS 上の Nano Server をすんなりコンテナーホストにできたので(→ Azure IaaS 上の Nano Server を Container Host としてセットアップする)、それを参考にいろいろ修正しました。また、Nano Server をコンテナーホストにするドキュメントも公開されてました。
This document will detail deployment options for Windows Server 2016 and Nano Server to both physical and virtual systems.
[URL] https://msdn.microsoft.com/en-us/virtualization/windowscontainers/deployment/deployment
Windows Server 2016 TP4 の Nested Hyper-V を有効にした Nano Server 仮想マシンを Container Host としてセットアップする手順です。
この手順により、こんなエラーを回避できます(と思います)。
Step 1: Hyper-V と Containers のサポートを含む Nano Server の VHD イメージを作成する。
作業用フォルダーに Windows Server 2016 TP4 のインストールメディアの \NanoServer フォルダーから NanoServerImageGenerator.psm1 と Convert-WindowsImage.ps1 をコピーしたら、作業フォルダーで...
PS> Import-Module .\NanoServerImageGenerator.psm1
PS> New-NanoServerImage -MediaPath F:(英語版のTP4のISOマウント先) -BasePath .\Base -TargetPath .\<ファイル名>.vhd -ComputerName <コンピューター名> -GuestDrivers -Compute -Containers -ReverseForwarders -Language en-us -MaxSise 20GB
※ 第 2 世代仮想マシンにするなら、ファイル名を .vhdx にしてね。
※ -GuestDrivers は Hyper-V 仮想マシン用ドライバー、-Compute は Hyper-V の役割、-Containers は Containers の機能、-ReverseForwarders は Docker サポートのために必要。
※ 既定では、4GB の容量可変 VHD/VHDX ができちゃうので、-MaxSize でサイズ指定。
Step 2: Windows Server 2016 TP4 の Hyper-V に第 1 世代仮想マシンまたは第 2 世代仮想マシンを作成し、Nano Server の VHD イメージを接続してセットアップする。
Step 3: 仮想マシンで 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 "<仮想マシン名>"
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 <仮想マシン名> -SourcePath .\Install-ContainerHost.ps1 -DestinationPath C:\ -FileSource Host
PS> chcp 432
Step 6:
PS> Set-Item wsman:\localhost\Client\TrustedHosts
"<Nano Server の IP またはコンピューター名>"
PS> Enter-PSSession -ComputerName <Nano Server の IP またはコンピューター名>
※PowerShell Direct (Enter-PSSession -VMName <仮想マシン名>) で作業すると、いろいろエラーが出ます。必ず、PowerShell Remoting で。
[NanoServer]: PS> Enable-WindowsOptionalFeature -Online -FeatureName ServerManager-Core-RSAT,ServerManager-Core-RSAT-Role-Tools,ServerManager-
Core-RSAT-Feature-Tools
[NanoServer]: PS> C:\Install-ContainerHost.ps1 -HyperV
これで、再起動不要で Nano Server をコンテナーホストとしてセットアップできました。
Nano Server をコンテナーホストとしてセットアップした場合、NanoServer イメージだけがインストールされます。WindowsServerCore はサポートされません。Nano Server のコンテナーホストでは、NanoServer イメージから Hyper-V コンテナーおよび Windows Server コンテナーを作成、実行できます。
Step 7: Hyper-V Container を作成してみる。
PowerShell Direct または Remoting で Nano Server に接続して...
PS> Enter-PSSession -VMName <Container Host にした Nano Server の仮想マシン名>
または
PS> Enter-PSSession -ComputerName <Nano Server のIP またはコンピューター名>
[NanoServer]: PS> New-Container -Name <コンテナー名> -ContainerImageName NanoServer -SwitchName "Virtual Switch" -RuntimeType HyperV
[NanoServer]: PS> Start-Container -Name <コンテナー名>
※-RuntimeType HyperV を省略するか、-RuntimeType Default を指定すると、Windows Server コンテナーになります。
※ PS Direct で操作している場合、Enter-PSSession -ContainerName MyContainer01 -RunAsAdministrator は Specified method is not supported. と言われて使えませんでした。Invoke-Command は大丈夫。
※ Nano Server に PS Remoting で接続している場合は、Enter-PSSession -ContainerName は OK。
※ Docker で操作するなら...
docker run –t –i -–name <コンテナー名> --isolation=hyperv nanoserver cmd
ただし、PS Direct/Remoting セッションの中からだと cannot enable tty mode on non tty input となってダメだと思う(PS Direct で Enter-PSSession -ContainerName がダメなのと同じ理屈?)。EMS の SAC 経由でやってみました。
証明書とか面倒ですが、docker をリモート接続できるようにして操作するのが一番快適かも。
→ Windows Server 2016 TP3 > Windows 版 Docker でリモート接続 (TLS) を有効化する
Step 8: おそうじ。
[NanoServer]: PS> Stop-Container -Name <コンテナー名>
[NanoServer]: PS> Remove-Container -Name <コンテナー名>
※ Docker で操作するなら...
docker rm <コンテナー名>
おまけ(その 1)
New-NanoServerImage で作成した VHD のサイズは既定で 4GB。イメージ作成時に -MaxSize の指定を忘れちゃった場合は足りなくなるかもしれないので、Hyper-V マネージャーのディスクの編集で VHD のサイズを拡張しておきましょう。
仮想マシン側のボリュームの拡張は、Nano Server だと Diskpart とか使えなくて面倒だと思いますが、サーバー マネージャーでリモート管理できるようにしてあれば簡単です。
おまけ(その 2)
Nano Server のイメージ作成時に -ReverseForwarders (Microsoft-OneCore-ReverseForwarders-Package.cab) を追加しておかないと、Install-ContainerHost.ps1 の最終段階で Docker Daemon の開始に失敗します。
忘れちゃったという場合は、Windows Server 2016 TP4 英語版の ISO イメージを仮想マシンに接続して、手動でインストールして再起動すれば、Docker daemon 動き出します。
[NanoServer]: PS> DISM /Online /Add-Package /PackagePath:D:\NanoServer\Packages\Microsoft-OneCore-ReverseForwarders-Package.cab
[NanoServer]: PS> DISM /Online /Add-Package /PackagePath:D:\NanoServer\Packages\en-us\Microsoft-OneCore-ReverseForwarders-Package.cab
[NanoServer]: PS> Restart-Computer
再起動後に、Docker Daemon サービス開始後のセットアップの続きを...
[NanoServer]: PS> docker tag nanoserver:10.0.10586.0 nanoserver:latest
ちなみに、Nano Server の場合、Docker Daemon はサービスではなく、タスク (Get-ScheduledTask -TaskName Docker) として登録されます。-ReverseForwarders (Microsoft-OneCore-ReverseForwarders-Package.cab) が利用できないと、タスクを実行しても タスクのアクション cmd.exe /c C:\ProgramData\Docker\runDockerDaemon.cmd ... が動きませんでした。
[Nano Server TP4 まとめ ->]
2015/12/07 追記)
Nano Server がコンテナーホストだと、NanoServer イメージを Windows Server コンテナーとして動かすこともできます。Windows Server がコンテナーホストの場合はできないこと。
サポートされる組み合わせについては...
Windows Container Requirements > Supported OS Images
[URL] https://msdn.microsoft.com/en-us/virtualization/windowscontainers/deployment/system_requirements
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。