連載
» 2015年09月17日 05時00分 公開

所要時間は1分未満! 今すぐできるWindows Serverコンテナーの作り方――あなたの知らないコンテナーの世界(その2)vNextに備えよ! 次期Windows Serverのココに注目(27)(2/3 ページ)

[山市良,テクニカルライター]

さあ、始めましょう! 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 画面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 画面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にコピーしてマウントし、ドライブ文字を割り当てて参照したところです。

画面5 画面5 コンテナーのVHDXファイルを別のPCにコピーしてローカルマウントしたところ。コンテナーに対する変更が書き込まれている

 ベースOSイメージに存在するフォルダーツリーへのアクセスは拒否されましたが(おそらく実体が存在しない)、IISのインストールで作成された「inetpub」フォルダーと筆者が「C:\」のルートに作成しておいた「demo.txt」は参照することができました。

 レジストリの差分は、「レジストリエディター」(Regedit.exe)に「コンテナーID\Hives」サブフォルダーのレジストリファイル(_delta)を読み込むことで確認できます。例えば、「System_Delta」を読み込むと、コンテナーが「HKEY_LOCAL_MACHINE\SYSTEM」に対して行った変更を見ることができます。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。