WindowsのWSLにコンテナー機能が登場、専用wslc.exeからDocker互換コマンドを実行可能
WindowsのWSLにコンテナー機能が登場、専用wslc.exeからDocker互換コマンドを実行可能

WSLコンテナーが登場した。専用のwslc.exeコマンドからDocker互換のコマンドを発行でき、コンテナー機能を制御するAPIも用意される。コンテナーとはOSレベルの仮想化とも呼ばれ、Linuxなどではカーネルの持つリソース分配機能などを使い、オペレーティングシステムの中に独立したアプリケーション実行環境を作り出すものだ。仮想マシンとは異なり、通常のアプリケーションとして起動されるので、起動や初期化が素早く行えるという利点を持つ。

Linuxで発展したコンテナー技術とDocker

コンテナーはもともとLinuxで開発され、使われてきた技術である。多くのイメージ(コンテナーの実行環境や利用するアプリケーションなどを指定したもの)が作られていて、インターネット上のリポジトリを使って、イメージから簡単にコンテナーを作成できる。こうしたコンテナーパッケージ管理ユーティリティとしてDockerがある。

WindowsもWin32環境向けのコンテナー技術が存在するが、技術的には仮想マシンを使わないと分離された実行環境を作れないため、普及するには至っていない。WSLの目的の1つは、Windows上でLinuxのコンテナーを利用できるようにすることだ。このために、WSLからGPUアクセスを可能にするなどの準備が行われてきた。

Pickt横長バナー — Telegram用の共同買い物リストアプリ

Docker Desktopの登場

こうして登場したのがDocker Desktopである。これは専用のWSLディストリビューションを持ち、その上のdockerデーモン(dockerd)をWin32側のGUIツールから制御する。Linuxでもdockerdを制御するクライアントコマンドは、Unixソケットまたはネットワークを介してREST APIで通信を行っている。Docker Desktopでは、ネットワークを介してWSL側のdockerデーモンをWin32側のGUIクライアントが制御する。

WSLコンテナーの仕組み

WSLコンテナーの仕組みは、wslc.exeコマンドによるDocker互換コマンドの実行と、wslcsdk.dll経由のAPIによるコンテナーの管理・制御の2つからなる。どちらもwslservice.exeにIPCでコマンドを送信する(写真01)。起動されるWSLはWSLコンテナー専用のもので、wslコマンドでは表示されない。Docker DesktopではWSLディストリビューションが見えていた。

写真01: WSLコンテナーは、Win32側と仮想マシン(WSL)側をHyper-Vハイパーバイザーの機能を使って接続する(DEM346 - YouTubeより引用)

wslservice.exeは、ハイパーバイザーの持つHyper-V Socket(hvsocket)を介して、WSL側のコンテナランタイム(moby)にコマンドを送信する。hvsocketはハイパーバイザーの機能なので、ネットワークプロトコル(TCP/IP)を経由するよりも高速で効率がよい。このコンテナランタイムは、moby projectをベースにしているのではないかと思われる。

ストレージとvirtiofs

WSLコンテナーの発表と同時に、Win32側ストレージに高速でアクセスが可能なvirtiofsが装備された。これはWin32側ファイルシステムにアクセスする場合に利用する。なお、コンテナーのローカルストレージは、Win32側のユーザーディレクトリのAppData\Local\wslc以下にVHDXファイル(仮想ハードディスクファイル)として保存される。

タイトルネタは「宇宙のランデヴー」

今回のタイトルネタは、アーサー・C・クラークの「宇宙のランデヴー」(ハヤカワ文庫SF。Rendezvous with Rama、1973)である。太陽系外から来た小惑星は「ラーマ」と名付けられたが、人工物であることが判明する。いわゆるファースト・コンタクトものである。個人的な意見だが、本作品は、1970年の「リングワールド」(Ringworld、Larry Niven、1970)に対するクラークなりの返答ではないかという気がしている。

Pickt記事後バナー — 家族イラスト付きの共同買い物リストアプリ