検索
連載

開発者に朗報! Windows 10でWindows Serverコンテナが実行可能に企業ユーザーに贈るWindows 10への乗り換え案内(42)(2/2 ページ)

Windows 10の開発者向け機能として、Dockerによる「Windowsコンテナ」のサポートがあります。これまでは、Hyper-Vで分離された「Hyper-Vコンテナ」だけがサポートされていましたが、最新の「Docker Desktop for Windows」では、「Windows Serverコンテナ」もサポートされました。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

Hyper-V分離とプロセス分離を“見える化”してみよう

 Windows Sysinternalsの「Process Explorer(Procexp.exe)」ユーティリティーを使用して、Windowsコンテナの実行と終了の様子を見てみましょう。まずは、Windows 10の既定のHyper-Vコンテナ(Hyper-V分離)として実行してみます。

 「docker run」コマンドを実行すると、「vmcompute.exe」プロセス(Hyper-Vホストコンピューティングサービス)の子プロセスとして、新たに「vmwp.exe」プロセス(仮想マシンワーカープロセス)と「vmmem」プロセスが一つずつ生成されます(画面3のProcess Explorerで緑色にハイライトされた2プロセス)。これらは分離されたカーネル環境をコンテナに提供するもので、Hyper-Vコンテナごとに生成されます。

画面3
画面3 Hyper-Vコンテナごとにvmwp.exeプロセスとvmmemプロセスが割り当てられ、これらが分離されたカーネル環境を提供する

 また、Hyper-V分離をサポートするために、1つのvmwp.exeプロセスと2つのvmmemプロセスが常駐しています。前出の画面3を見ると、約1GBのメモリが新しいコンテナのためのプロセス専用に割り当てられているのが分かるでしょう(Private Bytes)。

 対話的に実行中のコンテナを「exit」コマンドで終了すると、コンテナ用に生成された2つのプロセスも終了します(画面4のProcess Explorerで赤色にハイライトされた2プロセス)。

画面4
画面4 Hyper-Vコンテナを終了すると、そのコンテナ用に生成されたvmwp.exeプロセスとvmmemプロセスも終了する

 一方、Windows Serverコンテナ(プロセス分離)として実行した場合、新たにvmwp.exeプロセスとvmmemプロセスが生成されることはありません。

 代わりに、Windows Serverコンテナごとに「CExecSvc.exe」プロセス(Container Execution Agent)が生成され、その子プロセスとして「conhost.exe」プロセス(コンソールウィンドウホスト)と孫プロセスとして「powershell.exe」プロセス(Windows PowerShell)が生成されます。Process Explorerで見るこれらのプロセスツリーは、ホスト(Windows 10)のカーネル環境で実行されるプロセスにすぎないのです(画面5画面6)。

画面5
画面5 Windows Serverコンテナ(プロセス分離)の場合、CExecSvc.exeの子プロセスとしてconhost.exeプロセス、孫プロセスとしてpowershell.exeプロセスが生成される
画面6
画面6 Windows Serverコンテナを終了すると、CExecSvc.exeのプロセスツリーも終了する

 プロセス分離のWindows Serverコンテナでは、Docker EngineおよびWindows 10のコンテナ機能が、ファイルシステム構造などコンテナ用の抽象化レイヤーを提供し、コンテナはホストのカーネルを共有します。そのため、CPUやメモリリソースをコンテナ専用に割り当てる必要もなく、少ないリソースでコンテナを実行でき、コンテナの起動時間も短縮されます。これは開発者にとって多くのメリットがあるでしょう。

 ここまでの例では「servercore:1809」イメージを使用しましたが、Windows 10 バージョン1809上では「nanoserver:1809」イメージをプロセス分離で実行することも可能です。以下の画面7は、「nanoserver:1803」をHyper-V分離、「nanoserver:1809」をプロセス分離、「Linuxコンテナ(ubuntu)」をLCOW(Docker Engine 18.09から--platform=linuxオプションの指定は不要)で実行しているところです。

画面7
画面7 Windows 10 バージョン1809上でHyper-V分離のnanoserver:1803コンテナ(wincot03、背景緑)、プロセス分離のnanoserver:1809コンテナ(wincont04、背景青)、LCOWのubuntu:latestコンテナ(lnxcont05、背景赤)を同時に実行しているところ

 注意点があるとすれば、Hyper-Vコンテナはホストと同一バージョンおよび下位バージョンのWindowsコンテナイメージを実行できますが、Windows Serverコンテナはホストのカーネルを共有するため、ホストのOSビルドとイメージのOSビルドが一致している必要があります。例えば、Windows 10 バージョン1809(OSビルド10.0.17763.x、.xは一致していなくてよい)上で実行できるのは、同じOSビルドのnanoserver:1809およびservercore:1809です。

筆者紹介

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

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(2018/7/1)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る