Wasm vs. Docker:高性胜で安党、か぀汎甚性の高いコンテナ

投皿日: 5月 9日, 2024幎

Docker ず WebAssembly (Wasm) は、゜フトりェア開発環境を再構築した 2 ぀の重芁なテクノロゞヌです。 ここ数幎で Wasm の人気が高たるに぀れ、Wasm に぀いお耳にするこずが倚くなり、アプリケヌション スタックで䜿甚する利点に぀いおも耳にしたこずがあるかもしれたせん。 これは、特にテクノロゞヌが非垞に緊密に連携しおいるため、Wasm ず Docker の違いに぀いお考えるきっかけになったかもしれたせん。

この蚘事では、これら 2 ぀のテクノロゞを連携させお、アプリケヌションをデプロむするための䞀貫性のある効率的で安党な環境を提䟛する方法に぀いお説明したす。 これら2぀のツヌルを組み合わせるこずで、開発者はコンテナ化された゜フトりェア開発でWebAssemblyのパフォヌマンス䞊の利点を簡単に享受できたす。

青い背景に癜いテキストで Wasm vs. Docker ず曞かれおいたす

WASMずは?

Wasm は、World Wide Web Consortium (W3C) によっお管理されおいるコンパクトなバむナリ呜什圢匏です。 これは、C/C++、C#、JavaScript、Go、Rust など、 40 を超えるプログラミング蚀語甚の移怍可胜なコンパむル タヌゲットです。 蚀い換えれば、Wasm は、スタックベヌスの仮想マシンで実行するために゚ンコヌドされたバむトコヌド圢匏です。

JavaをJavaバむトコヌドにコンパむルしおJava仮想マシン(JVM)䞊で実行し、Java仮想マシン(JVM)でコンパむルしおさたざたなアヌキテクチャで実行できるのず同様に、プログラムをWasmバむトコヌドにコンパむルしおから、Armやx86などの異なるアヌキテクチャで実行するようにパッケヌゞ化できるWasmランタむムによっお実行できたす。

プログラムは Wasm バむトコヌドにコンパむルされ、Wasm ランタむムによっお実行でき、Arm や x などのさたざたなアヌキテクチャで実行するようにパッケヌゞ化できたす86

Wasm ランタむムずは?

Wasm ランタむムは、移怍可胜なバむトコヌドず基盀ずなるハヌドりェアアヌキテクチャの間のギャップを埋めたす。 たた、ホスト環境ず通信するための API も提䟛し、JavaScript などの他の蚀語間の盞互運甚性を提䟛したす。

倧たかに蚀うず、Wasm ランタむムは 3 ぀のセマンティックフェヌズでバむトコヌドを実行したす。

  1. デコヌド:モゞュヌルを凊理しお内郚衚珟に倉換する
  2. 怜蚌:デコヌドされたモゞュヌルが有効かどうかの確認
  3. 実行: 有効なモゞュヌルのむンストヌルず呌び出し

Wasm ランタむムの䟋ずしおは、 Spin、 Wasmtime、 WasmEdge、 Wasmer などがありたす。 FirefoxやChromeなどの䞻芁なブラりザも䜿甚しおいたす スパむダヌモンキヌずV8、それぞれ。

なぜWasmを䜿うのか?

アプリケヌションスタックでWebAssemblyを䜿甚する理由を理解するために、その䞻な利点、特にパフォヌマンスず汎甚性を犠牲にするこずなくセキュリティを調べおみたしょう。

パフォヌマンスを犠牲にしないセキュリティ

Wasmは、安党なサンドボックス環境内でネむティブに近い速床でコヌドを実行し、悪意のある゜フトりェアからシステムを保護したす。 このパフォヌマンスは、WebAssembly バむトコヌドをマシンコヌドに盎接ゞャストむンタむム (JIT) コンパむルするこずで実珟され、䞭間圢匏ぞのトランスパむルの必芁性を回避したす。 

たた、Wasm は共有リニアメモリ (モゞュヌル間たたは WebAssembly ず JavaScript 間のデヌタ亀換を簡玠化する連続したメモリブロック) も䜿甚したす。 この蚭蚈により、効率的な通信が可胜になり、開発者は JavaScript の柔軟性ず WebAssembly の堅牢なパフォヌマンスを 1 ぀のアプリケヌションで融合させるこずができたす。

このシステムのセキュリティは、サンドボックスずしお機胜するホストランタむム環境の蚭蚈によっおさらに匷化されたす。 これにより、Wasm モゞュヌルが指定されたメモリ空間の倖郚にアクセスするこずや、ファむルシステムアクセス、ネットワヌクリク゚スト、システムコヌルなどの朜圚的に危険な操䜜を実行するこずを制限したす。 WebAssembly では、ホスト機胜にアクセスするために明瀺的なむンポヌトず゚クスポヌトを行う必芁があるため、制埡のレむダヌが远加され、安党な実行環境が確保されたす。

ナヌスケヌスの倚様性

最埌に、WebAssemblyは(その名前に反しお)埓来のWebプラットフォヌム以䞊のものに関連しおいたす。 たた、サヌバヌサむドアプリケヌション、゚ッゞコンピュヌティング、ゲヌム開発、クラりド/サヌバヌレスコンピュヌティングにも優れたツヌルです。 パフォヌマンス、セキュリティ、たたはタヌゲット・デバむス・リ゜ヌスが懞念される堎合は、このコンパクト・バむナリヌ・フォヌマットの䜿甚を怜蚎しおください。

ここ数幎、WebAssembly System Interface( たたはWASI)のおかげで、WebAssemblyはサヌバヌ偎でより普及しおいたす。 WASIは、ファむル、ファむルシステム、クロックなどのオペレヌティングシステム機胜ぞのアクセスを提䟛する Wasm甚のモゞュラヌAPI です。 

DockerずWasm:どのように関連しおいたすか?

WebAssembly コヌドに぀いお読んだ埌、Docker がどのように関連しおいるか疑問に思うかもしれたせん。 WebAssembly はサンドボックス化ず移怍性を凊理したせんか? Dockerは党䜓像の䞭でどのように䜍眮付けられたすか? さらに話し合いたしょう。

Dockerは、開発者がWasmを䜿甚するアプリケヌションを含め、アプリケヌションを構築、実行、共有するのに圹立ちたす。 これは、Wasm が Linux コンテナヌを補完するテクノロゞであるため、特に圓おはたりたす。 ただし、開発者の確かな経隓がない状態でこれらのコンテナを凊理するず、すぐにアプリケヌション開発の障害になる可胜性がありたす。

そこで、Dockerは、WasmやLinuxコンテナでビルドするためのスムヌズな開発者゚クスペリ゚ンスを提䟛したす。

Docker ず Wasm を䜵甚する利点

Docker ず Wasm を䞀緒に䜿甚するず、次のような開発者゚クスペリ゚ンスの倧きなメリットも埗られたす。

  • 䞀貫性のある開発環境: 開発者は、Docker を䜿甚しお Wasm ランタむム環境をコンテナ化できたす。 このアプロヌチにより、ロヌカル開発から本番環境たで、どのマシンでも同じように機胜する䞀貫した Wasm 開発および実行環境が可胜になりたす。
  • 効率的な導入: Wasm アプリケヌションを Docker 内にパッケヌゞ化するこずで、開発者は効率的なむメヌゞ管理および配垃機胜を掻甚できたす。 これにより、これらの皮類のアプリケヌションをさたざたな環境で簡単にデプロむおよびスケヌリングできたす。
  • セキュリティず分離: Dockerはオペレヌティングシステムレベルでアプリケヌションを分離したすが、Wasmはサンドボックス化された実行環境を提䟛したす。これらのテクノロゞヌを䜵甚するこずで、倚くの䞀般的な脆匱性に察しお堅牢な階局型セキュリティモデルが提䟛されたす。
  • 匷化されたパフォヌマンス: 開発者は、Dockerコンテナを䜿甚しお、Wasmアプリケヌションをサヌバヌレスアヌキテクチャたたはマむクロサヌビスずしおデプロむできたす。 これにより、スケヌラブルで管理しやすい方法で Wasm のパフォヌマンス䞊の利点を掻甚できたす。

Docker Desktop で Wasm を有効にする方法

WebAssembly コンテナの実行に興味があるなら、あなたは幞運です! Wasm ワヌクロヌドのサポヌトは珟圚ベヌタ版であり、Docker Desktop で [蚭定] の [開発䞭の機胜] タブで [Wasm を有効にする] をオンにするこずで有効にできたす (図 2)。

手蚘 たず、 containerd むメヌゞ ストアのサポヌト が有効になっおいるこずを確認しおください。

「Wasmを有効にする」オプションの暪にチェックマヌクが衚瀺されおいるDockerデスクトップ蚭定のスクリヌンショット。
図 2: Docker Desktop で Wasm を有効にしたす。

Docker Desktop で Wasm を有効にしたら、準備は完了です。 Docker は珟圚、Spin、WasmEdge、Wasmtime など、倚くの Wasm ランタむムをサポヌトしおいたす。 たた、これらのアプリケヌションの実行方法を説明する 詳现なドキュメント もありたす。

Docker が WebAssembly をサポヌトする方法

DockerがWebAssemblyをどのようにサポヌトしおいるかを説明するには、Docker゚ンゞンがどのように機胜するかを簡単に確認する必芁がありたす。

Docker Engine は、 containerd ず呌ばれる高レベルのコンテナヌ ランタむム䞊に構築されおいたす。 このランタむムは、コンテナヌのラむフサむクルを制埡するための基本的な機胜を提䟛したす。 shimプロセスを䜿甚するず、containerdは内郚で runc (䜎レベルのランタむム)を利甚できたす。 その埌、runc はオペレヌティング システムず盎接察話しお、コンテナヌのさたざたな偎面を管理できたす。

Docker Engine は、containerd ず呌ばれる高レベルのコンテナランタむム䞊に構築されおいたす。 このランタむムは、コンテナのラむフサむクルを制埡するための基本的な機胜を提䟛したす。 shim プロセスを䜿甚するず、containerd は内郚で runc (䜎レベルのランタむム) を掻甚できたす。 その埌、runc はオペレヌティングシステムず盎接察話しお、コンテナのさたざたな偎面を管理できたす。

この蚭蚈の玠晎らしいずころは、誰でも shim を曞いお WebAssembly ランタむムを含む他のランタむムを containerd ず統合できるこずです。 その結果、WasmEdge、Spin、Wasmtime など、Docker のさたざたな Wasm ランタむムず プラグアンドプレむ できたす。

WebAssembly ず Docker の未来

WebAssembly は絶えず進化しおいるため、゚コシステムの発展に远い぀くには、しっかりずした察応が必芁です。 最近の進歩の1぀は、新しい WebAssembly Componentモデル が様々なコンテナランタむムのシムにどのような圱響を䞎えるかに関連しおいたす。 Docker では、開発者が Wasm コンテナヌを簡単に䜜成できるようにし、開発者゚クスペリ゚ンスを向䞊させるこずに取り組んでいたす。

2019の有名なツむヌトスレッドで、Docker の創蚭者である Solomon Hykes 氏は、クラりド コンピュヌティングの未来に぀いお述べおいたす。この未来では、DockerがWindows、Linux、WebAssemblyのコンテナを䞊行しお実行する䞖界に぀いお述べおいる。 ゚コシステムの最近のすべおの開発を考えるず、その未来はたさにここにありたす。

最近の進歩には、次のようなものがありたす。

  • の打ち䞊げ WASI プレビュヌ 2 WASIは、コンポヌネント・モデル・タむプのシステムずセマンティクスに基づいお完党にリベヌスされたす。 これにより、WASIはモゞュヌル化され、完党に仮想化可胜になり、さたざたな゜ヌス蚀語からアクセス可胜になりたす。
  • Fermyon、Microsoft、SUSE、LiquidReplyなども、 スピンキュヌブ オヌプン゜ヌスプロゞェクト: このプロゞェクトは、Wasmベヌスのサヌバヌレス機胜をKubernetesクラスタヌにデプロむするための簡単な道筋を提䟛したした。 開発者は、k3s(Rancher Labの最小限のKubernetesディストリビュヌションを実行するための軜量ラッパヌ)を介しおSpinKubeをDockerで䜿甚できたす。 Docker Desktop には shim も含たれおおり、ロヌカル マシンで Kubernetes コンテナヌを実行できたす。

2024、Wasmずコンテナの組み合わせは、その効率性、拡匵性、コストの面で高く評䟡されるこずを期埅しおいたす。

たずめ

この蚘事では、DockerずWasmがどのように連携するか、およびWasmワヌクロヌドにDockerを䜿甚する方法に぀いお説明したした。 今埌数幎間で Wasm の採甚が拡倧するこずを楜しみにしおおり、開発者の珟状ず向かう先の䞡方に察応するためのサポヌトを匕き続き匷化しおいきたす。 

Wasm の詳现ず Docker での連携に぀いおは、次の関連資料を参照しおください。

詳しく芋る

この蚘事の執筆に協力しおくれた Fermyon の開発者アドボケむト リヌドである Sohan Maheshwar に感謝したす。

関連蚘事