かつて山市良と呼ばれたおじさんのブログ

セイテクエンジニアのブログ  かつて山市良と呼ばれたおじさんのブログ  メモ. Windowsコンテナーの新機能|Windows Server 2025大特集フォローアップ

 

 

メモ. Windowsコンテナーの新機能|Windows Server 2025大特集フォローアップ

2025年07月18日配信
2025年07月18日更新
執筆者:山内 和朗

 Windowsコンテナーの機能は、Windows Server 2016で初めて搭載され、その後、イメージサイズの抑制や起動の高速化など行われてきました。Windows Server 2025における新機能について確認しました。

 

Windows Serverにおけるコンテナーサポート

 

 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)

WAC(v2)の新機能、コンテナーホストの簡単セットアップ

 

 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)ランタイムを選択して、コンテナーホストとしてセットアップする
画面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> sc.exe delete "Docker"

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
PS C:¥Users¥Username>  .\install-docker-ce.ps1

 

containerdの最新バージョンへの入れ替え(-ContainerDVersion省略時、1.6.6がインストールされる):

PS C:¥Users¥Username> Stop-Service -Name "containerd" -Force
PS C:¥Users¥Username> sc.exe delete "containerd"

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
PS C:¥Users¥Username>  .\install-containerd-runtime.ps1 -DockerDVersion 2.1.3

※-DockerDVersionの他に、-NerdCTLVersion(既定0.21.0)と-WinCNIVersion(既定0.3.0)のバージョン指定も可能。

 

memo52_scr02b
画面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によるインストール
画面3 旧バージョンWAC(画面はWAC 2311)までは、現在既にメンテナンスされておらず、サポートもされていないDockerMsftProviderによる旧手順の方法が長く残っていた

 

Windows Server 2025の新機能「コンテナーの移植性」とは?

 

 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ビルドのコンテナーのみ
図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のコンテナーについては、引き続きプロセス分離モードで実行可能
図2 Windows Server 2025のWindowsコンテナーの実行イメージ。Windows Server 2022のコンテナーについては、引き続きプロセス分離モードで実行可能

 

画面4 Windows Server 2025のコンテナーホスト上で、Windows Server 2025(Nano Server)とWindows Server 2022(Nano Server)の両方のコンテナーをプロセス分離モードで実行しているところ
画面4 Windows Server 2025のコンテナーホスト上で、Windows Server 2025(Nano Server)とWindows Server 2022(Nano Server)の両方のコンテナーをプロセス分離モードで実行しているところ

 

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

 

memo52_scr06
画面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のイメージはサイズが大きすぎて、軽量でコンパクトとはとても言えない

画面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)|...|フォローアップ

blog_yamanxworld_subscribe

blog_yamanxworld_comment

blog_yamanxworld_WP_ws2025

最新記事