検索
連載

Windows ServerのDockerサポートとは?――あなたの知らないコンテナーの世界(その1)vNextに備えよ! 次期Windows Serverのココに注目(26)(3/4 ページ)

2015年8月20日(日本時間)、Windows Server 2016の最新プレビュー版「Windows Server 2016 Technical Preview 3(TP3)」が公開されました。TP3では、コンテナーテクノロジおよび「Docker」のサポートが初めて提供されています。今回からは、Windows Serverのコンテナーテクノロジを解説していきます。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

Linuxベースの「Docker」とWindows Serverベースの「Containers」の違いと関係

 以下の図1は、ハイパーバイザーベースの仮想化と、LinuxベースのDockerを例にコンテナーベースの仮想化を比較したものです。一言でいえば、ハイパーバイザーベースの仮想化は「ハードウエアレベルの仮想化」であり、コンテナーベースの仮想化は「OSレベルの仮想化」ということになります。

図1
図1 ハイパーバイザーベースの仮想化(左)とコンテナーベースの仮想化(右)

 ハイパーバイザーベースの仮想化では、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コンテナーが動作するわけではない”ということです。

図2
図2 Windows Server 2016 TP3のコンテナーテクノロジ

 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ハイパーバイザーが動作しているわけではありません。

画面4
画面4 コンテナーホストとしてセットアップした直後の状態。コンテナーのエンジンである「Hyper-V Host Compute Service」が有効になり、Windows Serverコンテナーのイメージ(WindowsServerCore)と仮想スイッチ(VirtualSwitch)が準備される

 この他にも、コンテナーにネットワーク機能を提供する仮想スイッチやコンテナーにディスク領域を提供するストレージ機能で、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)。

画面5
画面5 「C:\Windows\System32」フォルダーにインストールされる「docker.exe」は、「Docker Daemon」サービスとしてDocker APIによる管理に対応。ローカルのDockerクライアントとしても機能する

 「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)が定義されています。

画面6
画面6 「nssm edit "Docker Daemon"」を実行すると、「Docker Daemon」サービスの登録情報を確認できる

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る