TechReport

技術者情報

ソリューション

2016年7月6日(水)公開

第198回

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コンテナについて現時点までに分かっていることをまとめてみようと思います。

記事INDEX

2種類のWindowsコンテナ

Windows Server 2016で提供予定のWindows コンテナは、2つの種類のコンテナを稼働させることができるようになっています。1つは、「Windows Server コンテナ」と呼ばれるコンテナホストおよび、その他のコンテナとOSのカーネル部分を共有するタイプ。もう1つは、Hyper-V上の仮想マシンと同様に、「Hyper-Vコンテナ」としてカーネル部分も完全に独立分離された状態で稼働するタイプです。

過去の掲載記事においても、コンテとは?について解説しました。おさらいとしてコンテナについて簡単に解説します。

コンテナエンジンがWindows Server 2016上でサービス提供を行い、その上のコンテナ内で様々なアプリケーションが稼働することになります。各コンテナにはOSやアプリケーション実行に必要なライブラリファイルなどは含まれず、アプリケーション本体のみとなり、アプリケーションとOSの分離が実現されています。必要なのは、コンテナのアプリケーションの実行に必要なCPUリソース、ディスク領域とメモリ領域となります。

これによって、OSやアプリケーションの実行に必要なライブラリファイルなどは共通リソースから参照されることになり、ハードディスク領域やメモリ領域の節約になります。コンテナの起動自体は、BIOS、OSのブートなどが不要なため、アプリケーション単体が起動するためだけの短時間で完了することとなります。コンテナごとのアプリケーションによるファイルの変更やレジストリの変更内容は、コンテナごとのSandboxと呼ばれる領域に随時書き込まれて保存されていきます。

コンテナ技術のイメージとしては、ちょうど仮想マシンのチェックポイントを作成するような感覚で、元のOSイメージからどんどん枝分かれし、様々なコンテナごとに小さいスナップショットが作られていくような感じと考えています。作成された様々なコンテナは、ローカルリポジトリという場所に保存して、必要なときに呼び出して再利用することが可能です。

コンテナのメリットは、小さい、早い、展開・復元が簡単、といった点があげられます。

予想とは異なったHyper-Vコンテナ

TP3まではHyper-Vコンテナは実際に動くものが提供されていなかったので、予想の範囲でこんなものになるのではないかという構成を掲載しました。「Hyper-V」というキーワードから、Hyper-Vの機能を持ったコンテナになるのでは、という予想でした。簡単に言えば、コンテナの中で、コンテナが動くというものです。

Hyper-Vコンテナと同時に提供が予告されていた新しいHyper-Vの機能「Nested Hyper-V」は、Hyper-V上でHyper-Vを有効にするための機能で、Hyper-Vコンテナのための機能追加と考えられました。実際にTP4でHyper-Vコンテナを動かしてみると、この予想が多少外れていることが分かりました。

Hyper-Vコンテナ予想
Hyper-Vコンテナ予想
Hyper-Vコンテナ実際
Hyper-Vコンテナ実際

実際のHyper-Vコンテナは、1つ1つのコンテナがコンテナホスト上の特別な仮想マシン内で隔離された状態で稼働するというものでした。Windows Serverコンテナは、コンテナのOSイメージ(カーネル)を共有し、コンテナの実行スペースも他のコンテナと共有されています。Hyper-Vコンテナは、Hyper-V上の仮想マシンと同様にHyperVisor上でホストや他のコンテナから隔離され独立して稼働することができます。

また、TP4時点では、Hyper-VコンテナのOSイメージはNanoServerに限定されています。ですが、Windowsコンテナのように、コンテナホストとコンテナのOSイメージが同じOSでなければならない、というコンテナの大前提の制約を受けません。Windows Serverで構築されたコンテナホスト上であっても、OSがNanoServerであるHyper-Vコンテナは利用可能です。

これは、Hyper-Vコンテナがコンテナホストからも隔離された状態であるということになります。これらを簡潔に言い表すと、Hyper-VコンテナはNanoServerをOSとした非常に小さな仮想マシンをコンテナのように取り扱う技術というところでしょうか。

Hyper-Vコンテナはコンテナ技術とHyper-Vによる仮想化技術を組み合わせることで実現した新しいコンテナ技術と言えます。そのために必要となったのが、NanoServerとNested Hyper-Vという新しい技術でした。

Hyper-Vコンテナを動かすためには

InvokeVで公開している「Windows Container Manager」を使ってHyper-Vコンテナを見てみましょう。

英語版のWindows Server 2016のGUI付きTP4の仮想マシン上でコンテナホストを構築しています。この仮想マシンはNested Hyper-Vを有効にしています。TP4現在では、Hyper-Vコンテナを利用するには英語版に限定されています。

Windows Container Manager
Windows Container Manager

コンテナOSイメージとして、NanoServerとWindowsServerCoreがインストールされています。WindowsServerCoreのコンテナイメージは、GUI付きWindows ServerとOSの互換性があるので、Windows Serverコンテナとして、コンテナを利用することが可能です。ですが、NanoServerのコンテナOSイメージから作成したコンテナは、通常のコンテナとしては、このままでは利用できません。

通常のコンテナとしてNanoServerのコンテナを起動するとエラーとなる
通常のコンテナとしてNanoServerのコンテナを起動するとエラーとなる

NanoServerのコンテナOSイメージから作成したコンテナをHyper-Vコンテナとして起動します。コンテナの「Runtime Type」を「Default」から「HyperV」に変更することで、Hyper-Vコンテナとなります。

コンテナホストとOSが異なった場合でも、Hyper-Vコンテナとして利用することが可能です。

NanoServer上に構築したコンテナホストではもちろん、NanoServerのコンテナOSイメージから作成したコンテは、通常のコンテナとしても、Hyper-Vコンテナとしても利用可能です。

NanoServer上のコンテナホスト
NanoServer上のコンテナホスト

以下はコンテナOSイメージとコンテナホスト、コンテナのRuntimeTypeの組合せです。

ホストOS\コンテナOSイメージWindowsServerCoreNanoServer
Windows Server 2016 GUIDefaltHyperV
Windows Server CoreDefaltHyperV
NanoServer Defalt・HyperV

この表を見てもわかるように、Hyper-VコンテナはコンテナOSイメージがNanoServerであることが必要です。また、コンテナホストとOSが異なっている場合でも、Hyper-Vコンテナは利用可能ということになります。

Hyper-Vコンテナの稼働中に何が起きているのか

Hyper-Vコンテナが起動すると、コンテナホスト上で仮想マシンワーカープロセス「vmwp.exe」が起動します。仮想マシンワーカープロセスはHyper-V上で仮想マシンが起動した場合と同じものです。つまり、Hyper-Vコンテナは仮想マシンと同様に、ホスト上で特別な仮想マシンが起動して、その中の隔離された空間(パーティション)内で稼働していることになります。

Hyper-Vコンテナが起動すると仮想マシンワーカープロセスが起動する
Hyper-Vコンテナが起動すると仮想マシンワーカープロセスが起動する

以上、現時点まででHyper-Vコンテナについて分かっている内容をまとめてみました。

Hyper-Vコンテナは、Hyper-Vによる仮想化技術と新しいコンテナ技術、NanoServer、Nested Hyper-Vをうまく組み合わせることで実現した新しいコンテナ技術と言えます。仮想マシンの利点と、コンテナの利点の両方を提供することのできるHyper-Vコンテナの正式提供開始が待ち遠しい限りです。

樋口 勝一

GMOインターネット株式会社

1999年6月GMOインターネットに入社。Windowsを用いたホスティング事業の立ち上げの際、サービス開発からその後の保守・運用まで1人で担当。2010年には「お名前.comWindowsデスクトップ」をリリースし、マイクロソフト社と強い信頼関係を構築。2007年から連続で「マイクロソフトMVPアワード」を受賞し、Windowsのスペシャリストとして活躍。

執筆者一覧

初めてのWindows Azure Pack本が発売

Windows Azure Pack プライベートクラウド構築ガイド
GMOインターネット株式会社 樋口 勝一 著

本書は、Windows Azure PackとHyper-Vを利用し、企業内IaaS(仮想マシン提供サービス)を構成するための、IT管理者に向けた手引書です。試用したサーバーは、最小限度の物理サーバーと仮想マシンで構成しています。Windows Azure Packに必要なコンポーネントのダウンロード、実際にプライベートクラウド構築する過程を、手順を追って解説しています。これからプライベートクラウドの構築を検討するうえで、作業負担の軽減に役立つ一冊です。

詳細はこちら