2016年1月20日水曜日

Windows2016TP4でWindowsコンテナを試す

Windows2016TP4でWindowsコンテナを試す。

Windows2016TP4を仮想環境で構築後Windowsコンテナを実行するまでのメモです。

New-ContainerHost.ps1を使えば一気に構築してくれるのですがHyper-V限定かつ5時間もかかるので
手動での手順も確認しました。

以下URLわかりやすいですね。
https://msdn.microsoft.com/ja-jp/virtualization/windowscontainers/deployment/deployment

まずはWindows2016TP4のisoイメージをダウンロードします。

https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-technical-preview

仮想マシンにてWindows2016TP4をインストールします。

インストール後Powershellにてコンテナの機能をインストールします。

 Install-WindowsFeature containers
 shutdown /r

下記コマンドでコンテナのインストールを確認します。

 Get-ContainerHost

仮想スイッチを作成します。

 New-VMSwitch -Name "Virtual Switch" -SwitchType NAT -NATSubnetAddress 172.16.0.0/12

NATを構成します。

 New-NetNat -Name ContainerNat -InternalIPInterfaceAddressPrefix "172.16.0.0/12"

コンテナモジュールをインストールします。

 Install-PackageProvider ContainerProvider -Force

コンテナイメージを検索します

 Find-ContainerImage

WindowsServerCoreをインストールします。

 Install-ContainerImage -Name WindowsServerCore -Version 10.0.10586.0

コンテナイメージがインストールされたことを確認します

 Get-ContainerImage

イメージからコンテナを作成します

 New-Container -Name test -ContainerImageName WindowsServerCore -SwitchName "Virtual Switch"

コンテナが作成されたことを確認します。

 Get-Container

コンテナを起動します。

 Start-Container -Name test

Get-ContainerでStateがRunnningになっていることを確認します。
以下コマンドでコンソールログインします

 Enter-PSSession -ContainerName test -RunAsAdministrator


私の環境ではNanoServerが下記エラーで起動できませんでした。
(おそらくNestedHyper-Vが必要ですが私の環境では以下を実行しても起動できませんでした)
→Hyper-Vコンテナで稼働しました。以下参照ください

Windows10 Hyper-VでNanoServerを試す。



Windows10 Hyper-V環境でNanoServerを構築後NanoServerコンテナを実行するまでのメモです。
手順としてはWindows2016OSイメージからpowershellスクリプトでNanoServerの仮想ディスクイメージを
作成しHyper-Vで動かします。

New-ContainerHost.ps1を使えば一気に構築してくれるのですがHyper-V限定かつ5時間もかかるので
手動での手順も確認しました。

以下URLわかりやすいですね。
https://msdn.microsoft.com/ja-jp/virtualization/windowscontainers/deployment/deployment
https://technet.microsoft.com/en-us/library/mt126167.aspx

まずはWindows2016TP4のisoイメージをダウンロードします。

https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-technical-preview

Windows2016TP4isoを右クリックでマウントします。(ここではD:)

作業フォルダを作成します。(ここではC:\nano)
下記ファイルをC:\nanoにコピーします。

 D:\\NanoServer\Convert-WindowsImage.ps1
 D:\NanoServer\NanoServerImageGenerator.psm1

下記コマンドを実行して仮想ディスクイメージを作成します。(イメージはc:\nanodisk\disk.vhd)
最初にパスワード入力を求められます。

Import-Module C:\nano\NanoServerImageGenerator.psm1
New-NanoServerImage -MediaPath D:\ -BasePath c:\nano -TargetPath c:\nanodisk\disk.vhd -MaxSize 10GB -GuestDrivers -ReverseForwarders -Compute -Containers

Hyper-V管理マネージャで仮想ホストを新規作成し、作成時に上記c:\nanodisk\disk.vhdを指定します。

作成した仮想ホストを起動します。

起動するとコンソールにユーザ名とパスワードとドメイン名の入力画面が表示されます。
コンソール上では何もできないためリモートで接続します。

Windows10のPowerShellにて以下コマンドを実行します。

 Set-Item WSMan:\localhost\Client\TrustedHosts "NanoServerのIPアドレス"

以下コマンドでNanoServerにリモート接続します。

Enter-PSSession -ComputerName "NanoServerのIPアドレス" -Credential "NanoServerのIPアドレス\Administrator"

以下のコマンドでIISが導入できます。

powershell
Install-WindowsFeature web-server

メモリ使用量は209MBのため軽量です。
NanoServerでコンテナも起動できますね。VHDをVMDKに変換すればESX環境でもNanoServerが動かせそうです。

Windows10でWindowsコンテナを試す。



以下URL参照
https://msdn.microsoft.com/ja-jp/virtualization/windowscontainers/quick_start/container_setup

Windows2016からリリースされるWindowsコンテナですがWindows10Build10586以降であればコンテナ環境を試すことができます。
とはいえWindows10ではコンテナのコマンド(Get-Containerなど)が提供されていないためWindows10のHyper-V環境にWindowsコンテナホストを
構築してコンテナを起動する、という流れになります。

Windows10[Hyper-V]
 - Windows2016TP4[Windowsコンテナホスト]

ちなみに「Windowsコンテナ」と「Hyper-V」コンテナは違うそうです。
 Windowsコンテナ・・・コンテナを「サービス」として稼働
 Hyper-Vコンテナ・・・コンテナを「Hyper-V仮想ホスト」内で稼働

上記のためHyper-Vコンテナでは「ネストされた仮想」機能が必要となります。
普通に考えたら「仮想ホスト内の仮想ホスト内でコンテナを動かす」ことになりパフォーマンス低下が激しいので
リソース消費を抑えた「Nano Server」でHyper-Vコンテナを動かす、という思想のようです。
(VMwareのPhotonOSですかね?であればESXi環境でもHyper-Vコンテナ動かせますな・・・)


以下、自宅のWindows10でWindowsコンテナを体験します。

Windows10でHyper-Vを有効にします。
https://msdn.microsoft.com/virtualization/hyperv_on_windows/quick_start/walkthrough_install#UsingPowerShell
Hyper-V管理マネージャで「外部仮想スイッチ」を作成します。
以下コマンドで結果が表示されればOK

Get-VMSwitch | where {$_.SwitchType –eq “External”}

コマンドプロンプト(管理者)を実行して以下コマンドを入力します。

powershell.exe
start-process powershell -Verb runas

管理者用のWindowsPowerShellが開くのでスクリプト実行ポリシーを変更します。

Set-ExecutionPolicy RemoteSigned
y

以下セットアップスクリプトをダウンロード、実行します。

wget -uri https://aka.ms/tp4/New-ContainerHost -OutFile c:\New-ContainerHost.ps1
c:\New-ContainerHost.ps1 –VmName <containerhost> -WindowsImage ServerDatacenterCore -Hyperv

<containerhost>は作成する仮想マシン名を入力

作成する仮想マシンのパスワードとライセンス条項の同意画面が表示されるのでそれぞれ入力します。

インターネット経由でWindowsコンテナイメージがダウンロードされます。
※時間がかかる(5時間)かつ、32GBのディスクを消費します。

下記に仮想マシンを作成するようです。
C:\Users\Public\Documents\Hyper-V\Virtual hard disks

ここまで来て「VMwarePlayerでWindowsServer2016インストールしたほうが早くね?」と頭がよぎりましたが
頑張って続けます。

Windows10のHyper-VマネージャにWindows2016仮想マシンが作成されました。
仮想ホスト自体のメモリは686MB消費していました。
コンテナを起動すると737MBになりました。確かにメモリ消費は抑えられていますね。
Hyper-Vコンテナを起動すると1966MBになりました。Hyper-Vコンテナ、重いですね。

画面はコマンドプロンプトのみ。
パスワード入力してログインします。

やはり画面はコマンドプロンプトのみ。。。

下記URLの手順そのままでコンテナ内にIISを起動することができました。

https://msdn.microsoft.com/ja-jp/virtualization/windowscontainers/quick_start/manage_powershell

※コピー&ペーストしたほうが早いです

docker コマンドもあったのでdocker pull したらcentosもっていけるかと期待しましたが無理でした。
Windows専用コンテナですね。