DockerはDocker+Wasmのテクニカルプレビュー2を発表した。今回のプレビューではWasmワークロード実行の簡易化を目指し、Fermyonのspin、 Deislabsのslight、Bytecode Allianceのwasmtimeといったランタイムエンジンを含めたランタイムのサポートを拡張している。
Docker+Wasmの3つの新しいWasmエンジンは、Docker+Wasmテクニカルプレビュー1で既にサポートされていたWasmEdgeを含め、サポートされるランタイムの合計数が4つとなった。 これらはすべて、最近containerd
プロジェクトに加わったrunwasi
ライブラリに基づいている。
runwasi
は、containerdで管理されるwasmワークロードの実行を可能にするRustライブラリで、もともとサポートしていたLinuxコンテナに加え、新しいコンテナタイプの抽象化を効果的に実現する。Runwasiは、その名の通りWASI
ベースであり、Wasmランタイムの共通プラットフォームを提供するWebAssemblyの、モジュラーシステムインターフェイスである。つまりWASIをターゲットにコンパイルされたプログラムであれば、WASIに準拠したランタイムで実行できるのだ。
Wasmコンテナは通常、コンパイルされたWasmバイトコードファイルのみを含み、追加のバイナリライブラリを必要としないため非常に軽量だ。これはWasmコンテナがLinuxコンテナよりも起動が速く可搬性が高いことを意味する。WasmEdgeの共同設立者であるMichael Yuan氏が、Twitterで述べているように、例えばLinux用の"スリム"と言われているPythonコンテナイメージは40MB以上あるのに対し、Wasmコンテナの場合は7MB未満で済む。
Wasmコンテナはcontainerdで直接サポートされているため、Docker Desktopの最新リリースでDocker+Wasm technical preview 2を試すには、設定メニューの"開発中の機能"で"containerdを使用"オプションを有効にするだけだ。wasmtimeを使用してWasmコンテナを実行するには、以下のようにコマンドを叩く。
$ docker run --rm --runtime=io.containerd.wasmtime.v1
--platform=wasi/wasm secondstate/rust-example-hello:latest
これにより、Wasmコンテナは、Docker ComposeやKubernetesなどのオーケストレーションプラットフォームを使用したLinuxコンテナと並行できる。 またDocker Desktopでは、WasmアプリをOCIコンテナにパッケージ化し、Wasmランタイムを埋め込むことで、DockerHubなどのコンテナレジストリを通じて共有可能だ。