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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。