所要時間は1分未満! 今すぐできるWindows Serverコンテナーの作り方――あなたの知らないコンテナーの世界(その2):vNextに備えよ! 次期Windows Serverのココに注目(27)(2/3 ページ)
前回は、Windows Server 2016 TP3の新機能「Containers」を有効化して、サーバーをコンテナーホストとしてセットアップするところまでを説明しました。今回は、Containersのネイティブな管理方法で「Windows Serverコンテナー」を作成し、登場したばかりで謎の多い新しいテクノロジついて想像を巡らせます。
さあ、始めましょう! Windows Serverコンテナーの作成は超簡単
コンテナー作成前のコンテナーホストの状態を確認したところで、早速、Windows Serverコンテナーを作成してみましょう。
PowerShellのウィンドウを管理者として開き、次の3つのコマンドラインを実行します(画面3)。これで、「MyCont01」という名前のWindows Serverコンテナーを作成し、コンテナーを開始して、コンテナーのPSセッション(リモートコンピューターへのセッション)に接続しています。
1 $mycont01 = New-Container -name "MyCont01" -ContainerImageName WindowsServerCore -SwitchName "Virtual Switch"
2 Start-Container -Name "MyCont01"
3 Enter-PSSession -ContainerId $mycont01.ContainerID -RunAsAdministrator
画面3 「New-Container」コマンドレットでコンテナーを作成し(10秒程度)、「Start-Container」コマンドレットでコンテナーを開始して(30秒程度)、「Enter-PSSession」コマンドレットでコンテナーのPSセッションに接続する
コンテナーの作成は10秒程度、起動は30秒程度で完了します。Hyper-Vなどの通常の仮想マシンと比較して、Windows Serverコンテナーは圧倒的に短時間で作成および開始することができます。接続したコンテナーのPSセッションは、Windows Server 2016のServer Coreベースの分離されたアプリケーション実行環境になります。
コンテナーには起動した順番に「172.16.0.0/12」のIPアドレス範囲から1つのIPアドレスが割り当てられ(172.16.0.2から順番で)、コンテナーホスト(172.16.0.1)経由で外部ネットワークにアクセスできます。
なお、コンテナーはコンテナーホスト(の仮想スイッチ)が提供するNATの背後にあるため、ポートフォワーディング(IPマスカレード)を設定しない限り、コンテナーホストの外部からコンテナーにネットワーク経由でアクセスすることができないことに注意が必要です。
PowerShellの良いところは、いろいろな書き方ができることです。次のようにコンテナーを作成、開始して、PSセッションに接続することもできます。
1 New-Container -Name "MyCont02" -ContainerImageName WindowsServerCore -SwitchName "Virtual Switch"
2 Start-Container -Name "MyCont02"
3 Enter-PSSession -ContainerId (Get-Container -Name "MyCont02").ContainerId -RunAsAdministrator
「Enter-PSSession -ContainerId」コマンドレットは、コンテナーのPSセッションにダイレクトに接続する機能です。本連載の第18回で紹介したHyper-Vの新機能「PowerShell Direct」によく似ています。
また、次のように「Invoke-Command」コマンドレットを使用して、PSセッションに対話的に接続することなしに、コンテナーで任意のスクリプトブロック(PowerShellコマンドレット、Windowsの標準コマンド、実行ファイルなど)を実行させることもできます。
Invoke-Command {スクリプトブロック} -ContainerID (Get-Container).ContainerId -RunAsAdministrator
コンテナーのファイルサイズは非常にコンパクト!
コンテナーホストには、Windows ServerコンテナーのベースOSイメージを使用して、複数のWindows Serverコンテナーを作成できます。また、コンテナーごとにWindows Serverの役割や機能やアプリケーションをインストールして実行することができます。
例えば、コンテナーのPSセッションで次のいずれかのコマンドラインを実行すれば、コンテナーに「IIS(インターネットインフォメーションサービス)」をインストールしてWebサイトをホストさせることができます。
Install-WindowsFeature Web-Server
または
DISM /Online /Enable-Feature /FeatureName:IIS-WebServerRole
以下の画面4は、コンテナーホストに2つのWindows Serverコンテナーを作成した時点で、コンテナーホストの「C:\ProgramData\Microsoft\Windows\Hyper-V\Containers」フォルダーを参照したところです。コンテナーごとに「コンテナーID.vhdx」という名前のVHDXファイルが作成されています。
画面4 2つのコンテナーを作成すると「C:\ProgramData\Microsoft\Windows\Hyper-V\Containers」フォルダーにVHDXファイルが作成され、変更差分が書き込まれる
コンテナーを作成すると「blank.vhdx」を元にコンテナーごとに「コンテナーID.vhdx」が準備され、20GBのストレージが提供されます。コンテナーからはCドライブがベースOSイメージのフォルダーツリーと同じように見えますが、コンテナーからCドライブに対して行われた変更はベースOSイメージではなく、「コンテナーID.vhdx」の方に変更の差分が書き込まれます。
画面4の141,312KBのVHDXファイルはWindows Serverコンテナーを作成して開始した直後のもの、501,760KBのVHDXファイルはWindows ServerコンテナーにIISをインストールしたものです。
また、「C:\ProgramData\Microsoft\Windows\Hyper-V\Containers」フォルダーの「コンテナーID\Hives」サブフォルダーには、コンテナーでレジストリに対して行われた変更の差分が格納されます。
Windows ServerコンテナーのベースOSイメージは約9GBと、通常のWindows Serverのインストールと同程度のサイズですが、コンテナーごとのストレージ使用量は差分のみになるので非常にコンパクトです。
【注】筆者の環境では、コンテナーを開始すると、コンテナーホストの管理者共有(C$、Admin$、IPC$など)が利用できなくなる現象を確認しました。コンテナーホストを再起動すると復活しますが、筆者は「net share C$=C:\」コマンドを実行してC$管理共有を復元しました。
以下の画面5は、IISをインストールしたコンテナーのVHDXファイルをWindows 10にコピーしてマウントし、ドライブ文字を割り当てて参照したところです。
ベースOSイメージに存在するフォルダーツリーへのアクセスは拒否されましたが(おそらく実体が存在しない)、IISのインストールで作成された「inetpub」フォルダーと筆者が「C:\」のルートに作成しておいた「demo.txt」は参照することができました。
レジストリの差分は、「レジストリエディター」(Regedit.exe)に「コンテナーID\Hives」サブフォルダーのレジストリファイル(_delta)を読み込むことで確認できます。例えば、「System_Delta」を読み込むと、コンテナーが「HKEY_LOCAL_MACHINE\SYSTEM」に対して行った変更を見ることができます。
Copyright © ITmedia, Inc. All Rights Reserved.