MicrosoftがBuild 2026で発表した「WSLコンテナー」(WSL Containers)のプレビューが始まっている。WSLコンテナーとは、Windows 11のWSLを使ってコンテナーを実現するもの。
すでにWindows用には、Docker Desktopなどがあるが、WSLコンテナーも基本的な部分は同じことができる。しかし、Dockerなどが持つCompose機能(複数コンテナの同時実行、一括管理)などは持たない。
WSLコンテナーは制御用のAPIを公開しており、複雑な処理は、ユーザー(サードパーティ)がAPIを使って制御できる。簡単に言うと、WSLコンテナーはWSL2組み込みのコンテナー機能だ。
実際にプレビュー版のWSLコンテナーを試す
WSLコンテナーのプレビュー版は、現在公開中のWSLのプレビューWSL Ver.2.9.3に含まれている。このため、現在利用中のWSLをプレビュー版に切り替えることで、WSLコンテナーを試すことが可能だ。
そのためにはPowerShellなどのコンソールから以下のコマンドを使う。なお、ディストリビューションとしては、Ubuntuを入れておく。筆者は、Ubuntu-26.04で評価した。
wsl.exe --update --re-release
これでWSL Ver.2.9.3がインストールされる。なお、WSLコンテナーの制御コマンドのwslc.exeもこのときインストールされるが、WSLプレビュー版をアップデートしたコンソールでは正しく動作しなかった。コンソールウィンドウを1回閉じて、PowerShellなどWin32側で以下のコマンドが実行できたら、WSLコンテナーは動作している。
wslc.exe --version
WSLコンテナーは、すべてWin32側からwslc.exeコマンドを使って操作する。サブコマンドはdockerのコマンドと同じであり、dockerのCLI(コマンドライン・インターフェース)に慣れた人なら難しくないはずだ。
コンテナーに慣れていない人向けに言うと、Dockerなどのコンテナシステムツールは、Container定義を使って実行環境を作成し、これを起動する。コンテナー内には、アプリケーションが動作しており、原則としてOSはホスト側環境と同一である。
コンテナーは、OSレベルの仮想化とも言われており、カーネルの機能を使って、OSの実行環境内に、他のプロセスとは独立した実行環境を作る。このとき仮想マシン支援機能は使わなくてもよい。
コンテナー内で実行するアプリケーションは、原則CLIアプリケーションだが、ネットワークを利用して、外部にGUIを持つことは不可能ではない。なお、Dockerコマンドでは、コンソールをイメージのコンソールに接続するためのコマンドが用意されており、ユーザーがイメージ内でシェルやコマンドを実行することもできる。
さて、実際にちょっと複雑な実行例をためしてみよう。これは、Microsoftのブログに記載されていたサンプルと同じものである。
wslc.exe run -d --name=webtop -e PUID=1000 -e PGID=1000 -e TZ=Etc/UTC -p 3000:3000 -p 3001:3001 lscr.io/linuxserver/webtop:ubuntu-kde
これは、ブラウザ内にUbuntuのKDEデスクトップを表示するもの。初回はさまざまなファイルをダウンロードしてコンテナーを作成するため時間がかかるが、プロンプトに戻ってきたら、ブラウザを開いて、「http://localhost:3000」を開く。これでブラウザ内にUbuntuのGUIデスクトップが表示され、マウスなどで操作が可能になる(記事冒頭画面)。
wslc.exeのコマンドに関しては、オンラインヘルプ「wslc.exe -?」がある。また、各コマンドやサブコマンドに対しても「wslc.exe <コマンド> [<サブコマンド>] -?」でヘルプメッセージを見られる。
今のところ、Microsoftが公開しているドキュメントには、以下のようなものがある。
●WSLコンテナー
https://learn.microsoft.com/ja-jp/windows/wsl/wsl-container?tabs=csharp
●WSLでコンテナーを使い始める
https://learn.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-containers
WSLコンテナーの制御は、Win32側にあるwslc.exeと、wslservice.exeがIPC(プロセス間通信)で通信する。wslservice.exeは、WSL側のcontainerランタイム(moby)とHyper-V Socketを介して通信する。containerランタイムが、WSL側でコンテナーの生成や管理をする。
wslc.exeやWSLコンテナーAPIは、Win32側のwslservice.exeとプロセス間通信で接続する。wslservice.exeは、WSL内のcontainerランタイム(moby)とHyper-Vソケットを使って通信をする。実際のコンテナーの構築は、このランタイムが行なう(https://www.youtube.com/watch?v=i0M13ZvL04M から引用。以下同)
コンテナーは、ストレージ上に構築されるが、これは、Win32側の環境が持つVHDX(仮想ハードディスクファイル)が使われる。wslc.exeの場合、「%localappdata%\wslc\sessions」以下にコンテナーごとにディレクトリがあり、その下にストレージ用、スワップ用のVHDXファイルがある。これは、WSL側からもアクセスが可能になっていて、ここにコンテナーが展開される。
コンテナー内のアプリケーションがアクセスするストレージは、virtiofsを使って、Win32側のディレクトリをコンテナー側に公開する。
従来のWSLからのWin32へのアクセスにはDrvFSと呼ばれる仕組みが使われていたが、今回はWSL側にvirtiofsが実装され、Microsoftによれば、ファイルアクセスが2倍速いということだ。この機能は、コンテナーだけでなくWSLのディストリビューションでも利用できる。
このほか、ネットワークモードにも変更があり、新たに「Consomme」(コンソメ)と呼ばれるモードが利用できるようになった。コンソメは、LinuxのネットワークトラフィックをWin32側のネットワークで処理する。Win32側が持つネットワーク環境をLinux側でも利用できる。さらにWSL側のトラフィックをWin32側のセキュリティポリシーで処理することが可能になる。
●Consomme - The OpenVMM Guide
https://openvmm.dev/guide/reference/backends/consomme.html
前述のように、WSLコンテナーはWSL標準のコンテナー機能である。すでにDockerなどWSLを利用するコンテナーシステムツールがある。将来的には、サードパーティのコンテナー管理ツールも、下位レベルではWSLコンテナーを使うようになるのではないか?
APIまで用意したのは、単にMS製のコンテナーシステムを作りたかったわけではなく、標準の切り口を用意し、抽象化したコンテナー機能を公開して、カーネル開発とコンテナー利用をある程度分離させたかったからではないかと考えられる。
今回のプレビューを見るに、WSLコンテナーはWSL自体の大きな変更といえる。このところあまり動きのなかったWSLだが、今年は少し動きがありそうだ。
本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事
-
第534回
PC
Windows 11におけるアプリインストーラーとwinget -
第533回
PC
PCの世界ではすっかり存在感が薄くなった光学メディアをあらためて整理 -
第532回
PC
モニターの情報が含まれる「VESA EDID」をWindowsで調べる方法 -
第531回
PC
Windowsのコンソール上でUnix/Linuxの標準的なコマンドを動かす「Windows CoreUtils」 -
第530回
PC
Windows 11でタスクバーの位置の移動機能が復活するのは結局どうなった? プレビュー版の現状を見る -
第529回
PC
Windowsの標準スクリプト言語であるPowerShellの現状をあらためて紹介する -
第528回
PC
Windows 11の標準機能でメモリに問題がないかを診断する -
第527回
PC
Windowsがクラッシュする原因を究明する方法 AIを活用すると結構早い -
第526回
PC
今年6月にPCが起動しなくなる心配はないが、セキュアブートが機能しないとWindowsのセキュリティ機能は一部使えなくなる -
第525回
PC
6月以降「PCが起動不可能に?」と間違った騒がれ方をしている原因の「セキュアブート」とは? - この連載の一覧へ














