2017/07/10

Process Explorer で Windows Container の動きを眺める


http://ec.nikkeibp.co.jp/item/books/P98960.htmlhttp://ec.nikkeibp.co.jp/item/books/P98560.html  +

Windows Server 2016 のコンテナー ホストで Windows コンテナーを実行中に Windows Sysinternals の Process Explorer を実行してみると...

これが実に面白い。





Windows Server コンテナー (カーネルをホストと共有するタイプの Windows コンテナー) の場合、コンテナーごとに CExecSvc.exe (Container Execution Agent) プロセスが開始され、その子プロセスとしてコンテナー内のプロセス (以下の例では cmd.exe と、その子プロセス psping64.exe) が見えます。psloggedon でコンテナーのログオン ユーザーの情報を見ると、User Manager\ContainerAdministrator になってます。


Hyper-V コンテナー (--isolation=hyperv) の場合、1 つ目のコンテナーを作成すると、vmcompute.exe (Hyper-V ホスト コンピューティング サービス) の子プロセスとして vmwp.exe (仮想マシン ワーカー プロセス) が立ちあがります。C:\ProgramData\docker\windowsfilter\xxxx\UtilityVM ... のファイルを I/O している様子から、コンテナー用の仮想マシン (UtilityVM) と思われます。その後、コンテナーごとにさらに vmwp.exe が開始します。たぶん、UtilityVM からクローンされた仮想マシンで、これが Hyper-V コンテナーのカーネルを提供し、コンテナーをホストしているんだと思う。

コンテナー内のプロセスは、UtilityVM (のクローン?)が提供するカーネル上のプロセスだから、コンテナーホストからは見えない。コンテナー内のプロセスは見えないけど、C:\ProgramData\docker\windowsfilter\xxxx\Files\Windows ... とか、-v 共有内のパスとかのファイル アクセスは見える (ホスト上のフラットなディレクトリ構造だから)。

以上、見たまま(と想像)をお伝えしました。


・・・


なお、この例では、microsoft/nanoserver の Windows Server コンテナーと Hyper-V コンテナーを動かしています。Nano Server も Windows なので、Sysinternals のツールは使えます。ただし、Nano Server は WOW64 (Windows 32-bit on Windows 64-Bit) を搭載していないので、64 ビット ネイティブなツール (上の例では、psping.exe ではなく、psping64.exe) を使う必要がありますし、CUI 環境なのでコマンド ツールを使う必要がありますし、初回実行時に EULA に同意するために -accepteula オプションが必要です。

Sysinternals Suite for Nano Server というものがありますが、これは Nano Server 専用に改良したとかいうものではなく、Nano Server で動く 64 ビット ネイティブなコマンド ツールだけをまとめた、Sysinternals Suite のサブセットです。

Sysinternals Suite for Nano Server (SysinternalsSuite-Nano.zip) 
[URL] https://technet.microsoft.com/en-us/sysinternals/bb842062.aspx

Windows コンテナーがどのように実装されたのか、その経緯について、面白い読み物を見つけました。

コンテナー - Windows Server コンテナーで Windows 開発者が Docker を使えるように (MSDN マガジン April 2017)
[URL] https://msdn.microsoft.com/ja-jp/magazine/mt797649.aspx

以上、ご参考まで。

(PR) 新刊のお知らせ『Windows Sysinternals 徹底解説 改訂新版』 第 5 弾 (2017/07/03)
Windows Container Base OS Image 10.0.14393.1066 and Update Docker EE Engine 17.03.x  (2017/04/12)


0 件のコメント: