Windows 10におけるWindowsコンテナの「プロセス分離モード」対応最新情報企業ユーザーに贈るWindows 10への乗り換え案内(64)

Windows 10 November 2019 Update(バージョン1909)の新機能の一つに、Windowsコンテナの「プロセス分離モード」に関する制限緩和があります。今回は、Windows 10のプロセス分離モード対応について振り返りながら、この新機能について紹介します。

» 2019年12月24日 05時00分 公開
[山市良テクニカルライター]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「企業ユーザーに贈るWindows 10への乗り換え案内」のインデックス

企業ユーザーに贈る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 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)。

画面1 画面1 Windows 10 バージョン1809から1903までは、同じビルドのWindowsコンテナをプロセス分離モード(--isolation=process)で実行できる
画面2 画面2 下位ビルドのWindowsコンテナは、Hyper-V分離モード(Windows 10の既定のため、--isolation=hypervは省略可)で実行できる

 ホストと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について紹介しました。

 プロセス分離モードの要件の緩和は、全ての下位ビルドに対してというわけではありません。筆者が確認した限り、Windows 10 バージョン1909(ビルド18363)の場合は、同一ビルド18363に加えて、1つ前のビルド18362のWindows Server CoreおよびNano Serverイメージをプロセス分離モードで実行することができました(画面3)。

画面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)。

画面4 画面4 ビルド17763のNano Serverイメージはビルド不一致ではなく、システムコールの失敗で実行できなかった。Hyper-V分離モードでは問題なく実行できる

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)。

画面5 画面5 docker attachやdocker execコマンドの代わりに、PowerShell Directを使用してWindowsコンテナのPowerShellセッションに接続できる

 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.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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