WSLコンテナーは、専用のwslc.exeコマンドからDocker互換のコマンドを発行でき、コンテナー機能を制御するAPIも用意される。
コンテナーとは、OSレベルの仮想化とも呼ばれ、Linuxなどではカーネルのもつリソース分配機能などを使い、オペレーティングシステムの中に独立したアプリケーション実行環境を作り出すもの。仮想マシンとは異なり、通常のアプリケーションとして起動されるので、起動や初期化が素早く行えるという利点を持つ。
もともと、Linuxで開発され、使われてきた技術なので、多くのイメージ(コンテナーの実行環境や利用するアプリケーションなど指定したもの)が作られていて、インターネット上のリポジトリを使って、イメージから簡単にコンテナーを作成できる。こうしたコンテナーパッケージ管理ユーティリティとしてDockerがある。
Windowsも、Win32環境向けのコンテナー技術が存在するが、技術的には、仮想マシンを使わないと、分離された実行環境を作れないため、普及するには至っていない。WSLの目的の1つは、Windows上で、Linuxのコンテナーを利用できるようにすること。このためにWSLからGPUアクセスを可能にするなどの準備が行われてきた。
こうして登場したのがDocker Desktopである。これは、専用のWSLディストリビューションを持ち、その上のdockerデーモン(dockerd)を、Win32側のGUIツールから制御する。Linuxでもdockerdを制御するクライアントコマンドは、Unixソケットまたはネットワークを介してREST APIで通信を行っている。 Docker Desktopでは、ネットワークを介して、WSL側のdockerデーモンをWin32側のGUIクライアントが制御する。
WSLコンテナーの仕組みだが、wslc.exeコマンドによるDocker互換コマンドの実行、およびwslcsdk.dll経由のAPIによるコンテナの管理、制御があり、どちらもwslservice.exeにIPCでコマンドを送信する(写真01#%VM%#)。起動されるWSLは、WSLコンテナー専用のもので、wslコマンドでは表示されない。Docker Desktopでは、WSLディストリビューションが見えていた。
-

写真01: WSLコンテナーは、Win32側と仮想マシン(WSL)側をHyper-Vハイパーバイザーの機能を使って接続する
※WSL improvements and the new Containers CLI and APIs | DEM346 - YouTubeより引用
wslservice.exeは、ハイパーバイザーの持つ、Hyper-V Socket(hvsocket)を介して、WSL側のコンテナランタイム(moby)にコマンドを送信する。hvsocketは、ハイパーバイザーの機能なので、ネットワークプロトコル(TCP/IP)を経由するよりも高速で効率がよい。
・独自の統合サービスを作成する
https://learn.microsoft.com/ja-jp/windows-server/virtualization/hyper-v/make-integration-service
このコンテナランタイムはmoby projectをベースにしているのではないかと思われる。
・The Moby Project
https://github.com/moby/moby
また、WSLコンテナーの発表と同時に、Win32側ストレージに高速でアクセスが可能なvirtiofsが装備された。これは、Win32側ファイルシステムにアクセスする場合に利用する。
・virtiofs - shared file system for virtual machines
https://virtio-fs.gitlab.io/
・Windows版Virtiofs
https://github.com/virtio-win/kvm-guest-drivers-windows/wiki/Virtiofs:-Shared-file-system
なお、コンテナーのローカルストレージは、Win32側のユーザーディレクトリのAppData\Local\wslc以下にVHDXファイル(仮想ハードディスクファイル)として保存される。
今回のタイトルネタは、アーサー・C・クラーク(Arthur C. Clarke)の「宇宙のランデヴー」(ハヤカワ文庫SF。Rendezvous with Rama、1973)である。太陽系外から来た小惑星は「ラーマ」と名付けられたが、人工物であることが判明する。いわゆるファースト・コンタクトものである。個人的な意見だが、本作品は、1970年の「リングワールド」(Ringworld、Larry Niven、1970)に対するクラークなりの返答ではないかという気がしている。
