WIN1@Codename

Codename

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Hyper-Vコンテナの考察

「Windows Server コンテナ」と「Hyper-Vコンテナ」の違い

Hyper-VコンテナはWindows Server 2016 Technical Preview 4(TP4)では実際に動かせるものまで提供されていますが、まだ開発段階ということもあり、「Windows Server コンテナ」と「Hyper-Vコンテナ」の違いが明確にわかるようなサンプルやドキュメントが提供されているわけではないようです。

「Windows Server コンテナ」はLinuxの世界で先行されて使われてきたいわゆるコンテナ技術の仕様とほぼ同じものと考えられます。「Hyper-Vコンテナ」については、何がどのように違うのかといった情報が少ないのが現状です。そこで、TP4までの段階で、Hyper-Vコンテナについて現時点までに分かっていることをまとめてみようと思います。

 

GMO TechReport
https://www.gmo.jp/report/single/?art_id=208

スポンサーサイト

Hyper-VコンテナとしてIISコンテナを作ってみる

新しい仮想化技術の選択肢「Windowsコンテナ」

Windows Server 2016で実装される予定の「Windowsコンテナ」はこれまでHyper-V上の仮想マシンを利用してきたユーザーにとって、新しい仮想化技術の選択肢を提供するものとなっています。

今回は、「Hyper-Vコンテナ」を利用することでコンテナのメリットを生かしつつ、より安定した、より安全なアプリケーションの実行に特化した隔離環境を作成する方法をご紹介します。

※今回の内容はWindows Server 2016 Technical Preview 4の英語版を元に操作を行っています。

 

GMO TechReport
https://www.gmo.jp/report/single/?art_id=207

Windows Serverのイベントログをリアルタイムでメール送信

PowerShellを利用してリモート先からでも簡単にリアルタイム通知を実現

Windows Serverを利用してサービス提供をしている場合、イベントログはサーバー管理者にとって重要な情報源となります。緊急度の高いログが出力された場合、リアルタイムで情報を取得しておきたいものです。

重要と思われるイベントログが出力された場合に携帯などメール通知機能のある端末に情報を送信して、リアルタイムで確認する方法をご紹介します。

 

GMO TechReport
https://www.gmo.jp/report/single/?art_id=204

Windows Server 2016 Technical Preview 4 でIISコンテナを作ってみる

PowerShellを使ってコンテナの基盤となるコンテナホストを構築してIISをインストールし、Webサイトを公開するまでの手順を追って紹介

2015年8月にリリースされたWindows Server 2016 Technical Preview 3(TP3)で初めてサポートされた注目すべき新機能、Windows Server コンテナ(Windows Server Container)。Windows Serverが提供するコンテナサービスは、Windows Server 2016 Technical Preview 4(TP4)がリリースされ、アップデートされたことにより、さらに注目されているHyper-Vコンテナが利用できるようになりました。現時点ではWindows Server コンテナはPowerShellを使って管理することができます。
PowerShellを使ってコンテナの基盤となるコンテナホストを構築して、実際に動くコンテナとしてIISをインストールし、Webサイトを公開するまでの手順を追って紹介します。
※IISコンテナを作成する場合、TP4の時点では日本語版にまだ不具合があるようなので、英語版を使用して紹介します。

コンテナホストの作成

今回はHyper-Vコンテナではなく、Windows Serverコンテナを使っていきます。
Windows Server 2012 R2 Hyper-Vの仮想マシンとして、コンテナホストを作成します。まずはTP4(英語版)をダウンロードします。
Windows Server 2016 TP4のダウンロードサイト

作成する仮想マシンは、分かりやすいようにGUI付きをインストールしています。

GUI版Windows Serverを選択 GUI版Windows Serverを選択

コンテナホストを構築するには、コンテナイメージやセットアップスクリプトをダウンロードする必要があるので、作成した仮想マシンがインターネットに接続できるようにネットワークの設定を行っておきます。
インターネットに接続できる状態になったら、スタートメニューからPowerShellを管理者権限で実行し、以下のコマンドで「ContainerSetup.ps1」をダウンロードして実行します。

wget -uri https://aka.ms/tp4/Install-ContainerHost -OutFile C:\Install-ContainerHost.ps1
.\ContainerSetup.ps1
C:\Install-ContainerHost.ps1

スクリプトの実行後、しばらく待つと再起動となります。
ログイン後、自動的にコンテナサービスの設定が行われ、コンテナのベースとなるイメージファイルが C:\Windows\system32\ContainerBaseImage.wim にダウンロードされます。ダウンロード完了までしばらく時間がかかりますので、このままの状態で待ちます。ダウンロードが完了すると、コンテナOSイメージが「WindowsServerCore」という名前でインストールされます。このコンテナイメージを元に、コンテナを作成したり、新しいコンテナイメージを作成していきます。

コンテナサービスのインストール コンテナサービスのインストール

続いて、サードパーティツールのNSSM(https://nssm.cc/usage)を利用して、Docker Daemonのインストールが行われています。Docker Daemonサービスを介して、Windows ServerコンテナをDockerのコマンドからも操作することが可能となります。

Docker関連のサービスが追加される Docker関連のサービスが追加される

すべてのインストールが完了すると、コンテナホストとなる仮想マシンに新たにネットワークアダプターが追加されています。この追加されたネットワークを使用して、コンテナとの通信を行います。

コンテナ用仮想ネットワークアダプターが追加される コンテナ用仮想ネットワークアダプターが追加される

コンテナホストのサービス一覧を見てみると、Hyper-V関連のサービスがいくつか追加されています。コンテナサービスはHyper-Vのテクノロジーを利用して実現しているようです。

Hyper-V関連のサービスが追加される Hyper-V関連のサービスが追加される

以上でコンテナホストの構築が完了しました。

コンテナの作成

コンテナホストの構築が完了したので、実際にコンテナを作成していきます。コンテナ関連の操作はPowerShell、Dockerコマンドどちらでも可能ですが、今回はPowerShellを使っていきます。コンテナは、元となるコンテナイメージから作成していきますので、まずはコンテナ関連のPowerShellのコマンドを確認しておきます。

Get-Command -Module Containers

コンテナ関連のコマンド コンテナ関連のコマンド

Windows Server コンテナの大本となるコンテナOSイメージは、「WidowsServerCore」となり、コマンドベースのWindows Serverとなっています。C:\ProgramData\Microsoft\Windows\Images に格納されていますので、コンテナイメージを確認しておきます。

Get-ContainerImage

コンテナを作成します。

New-Container -Name "MyContainer" -ContainerImageName “WindowsServerCore” -SwitchName "Virtual Switch"

-Name:コンテナ名
-ContainerImageName:テンプレートとなるコンテナイメージ
-SwitchName:コンテナが接続する仮想スイッチ、“Get-VMSwitch”で確認

コマンドが実行されると、作成されたコンテナが表示されます。コンテナの一覧は“Get-Container”コマンドを使っても表示することができます。作成されたコンテナは、C:\ProgramData\Microsoft\Windows\Hyper-V\Containers に保存されます。

コンテナの作成 コンテナの作成

コンテナの操作

作成したコンテナをPowerShellで操作してみましょう。
まずはコンテナを起動します。
“Get-Container”コマンドで確認すると「State」が“Running”に変わっています。

Start-Container -Name "MyContainer"

起動したコンテナを管理するには、PowerShellをリモートから実行することで可能となります。PowerShellをリモートで実行するには、“Invoke-Command”コマンド、もしくは“Enter-PSSession”コマンドを利用します。

(1) Enter-PSSession
初めに“Enter-PSSession”の例です。

Start-Container -Name "MyContainer"

コンテナにPowerShellのセッションが張られると、
[xxxxxxxx-xxx]: PS C:\Windows\system32>
のようなプロンプトとなります。これはコンテナIDの頭11桁となります。以後のコマンドはコンテナ内で実行されることになります。

コンテナにPowerShellセッション接続 コンテナにPowerShellセッション接続

続いて、“ipconfig”コマンドでコンテナのネットワーク設定を確認します。コンテナにIPアドレスが割り当てられているのが確認できます。

コンテナ内部のネットワーク設定 コンテナ内部のネットワーク設定

コンテナホストがインターネットに接続できる状態であれば、コンテナ内からもインターネットに接続できる状態になっています。
試しに“ping”コマンドを実行しましょう。インターネットに接続できているようです。DNSは“ipconfig /all”で見てみると、コンテナホストのDNSをそのまま利用しています。
コンテナのPowerShellセッションの接続を終了するには、“exit”コマンドを実行します。

コンテナからPingの確認 コンテナからPingの確認

(2)Invoke-Command
“Invoke-Command”コマンドを使用しても、同様の結果が取得できます。
“Invoke-Command”の場合は、コンテナ内で実行したいコマンドを-ScriptBlock { }で指定する方法なので、コンテナにPowerShellのセッションを張る必要はありません。

$Container = Get-Container -Name "MyContainer"
Invoke-Command -ContainerId $Container.ContainerId -ScriptBlock {ipconfig}

“Invoke-Command”を実行したところ “Invoke-Command”を実行したところ

以上で、コンテナ自体を操作る2つの方法を紹介しました。最後にコンテナを停止して、削除するには、以下となります。

Stop-Container -Name "MyContainer"
Get-Container -Name "MyContainer" | Remove-Container –Force

コンテナイメージの作成

一通りコンテナの操作ができるようになったところで、次はテンプレートとなるコンテナイメージを作成してみましょう。コンテナイメージは、自身が作成したコンテナから作成することができます。「WindowsServerCore」のコンテナイメージから作成したコンテナを、新しいコンテナイメージとして保存します。さらに、保存した新しいコンテナイメージからコンテナを作成し、別のコンテナイメージを作成…、というように、コンテナイメージはHyper-Vのチェックポイントのように、少しずつ変更を加えながら、次々と作り出すことができます。

コンテナイメージの作成 コンテナイメージの作成

新しくコンテナイメージを作成します。

New-ContainerImage -ContainerName “MyContainer” -Publisher “WIN1” -Name “MyContainerImage01” -Version 1.0

-ContainerName:先ほど作成したコンテナ名を指定します。このコンテナを元にコンテナイメージを作成します。コンテナは停止しておく必要があります。
-Publisher:コンテナイメージの作成者の名前
-Name:コンテナイメージ名
-Version:任意のバージョン

作成された新しいコンテナイメージ 作成された新しいコンテナイメージ

作成したコンテナイメージをエクスポートしてAPPXファイルとし、他のコンテナホストにインポートすることで、コンテナイメージを配布することも可能です。
エクスポート

$image = Get-ContainerImage -Name “MyContainerImage01”
Export-ContainerImage -Image $image -Path "C:\"

インポート

Import-ContainerImage -Path "C:\CN=WIN1_ MyContainerImage01_1.0.0.0.APPX"

コンテナイメージを削除する場合は、“Remove-ContainerImage”コマンドで削除します。

Get-ContainerImage -Name “MyContainerImage01”| Remove-ContainerImage –Force

IISコンテナイメージの作成と展開

一通りコンテナの操作ができるようになったところで、実際にアプリケーションがインストールされたコンテナイメージを作成して、利用してみましょう。今回は、コンテナにWebサーバーとしてIISをインストールして、コンテナイメージを作成します。コンテナとして簡単にIISのコンテナを展開して利用できることを確認します。

●コンテナのイメージの作成
TP4の現時点では、IISコンテナイメージを作成するには日本語版では不具合があるようなので、英語版のTP4を利用しています。
IISをインストールするコンテナを作成します。

$Container = New-Container -Name "IIS Container" -ContainerImageName “WindowsServerCore” -SwitchName "Virtual Switch"

コンテナを起動します。

Start-Container $Container

コンテナにPowerShellセッションを接続します。

Enter-PSSession -ContainerId $Container.ContainerId –RunAsAdministrator

コンテナにIISをインストールします。

Install-WindowsFeature Web-Server

PowerShellのセッションの接続を閉じて、コンテナを停止します。

Exit
Stop-Container $Container

IISコンテナを元に、コンテナイメージを作成します。

New-ContainerImage -ContainerName $container.Name -Publisher "WIN1" -Name "IISContainerImage" -Version 1.0

IISコンテナイメージの作成 IISコンテナイメージの作成

IISをインストールしたコンテナをコンテナイメージとして保存しておくことで、何度でもコピーして使い回すことができるようになりました。また、コンテナイメージをエクスポートして、このコンテナホストにインポートすることで、コンテナイメージを配布することも可能です。

●IISコンテナの公開
続いて、IISコンテナのWebサイトの公開方法です。先ほど作成したIISコンテナを使って、Webサイトを参照できるようにしてみましょう。コンテナは、コンテナホストとNATを使って接続されています。コンテナホストのNATにポートフォワードの設定を行うことで、コンテナのWebサイトを公開できるようになります。

NATを使ったIISコンテナの公開 NATを使ったIISコンテナの公開

コンテナのネットワーク情報を確認します。コンテナのIPアドレスは自動的に割り当てられた“172.16.0.2”となっています。

$Container = Get-Container -Name "IIS Container"
Start-Container $Container
Invoke-Command -ContainerId $Container.ContainerId -ScriptBlock {ipconfig}

IISコンテナのネットワーク情報 IISコンテナのネットワーク情報

コンテナのNATの設定を確認します。NATの名前を確認すると、“ContainerNAT”と定義されています。

Get-NetNat

NATの設定情報 NATの設定情報

NATにポートフォワードの設定を追加します。

Add-NetNatStaticMapping -NatName "ContainerNAT" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.16.0.2 -InternalPort 80 -ExternalPort 80

-NatName:NAT名
-Protocol :HTTPの公開なのでTCP
-ExternalIPAddress:0.0.0.0
-InternalIPAddress:IISコンテナのIPアドレス
-InternalPort:コンテナのWebサイトのポート番号
-ExternalPort :公開するポート番号

ポートフォワードの設定を追加 ポートフォワードの設定を追加

Webを公開するので、コンテナホストのファイアウォールのTCP80番ポートを開きます。GUIの「Windowsファイアウォール」でも設定可能です。

if (!(Get-NetFirewallRule | where {$_.Name -eq "TCP80"})) {New-NetFirewallRule -Name "TCP80" -DisplayName "HTTP on TCP/80" -Protocol tcp -LocalPort 80 -Action Allow -Enabled True}

ファイアウォールの設定を追加 ファイアウォールの設定を追加

以上の設定で、Webサイトが参照できる状態となりました。ブラウザで確認してみましょう。

ブラウザで確認 ブラウザで確認

NATの接続状況は、“Get-NetNatSession”コマンドで確認することができます。

Get-NetNatSession

NATの接続状況 NATの接続状況

以上で、実際にIISのコンテナを作成し、コンテナイメージとして保存、公開して、Webサイトを参照するところまでが完了しました。コンテナは、この繰り返しで次々に作成~展開まで行うことができます。
IISだけではなく、今後様々なアプリケーションがインストールされたコンテナイメージを作成して、素早く環境を展開できるようになります。コンテナ技術による、さらなる効率アップが期待できそうです。

Hyper-V上で稼働中の仮想マシンのVHDを使って、物理マシンでVHDブートする方法メモ (これも「V to P」?) 追記

Hyper-V上の第1世代仮想マシンは、最近のPCではやりのUEFIブートを利用できません。なので2.2TB以上のブートパーティションを作成するための、GPTパーティションを作成してインストールしようとしてもエラーとなってしまいます。

なので、前回のvhdブートでインストール済みのvhdイメージを使ってvhdブートする場合、最近のノートPCなどでUEFEブートのみサポートしている最新機種などでは、ブートできない場合があります。

Surface Pro 2 でこれでハマりました。

Surface Pro 2 の場合、UEFEブートのみサポートなのですが、ハードディスクがIDEとなっています。

Hyper-Vの仮想マシンの場合UEFEブートをサポートするのは第2世代の仮想マシンとなりますが、ハードディスクがSCSIのみ対応となってしまいます。

Surface Pro 場合は、すなおにDVDドライブからブートして、vhdブート用にインストールをする必要があります。

vhdブート用にインストールをする時には、事前にvhdファイルを作成しておき、内のパーティションをGPT形式に変換したうえで、セットアップウィザードを起動する必要があります。

セットアップウィザード内でGPT形式に変換する機能自体が無いようです。

20141422110347

次のページ

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。