仮想化道場
Windows Server 2016 Technical Preview 3のコンテナ機能を見る・後編
実際に試してみよう!
(2015/10/9 06:00)
前回は、コンテナの重要性を解説した。今回は、Windows Server 2016 Technical Preview 3(TP3)を使って、実際にコンテナを試してみよう。
コマンドラインのPowerShellでの操作が前提に
今回は、適当なサーバーが手元になかったため、Windows Server 2016 TP3のテストに、パブリッククラウドのMicrosoft Azureを使用した。AzureのギャラリーにはWindows Server 2016 TP3が用意されているため、テスト環境も簡単に構築できる。
今回紹介するコンテナなどのテストはAzureで問題なくできるが、オンプレミスの物理環境とは異なるため、もしかすると異なる部分があるかもしれない。その点、ご了承いただきたい。
またWindows Server 2016 TP3は英語版のみが提供されているので、日本語表示は正式にはサポートされていない。機能によっては、日本語化するとトラブルが起きて、動作しなくなる場合もあるようだ。このため、当面は英語環境のままでテストしていった方がいいだろう。今回も、英語環境でテストを行った。
Windows Server 2016 TP3では、Windowsコンテナをサポートしているが、現状ではコマンドライン(PowerShell)での操作だけだ。コンテナの操作、管理などのGUIが用意されているわけではない。このため、PowerShellをある程度知っていないと使えないだろう。Windows Server 2016のリリース版において管理用のGUIが用意されるかどうかは、現状では不明だ。ただ、コンテナを使っていく上ではPowerShellが非常に便利なため、今後のことを考えれば、IT管理者はPowerShellを覚えておく方がいい。
さて、Windows Server 2016 TP3でWindowsコンテナを使えるようにするには、Windows Server 2016 TP3にコンテナホストを構築する必要がある。
まず、「Add Roles and Features」の「Features」で「Container」を追加する必要がある。ただ、これですぐにWindowsコンテナが利用できるわけではない。コンテナホストを設定する必要がある。
コンテナホストを手動で設定するのは、非常に手順が多く面倒くさい。そこで利用したいのが、GitHubに用意されている、Windowsコンテナのセットアップ用のスクリプトだ。
ます、Windows Server 2016 TP3のコマンドプロンプトを管理者権限で起動して、PowerShellを管理者権限で起動する(コマンドプロンプトを通常ユーザーで起動して、PowerShellを管理者権限で起動してもいい)。
その後、
wget -uri http://aka.ms/setupcontainers -OutFile .\ContainerSetup.ps1
を実行する。
すると、GitHubからContainerSetup.ps1というスクリプトを現在のディレクトリに作成してくれる。
その後、
ContainerSetup.ps1
を実行する。
このスクリプトでは、Windows Server 2016 TP3内部で、仮想スイッチやNATの構成を行うほか、GitHubからWindows Serverコンテナのファイルをダウンロードし、セットアップを行ってくれる。
便利ではあるのだが、スクリプトが終了するまで非常に時間がかかった。GitHubからのファイルのダウンロードに時間がかかったのか、原因はよく分からなかったが、Azureの環境において1時間ほどかかったている。途中で中断すると、いろいろ面倒なことになるため、セットアップが終了するまでそのままにしておく。
セットアップが終了した後に、再起動を行う。
これで、Windowsコンテナが利用できる。Windowsコンテナでは、GUIが搭載されたフルスペックのWindows Serverが搭載されているわけではなく、Windows Server 2016のServer Coreに相当する環境が提供されている(現状、Windows Server 2012/2008などのOS環境をWindowsコンテナのOS環境として利用することはできない)。将来的には、Windows Server 2016で新たにサポートされるNano Serverも、Windowsコンテナとして提供される予定だ。
GUIが搭載されたフルスペックのWindows Server 2016が、Windowsコンテナとしては提供されるかどうかは不明だ。しかしコンテナの使われ方を考えると、GUIがない、コンパクトなOSとして利用するのが便利だろう。
なお、ハイパーバイザーとコンテナの違いとして、一般的には、コンテナで利用できるOS環境としては、同じOSがベースとなるという点が挙げられる。つまりハイパーバイザーのように、複数のバージョンのOSを混在して利用することはできない。
Windows Server 2016のコンテナにこのような制限があるかどうかは、現状では不明だ
Windows Server 2016で利用できるWindowsコンテナは、GUIなしのWindows Server 2016のServer CoreやNano Server(予定)となっているため、OSのカーネルを大幅に変更した新バージョンがリリースされると、Windowsコンテナにも影響が出てくる。ただWindows Server 2012とWindows Server 2012 R2などのように、OSカーネルにあまり変更がない状況では動作する可能性もある。このあたりは、Windows Server 2016が正式にリリースされてからはっきりしてくるだろう。
また、実際にWindowsコンテナが利用される環境を考えれば、Windows Server 2016上でWindowsコンテナを構成して、アプリケーションをインストールするのではなく、開発環境のVisual StudioでWindowsコンテナを構成し、アプリケーションを開発して、パッケージ化することになるだろう。
Visual Studio 2015では、Docker向けのツールが用意されている。このツールを利用すれば、Docker APIを経由して、Windowsコンテナにアプリケーションが展開できる。ただし厳密に言えば、Dockerは、Windows Server 2016のカーネルに追加されるWindowsコンテナにアクセスするための、Docker用のサービスを経由して利用できる(このため、PowerShellで直接コントロールするWindowsコンテナとDockerコンテナは若干異なる)。
実際にWindowsコンテナを動かしてみよう
WindowsコンテナはGUIを持たないため、見た目はあまりにも地味だ。動作しているWindowsコンテナにアクセスするにはリモートコンピュータにアクセスするPSセッションを利用する。このため、見た目はWindowsコンテナが動作しているか分かりにくい。
まず、Windowsコンテナを作成する。PowerShell環境において、
$cont01 = New-Container -name "Cont01" -ContainerImageName WindowsServerCore -SwitchName "Virtual Switch"
を実行する。
このコマンドでは、cont01という名称で、Server Coreベースのコンテナを作成する。ネットワークは、コンテナのセットアップ時に作成されているVirtual Switchを使用する。
これにより、cont01というWindowsコンテナは、仮想ネットワークに接続され、リモートアクセスができるようになる。Windowsコンテナのネットワークアドレスは、起動した順番に172.16.0.0からアドレスが振られていく。コンテナホストに172.16.0.1が付与されるため、作成したWindowsコンテナには、172.16.0.2が振られる。
作成したWindowsコンテナを起動するには
Start-Container -Name "Cont01"
をPowerShellに入力する。
さらに、作成したWindowsコンテナにアクセスするには
Enter-PSSession -ContainerId $cont01.ContainerID -RunAsAdministrator
とPSセッションを使ってアクセスする。
Windowsコンテナの作成と起動は、非常に早く30秒ほどで終わってしまう。これは、Windowsコンテナ自体のサイズが小さいことにも由来する。Server CoreのWindowsコンテナのサイズをチェックすると9GBと表示されるが、コンテナホストとの差分だけしか持っていないため、実際には、1~2GBぐらいと考えられる。
さて、コンテナの管理を行うためには、状態を確認する「Get-container」コマンド、コンテナを停止するには「Stop-container -Name ”コンテナ名”」、コンテナを削除するには「Remove-Container -Name ”コンテナ名”」を利用する。
実際にコンテナを停止して、削除するには、瞬時に終わってしまう。ハイパーバイザーなどの環境では、これほど簡単にOS環境を作成したり、削除したりすることはできない。
Windowsコンテナにアクセスするのに、PSセッションを使用したが、見た目が分かりにくいため、リモートデスクトップ(RDP)を使ってみた。
RDPを使用するためには、先に、PSセッションでターゲットになるWindowsコンテナにアクセスして
net user administrator パスワード
でadministratorのパスワードを入力。
さらに、
net user administrator /active:yes
で、RDPのアクセスを許可する。
これで、WindowsコンテナのIPアドレスを使って、RDPでアクセスできる。ただし、作成したWindowsコンテナはServer Coreのため、RDPにはコマンド画面が表示されているだけだ。
*****
実際、Windows Server 2016 TP3のWindowsコンテナを試してみて、コンテナの良さは感じたが、現状では、なんとかコンテナがWindows Serverでサポートされた、というだけだ。管理用のツールなど、まだまだそろっていないモノが多い。実際、Windows ServerベースのDocker Hubなどのカタログサービスなども用意されていない。
Dockerとの関係においても、PowerShellで作成したWindowsコンテナは、Dockerサービスでコントロールできない問題点もある。このあたりは、リリース時には相互に運用できるようになってほしい。
また、開発ツールのVisual Studioとの連携も、まだまだといえる。Visual Studio上で必要なWindowsコンテナを構成して、アプリケーションを開発し、パッケージ化し、パブリッシュできるようになれば、DevOpsのサイクルがコンテナにおいてもできあがるので、ぜひ実現してほしい。
実際にWindows Server 2016がリリースされるのは、2016年の後半になるため、現状ではまだまだこんなところなのだろうか、という印象だが、コンテナ以外にもいろいろと楽しみな機能がそろっているので、製品版に向けて進化していくのを楽しみにしている。
2015年の年末ごろになる予定の次のTechnical Previewでも、レビューをお届けしたい。