連載
» 2017年10月24日 05時00分 公開

その知識、ホントに正しい? Windowsにまつわる都市伝説(95):図解で理解できる(はず)Microsoftの仮想化技術――Windows上で稼働するLinux、動かしているのはどのテクノロジー?(その2) (2/2)

[山市良,テクニカルライター]
前のページへ 1|2       

Linuxコンテナ on Windows(Docker for Windows)

 以下の画面4は、Windows 10に「Docker for Windows」をインストールして、Docker Hubから取得(docker pull)したLinuxコンテナを実行(docker run)したものです。

画面4 画面4 Docker for Windowsで作成、実行したUbuntuのLinuxコンテナ。Linuxコンテナ用のDocker環境は、Hyper-V仮想マシン(MobyLinuxVM)が提供している。Windowsコンテナをサポートする環境に切り替えることも可能

 この環境を技術的に図示すると、以下の図3のようになります。

図3 図3 Docker for Windowsを使用したLinuxコンテナの実行(現行バージョンの場合)

 図3を見れば分かるように、Windows上でLinuxコンテナが動いているように“見せているだけ”で、その実体はHyper-Vの仮想マシン(MobyLinuxVM)で実行されるLinuxのネイティブなDockerホスト環境のDockerデーモンに、Windows上のDockerクライアントからリモート接続(名前付きパイプを介して)しているのです。

 Docker for Windowsは、Windows 10 Anniversary Update以降の「コンテナ」機能に対応しており、こちらに切り替えることで、WindowsコンテナをHyper-Vコンテナとして実行することも可能です(画面5)。

画面5 画面5 Docker for WindowをWindowsコンテナ用のDocker環境に切り替え、WindowsコンテナをHyper-Vコンテナとして実行

 その場合、Linux仮想マシン内のDockerデーモンは使用せず、Windows側でDockerバイナリをデーモンとして起動するDockerサービスがWindowsコンテナのサポートを提供し、Dockerクライアントはローカルのデーモンに接続することになります(後述の図5を参照)。

Linuxコンテナ on Windows(Hyper-Vコンテナ)

 以下の画面6は、Hyper-VコンテナとしてLinuxコンテナを実行するという、Windows 10 Fall Creators Update(バージョン1709)、およびWindows Server バージョン1709(Server Coreのみ)以降で利用可能になる予定の新機能です([注]バージョン1709は米国時間2017年10月17日にリリースされましたが、この機能についてはプレビュー段階です)。

画面6 画面6 Windows 10上でHyper-Vコンテナとして動作中のLinuxコンテナとWindowsコンテナ(画面はWindows 10 Insider Previewバージョン1709、ビルド16288)

 このテクノロジーの実現方式を見る前に、Windows Server 2016におけるWindowsコンテナの実装を確認しておきましょう。

 Windowsコンテナは、簡単に言うと、Docker Hubで提供されるWindowsのベースOSイメージを使用して作成、実行する、Windows向けのアプリケーション実行環境を提供するDockerコンテナです。Windows Server 2016はWindowsの機能として「コンテナ」を提供します。また、最新のDockerのソースコードには、Windowsコンテナのサポートが統合され、Windows Server 2016には「Docker Enterprise Edition(Docker EE)」の使用権が含まれます。

 そして、Docker Hubでは、運用環境向けにWindows Server 2016のServer Coreインストールをベースにした「microsoft/windowsservercore」と、Nano Serverインストールをベースにした「microsoft/nanoserver」、そしてこれらのベースOSイメージにアプリケーションを追加した幾つかのイメージが公開されています(本稿はWindows Server バージョン1709のリリース以前に執筆したものであることに注意してください)。

 Windows Server 2016では、これらのベースOSイメージから作成したWindowsコンテナを「Windows Serverコンテナ」(--isolation=process)、または「Hyper-Vコンテナ」(--isolation=hyperv)のいずれかの分離モードで実行することができます。Windows 10は、Hyper-Vコンテナの作成と実行をサポートしています。

 Windows ServerコンテナはLinuxのDocker環境と同じように、ホストOSのカーネル上で動く、プロセスベースのサンドボックス環境を提供します。これを図示したものが、以下の図4になります。

図4 図4 Windows Server 2016のWindows Serverコンテナ(分離モード)でWindowsコンテナを実行するイメージ

 Dockerクライアントによる操作やDockerデーモン(サービス)のリモート接続の構成、「Dockerfile」による構成など、ほとんどがLinuxのDocker環境と共通です。

 なお、Windows Serverコンテナの場合、Windowsコンテナの実体はホストOSのカーネル上で動作するプロセスです(画面7)。そのため、ホストOSがWindows Server 2016(ビルド14393)なら、同じビルド番号であるバージョン10.0.14393.xのベースOSイメージから作成したWindowsコンテナの実行が可能です。

画面7 画面7 Windows Serverコンテナをプロセスの視点で見ると、ホストOS上で動作するプロセス(CExecSvc.exeの子プロセス)であることが分かる

 LinuxのネイティブなDocker環境では、「cgroups」というプロセスベースのサンドボックス環境のコンテナ技術が用いられています。Windows Serverコンテナは、Windowsの「ジョブ」(プロセス、スレッド、ジョブのジョブ)の機能を拡張した「サーバサイロ(Server Silo)」という技術が利用されています。また、ネットワークやディスクI/Oには、Hyper-Vの仮想スイッチやNetNAT、Windowsファイアウォール、仮想HDD(vhd/vhdx)の機能が利用されています。

 一方、Hyper-Vコンテナは、Windows Serverコンテナの環境をさらにHyper-Vの仮想化技術で分離し、コンテナ間およびコンテナとホスト間の隔離性を高めたものです(画面8)。

画面8 画面8 WindowsコンテナをHyper-Vコンテナ(分離モード--isolation=hyperv)として実行した場合のプロセス。コンテナごとにUtility VMとコンテナの仮想マシンワーカープロセス(wmwp.exe)が実行されている

 こちらは、ホストOSのカーネルに依存しないため、異なるバージョンのベースOSイメージのWindowsコンテナを実行できます(少なくとも下位バージョンの実行は可能になると思いますが、変化が激しい分野ですので、上位バージョンの実行サポートは難しいかもしれません)。

 そして、前出の画面6で示したように、Hyper-Vの分離によりLinuxコンテナの実行も可能になる予定です。これを図示したものが、以下の図5になります。

図5 図5 Hyper-Vコンテナとして実行されるWindowsコンテナとLinuxコンテナの実装イメージ

 Hyper-Vコンテナでは「Utility VM」と呼ばれる分離環境(Hyper-V仮想マシンのようなものですが、Hyper-Vからは見えません)がOSカーネルを提供し、その上にサンドボックス環境が準備され、コンテナが実行されます。

 Windowsコンテナの場合は、ベースOSイメージの一部として、Hyper-Vコンテナ用のUtility VMのイメージ(ファイルシステムとレジストリハイブ)が用意されています。Linuxコンテナの場合、プレビュー時点では、「LinuxKit」のコンテナ用Linux、またはUbuntuベースのコンテナ用LinuxがUtility VMの機能を提供します。

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows Server 2016テクノロジ入門−完全版』(日経BP社)。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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