Docker + Wasm Technical Preview の紹介

編集者注: Docker Desktop 4.15のリリースに伴い、Docker + Wasmがベータ版になりました。 詳細については 、ドキュメント を参照してください。


Docker+Wasm のテクニカルプレビュー が利用可能になりました!Wasmは最近多くの話題を呼んでいますが、この機能により、Wasmランタイムをターゲットとするアプリケーションをすばやく簡単に構築できます。

このリリースの一環として、Docker が投票メンバーとして Bytecode Alliance に参加することもお知らせします。 Bytecode Allianceは、WebAssemblyやWebAssembly System Interface(WASI)などの標準に基づいて構築された、安全な新しいソフトウェア基盤の構築に専念する非営利団体です。

バイトコードアライアンスのロゴ

ワズムとは何ですか?

WebAssemblyは、しばしばWasmに短縮され、40 +以上の言語(Rust、C、C ++、JavaScript、Golangを含む)で書かれたアプリケーションコードをコンパイルし、サンドボックス環境内で実行できる比較的新しいテクノロジーです。

元のユースケースは、 FigmaAutoCADPhotoshopなどのWebブラウザーでネイティブコードを実行することに重点を置いていました。 実際、 fastq.bio は、ウェブベースのDNAシーケンス品質アナライザーをWasmに変換すると、 速度が20倍向上 しました。 そして、ディズニーはWasmの上に Disney +アプリケーション開発キット を構築しました! ブラウザの利点は簡単にわかります。

しかし、Wasmは WebAssembly System Interface (WASI)のおかげでブラウザを超えて急速に広がっています。 VercelFastlyShopifyCloudflare などの企業は、エッジでコードを実行するためにWasmを使用することをサポートしており、 Fermyon はクラウドでWasmマイクロサービスを実行するためのプラットフォームを構築しています。

なぜドッカーなのか?

Docker の目標は、アプリ開発の複雑さを克服することで、開発者がアイデアを実現できるよう支援することです。 基盤となるテクノロジに関係なく、アプリケーションの構築、共有、実行を容易にするよう努めています。 コンテナをすべての人が利用できるようにすることで、開発者の生活を楽にする能力を証明し、 #1の最も愛されている開発者ツールとして認められました。

WasmはLinuxコンテナを補完するテクノロジーであり、開発者はユースケースに応じて使用する テクノロジー (またはその両方)を選択できます。 また、コミュニティがWasmで何が可能かを模索するにつれて、私たちはあなたが知っていて愛している経験とツールを使用して、Wasmアプリケーションの開発、構築、実行を容易にする手助けをしたいと考えています。

テクニカル プレビューを入手するにはどうすればよいですか?

飛び込んで自分で試してみる準備はできましたか? すごい! ただし、その前に、探索を開始するときに覚えておくべきいくつかの簡単なメモがあります。

  • 重要な注意#1: これは Docker Desktop のテクニカル プレビュー ビルドであり、期待どおりに動作しない可能性があります。 続行する前に、必ずコンテナーとイメージをバックアップしてください。
  • 重要な注意#2: このプレビューでは 、コンテナー化されたイメージ ストア が有効になっており、無効にすることはできません。 コンテナー化されたイメージ ストアを現在使用していない場合、既存のイメージとコンテナーにはアクセスできません。

WASM はベータ版ではなくなりました。 Dockerデスクトップ をダウンロードして使用を開始します。

既知の制限はありますか?

はい! これは初期のテクニカルプレビューであり、可能な限りスムーズなエクスペリエンスを実現するために引き続き取り組んでいます。 ただし、注意すべき点がいくつかあります。

  1. 中断されると、Docker Composeが正常に終了しない場合があります
    • 回避策: プロセスに docker-compose SIGKILL (killall -9 docker-compose) を送信してクリーンアップします。
  2. Hubにプッシュすると、Dockerデスクトップを使用してログインした後でも、というエラー server message: insufficient_scope: authorization failedが表示される場合があります
    • 回避策: CLI で実行します docker login

さて、Wasm統合は実際にどのように機能しますか?

あなたが尋ねてくれてうれしいです! まず、これはテクニカルプレビューであるため、状況は非常に急速に変化する可能性があることを思い出す必要があります。 しかし、これが現在の仕組みです。

  1. 最近の作業を活用して、OCI互換のアーティファクトとコンテナ化されたshimの両方を使用できるため、 イメージ管理をコンテナに移行しています。
  2. WasmEdge と協力して、コンテナ化されたシムを作成しました。このシムは、OCIアーティファクトからWasmモジュールを抽出し、WasmEdgeランタイムを使用して実行します。
  3. この新しい shim を使用できるようにする Wasm ランタイムを宣言するためのサポートを追加しました。
Docker containerd wasm diagram

例を見てみましょう!

プレビューをインストールした後、次のコマンドを実行して、サンプルのWasmアプリケーションを起動できます。

docker run -dp 8080:8080 --name=wasm-example --runtime=io.containerd.wasmedge.v1 --platform=wasi/wasm32 michaelirwin244/wasm-example

いくつかのフラグはなじみがないかもしれないので、それらが何をしているのかを説明しましょう:

  • --runtime=io.containerd.wasmedge.v1 –これにより、標準のLinuxコンテナランタイムの代わりにWasmコンテナシムを使用することがDockerエンジンに通知されます
  • --platform=wasi/wasm32 –これは、使用する画像のアーキテクチャを指定します。 Wasmアーキテクチャを活用することで、アーキテクチャごとに個別のイメージを構築する必要がなくなります。 Wasmランタイムは、Wasmバイナリをマシン命令に変換する最後のステップを実行します。

イメージがプルされた後、ランタイムはイメージを読み取り ENTRYPOINT 、Wasm モジュールを見つけて抽出します。 その後、モジュールが Wasm ランタイムに読み込まれ、開始され、ネットワークが構成されます。 これで、マシンでWasmアプリが実行されました。

この特定のアプリケーションは、「Hello world!」と言ってデータをエコーバックする単純なWebサーバーです。 動作していることを確認するために、まずログを表示してみましょう。

docker logs wasm-example
Server is now running

「Hello world」メッセージは、http://localhost:8080 を開くか curlを使用して取得できます。

curl localhost:8080

そして、私たちの応答は私たちにこんにちは世界のメッセージを与えるでしょう:

Hello world from Rust running with Wasm! Send POST data to /echo to have it echoed back to you

エコーエンドポイントにデータを送信するには、curl を使用できます。

curl localhost:8080/echo -d '{"message":"Hi there"}' -H "Content-type: application/json"

そして、応答で使用するために送り返されたデータが表示されます。

{"message":"Hi there"}

アプリケーションを削除するには、他の Docker サービスと同様に削除できます。

docker rm -f wasm-example

新しい統合により、Linuxコンテナと一緒にWasmアプリケーションを実行できることを意味します(Composeを使用している場合でも)。 詳細については、 ドキュメントをご覧ください

WasmとDockerの次は何ですか?

もう一つの素晴らしい質問です! Wasmは急速に成長し、進化しており、 マルチスレッドやガベージコレクションなどをサポートする方法の調査も含まれています。また、開発者のフィードバックループの短縮や本番環境への道のりなど、まだ取り組んでいない課題もたくさんあります。

ですから、 自分で試してから 、公開ロードマップに関するご意見やフィードバックをお聞かせください。私たちはあなたから聞いてみたいです!