
かつて山市良と呼ばれたおじさんのブログ
セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ メモ. Windowsコンテナーの新機能|Windows Server 2025大特集フォローアップ
2025年07月18日配信
2025年07月18日更新
執筆者:山内 和朗
Windowsコンテナーの機能は、Windows Server 2016で初めて搭載され、その後、イメージサイズの抑制や起動の高速化など行われてきました。Windows Server 2025における新機能について確認しました。
Windows Serverのサーバーの機能である「コンテナー」には、コンテナーランタイムは含まれません。Windows Server 2016で初めてコンテナー機能が実装されたとき、Windows ServerにDocker Enterprise(現在のMirantis Container Runtime)のライセンスとMicrosoftによるサポートが含まれる形で提供されました。現在、Mirantis Container Runtimeの利用とサポートは、Mirantis社から有償で提供されており、Microsoft自身はコンテナーランタイムを提供していません。
Microsoftがコンテナーランタイムを提供しなくなったように、コンテナーのエコシステムは変化が激しく、キャッチアップするのが大変です。現在、MicrosoftはAzureのクラウドとオンプレミスの両方で、Azure Kubernetes Service(AKS)を通じて完全かつフルマネージドのサービスを提供しており(AKSで使用されているコンテナーランタイムはcontainerd)、その中にはWindowsコンテナーのサポートも含まれます。Microsoftがコンテナーランタイムを含めて正式にサポートしているのは、Azure上のAKS、およびオンプレミスのAKS on Azure Local(旧称、AKS on Azure Stack HCI)とAKS on Windows Serverだけです。
アプリ開発や検証のためにスタンドアロン環境でWindowsコンテナーを実行したい場合は、Windows 10/11上のDocker Desktop(https://www.docker.com/、2025年5月からはMicrosoft Storeからの入手も可能に)を使用するか、Windows Serverに以下のいずれかのコンテナーランタイムを導入することになります。
作業の開始: コンテナー用の Windows の準備|Windows(Microsoft Learn)
Windows Admin Center v2(WAC《v2》)バージョン2410で利用可能な「Containers」拡張機能(この記事の執筆時点のバージョンは4.0.1)をインストールすると、「コンテナー」ツールを使用して、管理対象のWindows ServerにDocker CEまたはcontainerdのコンテナーランタイムとともに、「コンテナー」の機能をインストールしてコンテナーホストとしてセットアップすることができます(画面1)。オプションでkubectlツールをインストールすることもできます。なお、「すべて選択」を選択した場合は、containerdとkubectlが選択されますが、containerdを選択した場合、Docker CEも一緒にインストールされます(continerdはDocker CEの下位ドライバー、既定のランタイムとして機能します)。この方法でインストールすると、コンテナー機能のインストールのために自動的に再起動されますが、再び「コンテナー」ツールにアクセスした際にDockerサービスが登録、起動します。なお、Hyper-V分離モードを使用する予定がある場合はDocker CEをインストールしてください(現状、containerdはプロセス分離モードのみに対応)。また、Hyper-V分離モードのために、別途、「Hyper-V」の役割をインストールする必要があります。
画面1 コンテナーランタイムとしてDocker(Docker CE)ランタイムを選択して、コンテナーホストとしてセットアップする
WAC(v2)のContainers拡張機能は、コンテナーランタイムやツールの特定バージョンをインストールするもので、更新する機能はないようです。*1 各コンテナーランタイムの最新バージョンや更新バージョンをインストールするには、作業の開始: コンテナー用の Windows の準備のに示された手順で、スクリプト(install-docker-ce.ps1またはinstall-containerd-runtime.ps1)を使用してインストールしてください。例えば、PowerShellで次のコマンドラインを実行することで、WAC(v2)でインストールされたものを含めDocker CEやcontainerdを最新バージョンに更新することができました(画面2)。
*1 Containers 4.0.1の場合、Docker CE 28.1.1(2028-05-28)、containerd 2.1.1(2025-05-21)がインストールされます。この記事の執筆時点の最新バージョンはDocker CE 28.3.1(2025-06-03)、containerd 2.1.3(2025-06-20)です。
Docker CEの最新バージョンへの入れ替え:
PS C:¥Users¥Username> Stop-Service -Name "Docker" -Force PS C:¥Users¥Username> Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/microsoft/Windows-Containers/Main/helpful_tools/Install-DockerCE/install-docker-ce.ps1" -o install-docker-ce.ps1 |
containerdの最新バージョンへの入れ替え(-ContainerDVersion省略時、1.6.6がインストールされる):
PS C:¥Users¥Username> Stop-Service -Name "containerd" -Force PS C:¥Users¥Username> Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/microsoft/Windows-Containers/Main/helpful_tools/Install-ContainerdRuntime/install-containerd-runtime.ps1" -o install-containerd-runtime.ps1 |
※-DockerDVersionの他に、-NerdCTLVersion(既定0.21.0)と-WinCNIVersion(既定0.3.0)のバージョン指定も可能。
画面2 WAC(v2)によりインストールされたDockerクライアントとDocker CEエンジン。最新バージョンを使用するには、サービスを削除してから、手動でインストールする必要があった
WACバージョン2311の「Containers」拡張機能(バージョン2.29.0)までは、コンテナホストのセットアップ機能はDocker Enterprise(現在のMirantis Contaner Runtime)をインストールするための旧手順でセットアップしようとします。このWindows Server 2016からのDockerMsftProviderを使用したインストール方法は2023年4月までサポートされましたが(当初は2022年9月まで)、その後、メンテナンスもサポートもされない手順がWACに長い間残されていました(画面3)。
画面3 旧バージョンWAC(画面はWAC 2311)までは、現在既にメンテナンスされておらず、サポートもされていないDockerMsftProviderによる旧手順の方法が長く残っていた
Windows Server 2025の新機能のページには、Windowsコンテナー関連の新機能として「コンテナーの移植性」と説明されています。
Windows Server 2025 の新機能 > コンテナーの移植性|Windows Server(Microsoft Learn)
Windowsコンテナーには「プロセス分離(Process Isolation)」と「Hyper-V分離(Hyper-V Isolation)」の2つの実行モードが用意されています。プロセス分離モードでは、コンテナーはコンテナーホストとカーネルを共有し、コンテナーホストのカーネル上で動作します。このモードはLinuxベースのコンテナーと同様の実装です。一方、Hyper-Vコンテナーは、Utility VMと呼ばれる仮想化層(一種の仮想マシン)が、コンテナーにカーネルを提供することで、コンテナーホストとコンテナーのOSバージョン(ビルド)の違いを吸収します。Windows Serverの既定はプロセス分離モード、Windows 10/11のDocker Desktopの既定はHyper-V分離モードです。
大前提として、Windowsコンテナーは、それを実行するコンテナーホストと同じOSビルドをプロセス分離モード(カーネルを共有)実行でき、古いOSビルドはHyper-V分離モードで実行できます(図1)。コンテナーホストよりも新しいOSビルドのコンテナーを実行することはできません。
図1 これまでのWindowsコンテナーの実行イメージ。プロセス分離モードで実行できるのは、ホストと同じOSビルドのコンテナーのみ
Windows Server 2025(実際にはWindows Server Annual Channel 23H2以降)からは、特定の古いOSビルド(Windows Server 2022)のコンテナーを、引き続きプロセス分離モードで実行できるようになりました(図2、画面4、画面5)。これにより、コンテナーホストやAKS KubernetesクラスターのWindows ServerノードのOSバージョンが新しくなっても、既存のコンテナーに変更を加えることなく、引き続き実行できるようになります。現在、AKSではWindows Server 2022またはWindows Server 2019のノードプールで、Windowsコンテナーをプロセス分離モードで実行することがサポートされています。AKSがWindows Server 2025に対応したとしても、Windows Server 2022ベースのコンテナーであれば、何も変更しなくてもWindows Server 2025のノードプールで実行できるということです。*2
*2 Azure Kubernetes Service (AKS) 上の Windows コンテナーのベスト プラクティス > Windows OS のバージョン|Azure(Microsoft Learn)
図2 Windows Server 2025のWindowsコンテナーの実行イメージ。Windows Server 2022のコンテナーについては、引き続きプロセス分離モードで実行可能
画面4 Windows Server 2025のコンテナーホスト上で、Windows Server 2025(Nano Server)とWindows Server 2022(Nano Server)の両方のコンテナーをプロセス分離モードで実行しているところ
画面5 Windows Server 2025のコンテナーホスト上で、Windows Server 2019(Nano Server)のコンテナーはプロセス分離モードで実行できない。Hyper-V分離モードを使用する必要がある
実は、Windows Server 2022の時点ではこのコンテナーの移植性はプレビュー機能として提供され、Windows 11の新しいOSビルド22000上で古いOSビルド20348のWindows Server 2022ベースのコンテナーをプロセス分離モードで実行することができました。Windows Server 2025では、Windows Server 2022のコンテナーをプロセス分離モードで正式に実行できるようになったということです。もちろん、この機能は最新のWindows 11バージョン24H2(OSビルド26100)上のDocker Desktopでも利用可能であり、有効化パッケージ(EKB)によるマイナーバージョンアップになる次のバージョン25H2でも同様にWindows Server 2022のコンテナーをプロセス分離モードで実行することができるはずです(画面6)。
画面6 Windows 11バージョン24H2のDocker Desktop上で、プロセス分離モードで動作するWindows Server 2022(Nano Server)のコンテナー
Windows Server 2025におけるWindowsコンテナーの新機能について、一応確認しましたが、果たしてWindowsコンテナーは運用環境で利用されているのか、今回の記事の内容が誰かの役に立つのか、少し心配です。
AzureではWindowsよりもLinuxのインスタンスのほうが上回っているそうです。AKSに限って言えば、Linuxベースのコンテナーがほとんどなのではないでしょうか。WindowsコンテナーはベースOSイメージのサイズが大きく(2025年6月のwindows/server:ltsc2025の場合、ダウンロードサイズ7.02GB、イメージサイズ16.7GB、しかもwindows/server:ltsc2022よりも肥大化)、イメージの取得やアプリのビルド、コンテナーの起動に時間がかかります。一般的なコンテナーの利点である、アプリを“軽量にパッケージ化”できるとはとても言えません(画面7)。Nano Serverはサイズが小さく抑えられていますが(2025年6月のwindows/nanoserver:ltsc2025の場合、ダウンロードサイズ186.5MB、イメージサイズ471MB)、Nano Serverは.NET(旧称、.NET Core)アプリ用であり、その目的であればLinuxベースのコンテナーで代替できます。ちなみに、UbuntuのベースOSイメージのサイズは100MB以下(ダウンロードサイズ29.72MB、イメージサイズ78.1MB)であり、Nano Serverでさえまだ大きく感じます。IISの役割を利用したい(Nano Serverでも可)、Win32アプリをコンテナー化したい(Nano Serverでは不可)というような明確な理由がない限り、Windowsコンテナーを選択する必要性は少ないのではないでしょうか。
画面7 Windows ServerのベースOSイメージはサイズが大きすぎて、軽量でコンパクトとはとても言えない。Nano Serverを含め、Windows Server 2022のときよりも、サイズが肥大化しているのも気になるところ
ところで、Azure Cloud Shellはご存じでしょうか。クラウドで動作するPowerShellまたはbash環境で、Azure PowerShellやAzure CLIを実行できるものです。このサービスは当初、PowerShell環境はWindowsコンテナー、bash環境はLinuxコンテナーで実装されていました。しかし、クロスプラットフォームのPowerShell(旧称、PowerShell Core)が正式に利用可能になってからは、両方の環境がLinuxベースのコンテナーで動くようになりました。このブログで以前に紹介した「Microsoft Connected Cache for Enterprise(Preview)」も、Windowsデバイスのためのキャッシュサービスを提供するものでありながら、動かしているのはLinuxベースのコンテナーです。Microsoft自身、快適なエクスペリエンスをエンドユーザーに提供するには、Windowsコンテナーでは難しいと考えたのでしょうか。余計な一言でした。あくまでも、個人的な見解です。
Windows Server 2025大特集(1)|...|フォローアップ