2015/12/07

Azure IaaS 上の Nano Server を Container Host としてセットアップする

Microsoft Azure のクラシック ポータルのギャラリー、および新しいポータルの Marketplace には、「Windows Server Nano 2016 Tech Preview 4」というイメージがあります。これをコンテナーホストにしてみようっていうチャレンジ。

Azure IaaS は Nested Virtualization をサポートしていないので、Hyper-V コンテナーは使えませんが、Windows Server コンテナー (ただし、NanoServer イメージを使用) は実行できると期待して、やってみました。



Azure IaaS 上の Nano Server に PowerShell Remoting で接続します。

PS> Enter-PSSession -ConnectionUri https://<FQDN>:<WinRM のポート番号> -Credential <ユーザー名>

Azure 上の Windows 仮想マシンへの PowerShell Remotingの接続については、以下の投稿をご覧ください。

Nano Server on Azure (Azure VM への PS Remoting の証明書について)

Nano Server には何も入っていないので、次のコマンドラインを実行して、Containers のサポートを追加します。

[nanoserver] PS> DISM /Online /Add-Package /packagepath:C:\Packages\Microsoft-NanoServer-Containers-Package.cab 
[nanoserver] PS> DISM /Online /Add-Package /packagepath:C:\Packages\en-us\Microsoft-NanoServer-Containers-Package.cab

また、PowerShell モジュールを使えるように、RSAT 関連の機能を有効化します。

[nanoserver] PS>Enable-WindowsOptionalFeature -Online -FeatureName ServerManager-Core-RSAT,ServerManager-Core-RSAT-Role-Tools,ServerManager-Core-RSAT-Feature-Toolsここで一度、Azure 仮想マシンを 再起動。

Azure 仮想マシンの Nano Server に Install-ContainerHost.ps1 を取り込んで実行します。が、Nano Server では wget (Invoke-WebRequest) た使えないので、wget -uri https://aka.ms/tp4/Install-ContainerHost -OutFile の代わりに...

[nanoserver] PS> $SourcePath = "https://aka.ms/tp4/Install-ContainerHost"
[nanoserver] PS> $DestinationPath = "~\Install-ContainerHost.ps1"
[nanoserver] PS> $handler = New-Object System.Net.Http.HttpClientHandler 
[nanoserver] PS> $client = New-Object System.Net.Http.HttpClient($handler)
[nanoserver] PS> $client.Timeout = New-Object System.TimeSpan(0, 30, 0)
[nanoserver] PS> $cancelTokenSource = [System.Threading.CancellationTokenSource]::new()  
[nanoserver] PS> $responseMsg = $client.GetAsync([System.Uri]::new($SourcePath), $cancelTokenSource.Token)
[nanoserver] PS> $responseMsg.Wait() 
[nanoserver] PS> $response = $responseMsg.Result 
[nanoserver] PS> $downloadedFileStream = [System.IO.FileStream]::new($DestinationPath,[System.IO.FileMode]::Create, [System.IO.FileAccess]::Write)
[nanoserver] PS> $copyStreamOp = $response.Content.CopyToAsync($downloadedFileStream) 
[nanoserver] PS> $copyStreamOp.Wait() 
[nanoserver] PS> $downloadedFileStream.Close()
(https://aka.ms/tp4/Install-ContainerHost スクリプトの Copy-File 関数を参考にしました。この方法、ps1 化しておけば、こまったときに便利かも。)

これで、 ~\Install-ContainerHost.ps1 がダウンロードできたはずですので、実行します。

[nanoserver] PS> ~\Install-ContainerHost.ps1





New-NetNat だけエラーになりましたが、それ以外は成功したみたい。ローカルで試したときは Docker のインストールが失敗したけど(Nano Server TP4 を Container Host にする )、Docker もちゃんと入りました。やっぱり、日本語環境が何か悪さをしているみたい。

Hyper-V (Microsoft-NanoServer-Compute-Package.cab) を追加してみたり、再起動したりして、New-NetNAT を手動で実行して設定できました。(Hyper-V が本当に必要かどうかは不明)

[nanoserver] PS> New-NetNat -Name ContainerNAT -ExternalIPInterfaceAddressPrefix "172.16.0.0/12"

NanoServer イメージから Windows Server コンテナーを作成して実行。

[nanoserver] PS> New-Container -Name <コンテナー名> -ContainerImageName NanoServer -SwitchName "Virtual Switch"
[nanoserver] PS> Start-Container -Name <コンテナー名> 


成功! (でもなんか不安定かも)

[<- Nano Server TP4 まとめ







0 件のコメント: