Windows 10におけるWindowsコンテナの「プロセス分離モード」対応最新情報:企業ユーザーに贈るWindows 10への乗り換え案内(64)
Windows 10 November 2019 Update(バージョン1909)の新機能の一つに、Windowsコンテナの「プロセス分離モード」に関する制限緩和があります。今回は、Windows 10のプロセス分離モード対応について振り返りながら、この新機能について紹介します。
Windows 10におけるプロセス分離モードに関する公式情報
「Windows Server 2016」で初めて実装されたDockerのサポートは、Windows 10 Anniversary Update(バージョン1607、ビルド14393)に対しても提供されました。
Windows Serverには「Docker Enterprise for Windows Server」(旧称、Docker Enterprise Edition、Docker EE)の使用権が提供され、Windows ServerでDockerのコンテナホスト(Dockerサーバ)を構築することができ、Windowsコンテナを「プロセス分離モード」(Windows Serverコンテナ)と「Hyper-V分離モード」(Hyper-Vコンテナ)のいずれかで実行することができます。
Windows 10では、「Docker Community Edition」(Docker CE、現在はDocker Desktop Community)でHyper-V分離モードのみの実行がサポートされました。
本連載第42回では、「Stable版Docker Desktop 2.0.0.2」(Docker Engine 18.09.1)とWindows 10 October 2018 Update(バージョン1809)との組み合わせで、Windows 10でもWindowsコンテナをプロセス分離モードで実行できるようになったことを紹介しました。
Windows 10におけるプロセス分離モードへの対応は、以下の「Windows Container Version Compatibility(Windowsコンテナのバージョン互換性)」ページには現状含まれていませんが、「コンテナーについてよく寄せられる質問」ページの「Windows 10でプロセス分離モードでWindowsコンテナを実行できますか?」のところで説明されています。
- Windows Container Version Compatibility(最終更新日:2018年11月15日)[英語](Microsoft Docs)
- コンテナーについてよく寄せられる質問(Microsoft Docs)
また、「コンテナーについてよく寄せられる質問」ページの「コンテナーのライセンスについて、実行できるコンテナーの数に制限はありますか?」では、Windows 10でWindows Server CoreやNano ServerのベースOSイメージを使用するライセンス条件についても説明されています。
Windows 10では、テストおよび開発目的でのみ、上限なくWindowsコンテナを実行できます。それ以外の目的でWindowsコンテナを実行することはできません。それ以外の目的(運用環境での実行)にはWindows Serverのコンテナホストが必要であり、そのライセンス条件に従う必要があります。
プロセス分離モードのWindowsコンテナはホスト上のプロセスとして実行され、ホストOSと同じ容量のメモリとCPU数(論理プロセッサ数)を認識し、複数のコンテナ間でリソースを共有します。Hyper-V分離モードのコンテナには、コンテナごとに「UtilityVM」という仮想マシンが準備され、既定で仮想メモリ1GB、仮想プロセッサ2個が割り当てられます。そのため、プロセス分離モードを利用できると少ないリソースで素早くコンテナをビルドでき、スタートアップも早いという利点があります。
これまでのプロセス分離モードはビルド一致が必須条件
Windows ServerまたはWindows 10でWindowsコンテナをプロセス分離モードで実行する場合、WindowsコンテナはホストOS上のプロセスとして実行されることになります。そのため、ホストOSとWindowsコンテナのベースOSのOSビルド番号が一致している必要があります(リビジョン番号までの一致は不要)。
つまり、同じビルドのWindowsコンテナはプロセス分離モードまたはHyper-V分離モードで実行でき、下位ビルドのWindowsコンテナはHyper-V分離モードでのみ実行できます。上位ビルドのWindowsコンテナはサポートされません。
例えば、Windows 10 May 2019 Update(バージョン1903、ビルド18362)のDocker Desktopでは、Windows Server, version 1903(ビルド18362)のWindows Server CoreおよびNano Serverイメージをプロセス分離モード(Windows Serverの既定、Windows 10では--isolation=processの指定が必要)で実行できますが、それ以前のビルドのイメージを実行するにはHyper-V分離モード(Windows 10の既定、Windows Serverでは--isolation=hypervの指定が必要)で実行する必要があります(画面1、画面2)。
ホストとWindowsコンテナのビルドが一致しない場合、「Error response from daemon:……:The container operating system does not match the host operating system.」のエラーが発生します。
Windows 10 バージョン1909におけるプロセス分離モードの制限緩和
プロセス分離モードのビルド一致要件は、Windows Server, version 1903およびWindows 10 バージョン1903(ビルド18362)までの要件です。Windows Server, version 1909およびWindows 10バージョン1909(ビルド18363)ではこの要件が緩和され、下位ビルドのWindowsコンテナをプロセス分離モードで実行できるようになりました。
この新機能については、以下のページの「Containers on Windows」で説明されています。また、別の連載「Microsoft Azure最新機能フォローアップ」の第94回では、Windows Serverについて紹介しました。
- What's new in Windows 10, version 1909 IT Pro content[英語](Microsoft Docs)
- Windows Server, version 1909が正式リリース――「プロセス分離モード」の制限が緩和(連載:Microsoft Azure最新機能フォローアップ 第94回)
プロセス分離モードの要件の緩和は、全ての下位ビルドに対してというわけではありません。筆者が確認した限り、Windows 10 バージョン1909(ビルド18363)の場合は、同一ビルド18363に加えて、1つ前のビルド18362のWindows Server CoreおよびNano Serverイメージをプロセス分離モードで実行することができました(画面3)。

画面3 Windows 10 バージョン1909では、同一ビルド18363だけでなく、1つ前のビルド18362のWindows Server CoreおよびNano Serverイメージをプロセス分離モードで実行できる
Windows Server, version 1909では、2つ前のビルド17763のNano Serverイメージもプロセス分離モードで実行できましたが、Windows 10バージョン1909でもリリース直後は実行できましたが、その後の更新された環境では「Error response from daemon: … encountered an error during Start: failure in a Windows system call: The virtual machine or container exited unexpectedly.(0xc0370106).」というエラーが表示されたり、STOPエラー(ブルースクリーン)でホストがクラッシュしたりすることもありました。
Windows 10の品質更新プログラムの影響なのか、更新されたイメージの影響なのか、それともDocker Desktopの新バージョンの影響なのかは不明です。通常のビルド不一致のエラーとは異なりますが、Hyper-V分離モードでは引き続き問題なく実行できます(画面4)。
PowerShell DirectのWindowsコンテナ対応について
Windows Server 2016 Hyper-Vで利用可能になった、Windowsを実行するHyper-V仮想マシンに対する「PowerShell Direct」は、Windowsコンテナに対してもサポートされます。PowerShell DirectによるWindowsコンテナへの接続は、「docker attach」や「docker exec」コマンドのようにWindowsコンテナのシェルに対話接続するのに利用できます。実は、この機能につい最近まで気が付きませんでした。
Hyper-V仮想マシンについては、「Enter-PSSession」および「Invoke-Command」コマンドレットの「-VMName」または「-VMId」オプションに仮想マシンを指定することで、PowerShell Remotingと同じように仮想マシンのPowerShellセッションに接続できます。Windowsコンテナについては、「-ContainerId」オプションが用意されています(画面5)。
Enter-PSSessionコマンドレットのヘルプにはこのオプションがありますが、Invoke-Commandコマンドレットのヘルプにはありません。しかし、Invoke-Commandコマンドレットでも-ContainerIdオプションは機能します。
Enter-PSSessionやInvoke-Commandコマンドレットの-ContainerIdオプションにコンテナIDを指定すると、「docker run」コマンドの「-it(対話的)」や「-d(デタッチ)」オプションで実行中のWindowsコンテナに接続することができます。
このとき指定するコンテナIDとは、「docker ps」で表示される短いIDではなく、「docker ps --no-trunc」で表示される完全なIDである必要があります。docker runを-dオプションで実行した場合は、実行結果としてこの完全なIDが返されます。
その他の注意点としては、Windows PowerShellは管理者として実行する必要があることと、接続先のWindowsコンテナがWindows PowerShellを搭載していることです。Windows Server CoreイメージはWindows PowerShell 5.1を標準搭載しているので、PowerShell Directで接続できます。現在サポートされるNano Serverイメージは、Windows PowerShellや関連コンポーネントが削除されているため、PowerShell Directで接続することはできません。
筆者紹介
山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(2019-2020)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
さようならSAC-T! これまでの、これからのWindows 10の更新チャネルをざっくりと解説
2019年春にリリースされるWindows 10の新バージョンから、ブランチ準備レベル「半期チャネル(対象指定)」が廃止されることが発表されました。これにより、どのような影響があるでしょうか。Windows Update for Business(WUfB)を利用していない限り、何の影響もないでしょう。WUfBを利用しているなら、更新後に設定を確認しておきましょう。次期Windows 10最新動向:リリース秒読みの「19H1」はこう変わる
間もなくリリースされるWindows 10の新しい機能アップデート「19H1」。それに実装される新機能をまとめてみた。また、同時に変更となるライフサイクルなどについても解説する。複雑怪奇? Windows 10の大型更新とサポート期間を整理する
Windows 10では従来のWindows OSと異なり、年2回、大型アップデートの提供が行われるようになった。それに伴い、サポート期間もバージョンごとに設定されるなどの変更が行われており、かなり複雑なものとなっている。本稿では、アップデートの提供タイミングならびにそのサポート期間などを整理する。Windows Update for Businessってどうなったの?
Windows 10の登場ですっかり変わってしまったWindows Update。IT管理者の多くが戸惑っているに違いありません。「Windows 10 バージョン1511 ビルド10586」に合わせ、「Windows Update for Business」が利用可能になりました。しかし、筆者を含む多くの人が想像していたのとは違い、SaaSタイプのサービスではありませんでした。Windows 10の更新プログラム適用で地雷を踏まないためのWindows Update運用法
Windows Updateによるアップデートの適用は、場合によっては不具合を起こす可能性もある。アップデートによって不具合が発生しないことを確認してから適用するとよい。そのためのWindows Updateによる適用を延期する方法を紹介しよう。