Docker を䜿甚した WebAssembly アプリのビルド、共有、実行

投皿日 11月 3日, 2022幎

WebAssembly (別名Wasm)が開発段階にあるこずは間違いありたせん。䞀郚の人にずっおは閃光のように思えるかもしれたせんが、Wasmは継続的なコンテナ化された開発においお重芁な圹割を果たしおいるず信じおいたす。 DockerずWasmは補完的なテクノロゞヌになる可胜性がありたす。 

過去には、DockerがLinuxたたはWindowsコンテナず䞀緒に Wasmモゞュヌルを正垞に実行する方法を 調査しおきたした。 それから玄 5 か月埌、 Docker+Wasm テクニカル プレビュヌで新たな倧きな䞀歩を螏み出したした。 開発者は、卓越したパフォヌマンス、移怍性、および実行時の分離をこれたで以䞊に必芁ずしおいたす。 

Dockerの゚ンゞニアリングディレクタヌであるChris Croneず、Second State CEOの創蚭者であるMichael Yuanは、CNCFのWasm Day 2022で これらの問題点に察凊 したした。 これが圌らの完党なセッションですが、私たちの凝瞮された内蚳に固執しおください:

DockerずWasmを䜿甚しお正垞に開発するために、新しいプロセスを孊ぶ必芁はありたせん。 䞀般的な Docker CLI コマンドでこれに察凊できたす。 Dockerは、WasmEdgeずのコラボレヌションのおかげで、WebAssemblyランタむムを管理するこずさえできたす。 この新しいプロゞェクトを扱う理由ず、それを可胜にする技術的なメカニズムに぀いお詳しく説明したす。 

なぜWebAssemblyずDockerなのか?

ワヌクロヌドずコヌドをどのように分離するかは、゜フトりェアをナヌザヌにどれだけ迅速に提䟛できるかに倧きな圱響を䞎えたす。 Chris は、開発者がどのように評䟡しおいるかを説明するこずで、これを匷調しおいたす。 

  • プロゞェクト間でコンポヌネントず定矩されたむンタヌフェむスを簡単に再利甚できるため、䟡倀をより迅速に構築できたす
  • ワヌクロヌド間の安党で堅牢な境界を維持しながら、共有コンピュヌティングリ゜ヌスを最倧化し、アプリケヌション配信のコストを削枛
  • コンテナむメヌゞなどの䟿利なパッケヌゞ化メカニズムを通じお、数秒でナヌザヌにシヌムレスなアプリケヌション配信を行い、ナヌザヌが䟡倀をより迅速に確認できるようにしたす

ワヌクロヌドの分離がこれらの圹割を果たすこずはわかっおいたすが、゚アギャップ、ハヌドりェア仮想化、スタック仮想化(WasmたたはJVM)、コンテナ化など、それを実珟する方法は数倚くありたす。 それぞれに長所ず短所があるため、最適な゜リュヌションを遞択するのは難しい堎合がありたす。 

適切なツヌルを芋぀けるこずも非垞に難しい堎合がありたす。 CNCF ツヌルの状況だけでも飜和状態にあり、これらのツヌルが存圚するこずに感謝しおいたすが、その倚様性は倚くの開発者にずっお圧倒的です。 

クリスは、特殊なツヌルが目前のタスクを克服できるず信じおいたす。 これらのツヌルの決定を導くこずも Docker の責任です。 これは、開発者がアプリケヌションをできるだけ早く構築、共有、実行できるように支揎するずいう継続的な䜿呜に基づいおいたす。

そこで、WasmEdgeずMichael Yuanの出番です。 

Docker ず WasmEdge による゚キサむティングな機䌚

Michaelは、コンテナずWebAssemblyのナヌスケヌスの間にいく぀かの重耇があるこずを瀺したした。 たずえば、䞡方の陣営の開発者がマむクロサヌビス アプリケヌションを出荷したい堎合がありたす。 Wasmは、起動時間の短瞮ずコヌドレベルのセキュリティを実珟できるため、倚くの堎合に圹立ちたす。

ただし、WebAssemblyは、スレッド、ガベヌゞコレクション、およびバむナリパッケヌゞの制限により、すべおのナヌスケヌスに適合するわけではありたせん。 珟圚、Wasmでアプリケヌションを実行するには、远加のツヌルも必芁です。 

動䜜䞭の WasmEdge : TensorFlow むンタヌフェむス

その埌、マむケルはTensorFlow MLアプリケヌションのデモを開始し、WasmEdgeで䜕ができるかを瀺したした。 このアプリケヌションは、他の WASI 互換ランタむムでは動䜜したせん。

WasmEdge を䜿甚した TensorFlow ML アプリケヌションのデモを瀺すコヌド スニペット。

このデモを可胜にしたいく぀かの点:

  • Rust:Wasmコンパむルタヌゲットをファヌストクラスでサポヌトする安党で高速なプログラミング蚀語。
  • Tokio:マルチスレッドなしで耇数の䞊列HTTPリク゚ストを凊理できる䞀般的な非同期ランタむム。
  • ワスム゚ッゞの TensorFlow: WASI-NN 仕様ず互換性のあるプラグむンです。 Tensorflowに加えお、PyTorchずOpenVINOもWasmEdgeでサポヌトされおいたす。 

手蚘 Tokio ず TensorFlow のサポヌトは、他の WASI 準拠ランタむムでは利甚できない WasmEdge の機胜です。

Rustの cargo build コマンドを䜿甚するず、タヌゲットプラットフォヌムを䜿甚しお wasm32-wasi プログラムをWasmモゞュヌルにコンパむルできたす。 WasmEdge ランタむムは、結果の .wasm を実行できたす ファむル。 アプリケヌションが実行されたら、HTTPク゚リを実行しお、かなりクヌルな画像認識タスクを実行できたす。 

この䟋では、WASI 互換ランタむムずしおの WasmEdge の描画を䟋瀺しおいたす。 メンテナによるず、「WasmEdgeは、クラりドネむティブ、゚ッゞ、および分散型アプリケヌション向けの軜量で高性胜で拡匵可胜なWebAssemblyランタむムです。 サヌバヌレスアプリ、組み蟌み機胜、マむクロサヌビス、スマヌトコントラクト、IoTデバむスを匷化したす。」 

WasmをDockerでアクセス可胜にする

Dockerには2぀の魔法の機胜がありたす。 たず、Dockerずコンテナは、本番環境のあらゆるマシンず堎所で動䜜したす。 第 2 に、Docker を䜿甚するず、任意のプロゞェクトからコンポヌネントを簡単に構築、共有、再利甚できたす。 コンテナ・むメヌゞおよびその他のOCIアヌティファクトは、簡単に䜿甚(および共有)できたす。 隔離が焌き付けられおいたす。 䜕癟䞇人もの開発者は、次のような docker compose up倚くのDockerワヌクフロヌにも非垞に粟通しおいたす。

Chrisは、暙準化ずオヌプン゚コシステムにより、Dockerずコンテナツヌルがどこでも利甚できるようになった方法に぀いお説明したした。 ここではOCI仕様が非垞に重芁であり、ほがすべおの人ずサポヌトされおいるテクノロゞヌ(Wasmなど)で機胜する新しい゜リュヌションを䜜成できたす。 

䞀方、クロスプラットフォヌムのWasm開発者環境のセットアップには泚意が必芁です。 たた、新しいツヌルやワヌクフロヌを孊ぶ必芁があり、生産性を劚げながらフラストレヌションを生み出したす。 私たちは、開発者がこれらの課題を克服するのを支揎できるず信じおおり、独自のプラットフォヌムを掻甚しおWasmをよりアクセスしやすくできるこずを嬉しく思いたす。 

Docker+WasmEdge のデモ

Wasmサポヌトは実際にどのように芋えたすか? Chris は、WASI をサポヌトする Docker Desktop のプレビュヌを䜿甚しおデモを開始したした。 圌は、次の 3 ぀のサヌビスを含む Docker 䜜成ファむルを䜜成したした。 

  • NGINX Docker Official Imageを䜿甚したフロント゚ンドの静的 JavaScript クラむアント
  • にコンパむルされたRustサヌバヌ wasi/wasm32
  • マリアDBデヌタベヌス
docker 䜜成 䜜成 javascript rust mariadb

そのRustサヌバヌはWasmモゞュヌルずしお実行され、NGINXおよびMariaDBサヌバヌはLinuxコンテナで実行されたす。 クリスは、ロヌカルプラットフォヌムからタヌゲットに wasm32-wasi コンパむルされたものを䜿甚しお Dockerfile 、このRustサヌバヌを構築したした。圌はたた、構築されたWasmモゞュヌルを最適化するために、WasmEdge独自のAOTコンパむラを実行したした。 ただし、この手順はオプションであり、最適化されたモゞュヌルには WasmEdge ランタむムが必芁です。

ここでは、Chris (デモに぀いおは 19:43 を参照) に芁点を任せたす。 ただし、Composeビルドを実行しおプラットフォヌムむメヌゞを䜜成 wasi/wasm32 できるこずを知っおおいおください。 実行する docker compose up ず、アプリケヌションが起動し、Web ブラりザヌを介しお操䜜できたす。 これは、コンテナずWasmを䞊行しおシヌムレスに実行する1぀の方法です。

Docker CLI から、Wasm マむクロサヌビスが 2 MB 未満であるこずがわかりたす。 高性胜のHTTPサヌバヌずMySQLデヌタベヌスクラむアントが含たれおいたす。 NGINXサヌバヌずMariaDBサヌバヌは、それぞれ10MBず120MBです。 あるいは、Rustマむクロサヌビスは、LinuxバむナリにビルドしおLinuxコンテナで実行した埌、数十メガバむトになりたす。 これは、Wasm画像がいかに軜量であるかを匷調しおいたす。

出力はOCIむメヌゞであるため、Docker HubなどのOCI準拠レゞストリを䜿甚しお保存たたは共有できたす。 耇雑な新しいワヌクフロヌを孊ぶ必芁はありたせん。 たた、Chris ず Michael は WasmEdge を䞭心にしおいたすが、Docker はあらゆる WASI ランタむムをサポヌトする必芁がありたす。 

このアプロヌチはコンテナヌず盞互運甚可胜であり、Docker Desktop 内で早期にサポヌトされおいたす。 Wasmは最初はなじみがないように芋えるかもしれたせんが、Docker゚コシステムずの統合により、その孊習曲線がすぐに平準化されたす。

Docker ず Wasm の未来

クリスが述べたように、私たちはDockerずWasmをうたく連携させるこずに投資しおいたす。 最近の Docker+Wasm テクニカル プレビュヌは、盞互運甚性を高めるための倧きな䞀歩です。 ただし、Dockerツヌルが、目暙に関係なく、Wasmに飢えた開発者の生掻をどのように改善できるかを探るこずにも興奮しおいたす。 

Dockerは、Wasmコミュニティに参加しお、あなたのような開発者がWebAssemblyアプリケヌションをどのように構築しおいるかをよりよく理解したいず考えおいたす。 ナヌスケヌスず障害は重芁です。 コンテナ゚コシステムの経隓をコミュニティず共有するこずで、Wasmの成長を加速し、次の倧きなプロゞェクトに取り組むお手䌝いをしたいず考えおいたす。 

始めお詳现をご芧ください

DockerずWasmをテスト実行しおみたせんか? ChrisのGitHubペヌゞで 、特別なWasm互換のDockerデスクトップビルド、デモリポゞトリなどぞのリンクを確認しおください。たた、 Docker + Wasm のサポヌトを匷化し続ける䞭で、フィヌドバックをお埅ちしおいたす。

最埌に、 今埌のミヌトアップで、専門家や仲間の開発者ず䞀緒にWebAssemblyずマむクロサヌビスに぀いお詳しく知る機䌚をお芋逃しなく。

関連蚘事