以下の図1は、ハイパーバイザーベースの仮想化と、LinuxベースのDockerを例にコンテナーベースの仮想化を比較したものです。一言でいえば、ハイパーバイザーベースの仮想化は「ハードウエアレベルの仮想化」であり、コンテナーベースの仮想化は「OSレベルの仮想化」ということになります。
ハイパーバイザーベースの仮想化では、1つの物理ハードウエアを複数のパーティションに分割し、それぞれのパーティション(仮想マシン)上でゲストOSを実行できます。1つの物理ハードウエア上でWindowsやLinuxなど異なるゲストOSを実行でき、それぞれのゲストOS上にアプリケーションを展開できます。しかし、アプリケーションの実行はゲストOSが起動するのを待たなければなりませんし、同じOSを複数実行する場合には、ディスクやメモリのリソースが重複するため効率的でない部分もあります。
一方、コンテナーベースの仮想化は、コンテナーのイメージがコンテナーホストとのOSファイルやライブラリの差分を提供し、分離されたアプリケーション実行環境を実現します。コンテナーはホストOSのカーネルを共有するため、ゲストOSの起動を待たずにアプリケーションを実行できます。また、コンテナーはOSファイルやライブラリの差分だけを保持できればよいため、よりコンパクトで済みます。
LinuxベースのDockerは、コンテナーホストのLinuxカーネルをコンテナーで共有し、Dockerエンジン上でLinuxのさまざまなディストリビューションと同じアプリケーション実行環境をコンテナーとして実行できます。カーネルを共有するため、LinuxベースのDockerエンジン上でWindowsのコンテナーを実行することは不可能です。
そこで登場したのが、Windows Server 2016 TP3の「Containers」です。Windows Server 2016 TP3のContainersは、Windows Serverコンテナーを実行するためのコンテナーエンジンです。こちらは、Windows Serverコンテナーを実行することはできますが、Linuxコンテナーは実行できません。
以下の図2は、Windows Server 2016 TP3のコンテナーテクノロジを示したものです。最初に指摘しておかなければならないのは、“Windows版のDockerエンジン上でWindows Serverコンテナーが動作するわけではない”ということです。
Windows Server 2016 TP3のコンテナーエンジンのコアサービスは「Hyper-V Host Compute Service(C:\Windows\system32\vmcompute.exe)」です(画面4)。Windows Serverコンテナーは、Windows Server 2016 TP3のServer Coreインストールに相当するアプリケーション実行環境を提供します。「Hyper-V」という名前が付いていますが、Hyper-Vハイパーバイザーが動作しているわけではありません。
この他にも、コンテナーにネットワーク機能を提供する仮想スイッチやコンテナーにディスク領域を提供するストレージ機能で、Hyper-Vのテクノロジ(Hyper-V仮想スイッチ、VHDXファイル)が利用されています。
Windows Serverコンテナーは、PowerShellのContainersモジュールが提供するコマンドレットを使用して作成および管理できます。また、ローカル(C:\Windows\System32\docker.exe)やリモートのWindows、Linux上のDockerクライアントから、Windows Serverコンテナーを操作することもできます。さらに、Visual Studio開発環境のDockerサポート環境から、直接アプリケーションを展開できるようにもなる予定です(現在、Visual Studio 2015 Tools for Docker Previewの提供中)。
Windows Server 2016における“Dockerのサポート”とは、Dockerクライアントに対するDocker APIの管理互換を提供することを意味しています(画面5)。
「Hyper-V Host Compute Service」がWindows版のDockerエンジンと言い換えることができるかもしれませんが、このサービスはDockerクライアントと直接対話することはできません。「SetupContainer.ps1」でインストールされる「Docker Daemon」サービスが、フィルタードライバーを介して「Hyper-V Host Compute Service」と対話し、Dockerクライアントに対して管理インターフェースを提供するのです。
Windowsの「サービス」管理ツールで確認してみると、「Docker Daemon」サービスは「C:\Windows\System32\nssm.exe」を実行しているように見えます。実は、「NSSM(Non-Sucking Service Manager)」は、サービス化されていない実行可能ファイルをWindowsのサービスとして登録し、実行を制御するためのフリーのツールで、実際には「%PROGRAMDATA%\docker\runDockerDaemon.cmd」を開始します(画面6)。「runDockerDaemon.cmd」には、Dockerバイナリをデーモンモードで実行するためのコマンドライン(docker daemon)が定義されています。
Copyright © ITmedia, Inc. All Rights Reserved.