Docker + WebAssembly 統合の概要

Docker + WebAssembly 統合の概要

Docker+Wasm のテクニカル プレビューが利用可能になりました。 Wasm は最近大きな注目を集めていますが、この機能により、Wasm ランタイムをターゲットとするアプリケーションを迅速に構築することが容易になります。

このリリースの一環として、Docker がBytecode Alliance [1]の投票メンバーとして参加することも発表します。Bytecode Alliance は、WebAssembly や WebAssembly System Interface (WASI) などの標準に基づいた安全な新しいソフトウェア基盤の作成に取り組む非営利団体です。

Wasmとは何ですか?

WebAssembly [2]はWasmとも呼ばれ、40以上の言語(Rust、C、C++、JavaScript、Golangなど)で書かれたアプリケーションコードをコンパイルし、サンドボックス環境で実行できる比較的新しい技術です。

初期のユースケースは主に、Figma、AutoCAD、Photoshop などのネイティブ コードを Web ブラウザーで実行することでした。実際、fastq.bio は、Web ベースの DNA 配列品質アナライザーを Wasm に変換したところ、速度が 20 倍向上しました。ディズニーは、Wasm 上に Disney+ アプリケーション開発キットを構築しました。ブラウザの利点は明らかです。

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

なぜ Docker なのか?

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

私たちはWasmをLinuxコンテナ[3]の補完的な技術と見ており、開発者はユースケースに応じてどちらの技術(または両方)を使用するかを選択できます。コミュニティが Wasm の可能性を探求する中、私たちは皆さんがご存知の使い慣れた経験とツールを使用して、Wasm アプリケーションの開発、構築、実行をより簡単に行えるように支援したいと考えています。

プレビューを入手するにはどうすればいいですか?

自分で試してみる準備はできていますか?とても良い!しかし、それを行う前に、いくつか留意すべき点があります。

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

Docker Desktop のテクニカル プレビューはここからダウンロードできます。

  • macOS Appleシリコン[4]
  • macOS インテル[5]
  • ウィンドウズAMD64 [6]
  • Linux Arm64 ( deb [7] )
  • Linux AMD64 ( deb [8]rpm [9]tar [10] )

何か制限はありますか?

はい!これは初期のテクノロジー プレビュー リリースであり、できるだけスムーズなエクスペリエンスを実現するためにまだ取り組んでいますが、注意すべき点がいくつかあります。

  1. Docker Compose は中断されると正常に終了しない場合があります。
  • 回避策: SIGKILL (killall -9 docker-compose) を送信して、docker-compose プロセスをクリーンアップします。
  1. Docker Desktop を使用してログインしている場合でも、ハブにプッシュすると、「サーバー メッセージ: insufficient_scope: authorization failed」のようなエラーが発生する可能性があります。
  • 回避策: CLI で docker login を実行します。

使用

まず、これはテクノロジー プレビューであるため、状況が急速に変化する可能性があるが、これが現時点での動作方法であることをお知らせする必要があります。

  1. OCI 互換のアーティファクトと containerd shim を使用する機能を提供する containerd にイメージ管理を移行するための最近の取り組みを活用しています。
  2. 私たちはWasmEdge [11]と協力してコンテナシムを作成しました。このシムは、OCI アーティファクトから Wasm モジュールを抽出し、WasmEdge ランタイムを使用して実行します。
  3. Wasm ランタイムを宣言するためのサポートが追加され、この新しい shim を使用できるようになりました。

docker runを使用してWasmアプリケーションを起動します。

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

コンテナを起動して、wasm-example を起動します。

あまり馴染みのないパラメータがいくつかあることにお気づきかと思いますが、それが何をするのか説明しましょう。

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

イメージをプルした後、ランタイムはイメージの ENTRYPOINT を読み取って Wasm モジュールを見つけて抽出します。次に、モジュールは Wasm ランタイムにロードされ、ネットワークが起動して構成されます。これで、マシン上で Wasm アプリケーションが実行されるようになりました。

サンプル アプリケーションは、Hello world! を表示するシンプルな Web サーバーです。そして、そのデータを私たちに返します。正しく動作していることを確認するには、まずログを確認しましょう。

 $ docker ログ wasm-example
サーバーは現在稼働中です

http://localhost:8080 を開くか、curl を使用すると、Hello world メッセージを取得できます。

 $ カール ローカルホスト:8080
Wasm で実行されている Rust から Hello world! POSTデータを/echoに送信してエコーバックしてもらいます

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

 $ curl localhost:8080/echo -d '{"message":"こんにちは"}' -H "コンテンツタイプ: application/json"
{"メッセージ":"こんにちは"}

アプリケーションを削除するには、他の Docker サービスと同じように削除します。

 $ docker rm -f wasm-example

新しい統合により、Wasm アプリケーションを Linux コンテナと一緒に実行できるようになります (Compose を使用しても)。

Compose を使用して Wasm アプリケーションを起動する

同様に、次の Compose ファイルに示すように、Docker Compose を使用して Wasm アプリケーションを実行することもできます。

サービス:
アプリ:
画像: michaelirwin244/wasm-example
プラットフォーム: wasi/wasm32
ランタイム: io.container.wasmedge.v1
ポート:
- 8080:8080

次に、以下のコマンドを使用してアプリケーションを起動します。

 $ docker-compose を起動します

Wasm でマルチサーバーアプリケーションを実行する

ネットワークは Linux コンテナと同じように機能し、Wasm アプリケーションを他のコンテナ化されたワークロード (データベースなど) と単一のアプリケーション スタック内で柔軟に組み合わせることができます。

次の例では、Wasm アプリケーションはコンテナ内で実行されている MariaDB データベースを利用します。

  1. サンプルリポジトリをクローンする
 $ git クローン https://github.com/second-state/microservice-rust-mysql.git
'microservice-rust-mysql' にクローンしています...
リモート: オブジェクトを列挙しています: 75、完了。
リモート: オブジェクトのカウント: 100% (75/75)、完了。
リモート: オブジェクトの圧縮中: 100% (42/42)、完了。
リモート: 合計 75 (デルタ 29)、再利用 48 (デルタ 14)、パック再利用 0
オブジェクトの受信: 100% (75/75)、19.09 KiB | 1.74 MiB/s、完了。
デルタの解決: 100% (29/29)、完了。
  1. プロジェクトのルート ディレクトリに移動し、Docker Compose を使用してプロジェクトを開始します。
 $ cd マイクロサービス-rust-mysql
$ docker-compose を起動します
[+] 実行中 0/1
⠿ サーバー警告 0.4秒
[+] 建物 4.8秒 (13/15)
...
マイクロサービス-rust-mysql-db-1 | 2022-10-19 19:54:45 0 [注記] mariadbd: 接続準備完了。
マイクロサービス-rust-mysql-db-1 |バージョン: '10.9.3-MariaDB-1:10.9.3+maria~ubu2204' ソケット: '/run/mysqld/mysqld.sock' ポート: 3306 mariadb.org バイナリ配布

別のターミナルで、作成された Wasm イメージを確認できます。

 $ docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
サーバー最新 2c798ddecfa1 2分前 3MB

イメージを検査すると、イメージに wasi/wasm32 プラットフォーム、オペレーティング システム、およびアーキテクチャの組み合わせが含まれているかどうかがわかります。

 $ docker イメージ検査サーバー | grep -A 3 "アーキテクチャ"
「アーキテクチャ」: 「wasm32」、
「Os」:「ワシ」、
「サイズ」: 3001146,
"仮想サイズ": 3001146,
  1. http://localhost:8090 で Web サイトを開き、Wasm サーバーとやり取りするサンプル注文をいくつか作成します。
  2. 完了したら、アプリケーションを起動したターミナルで Ctrl + C を押してすべてを削除します。

Wasmモジュールの構築とプッシュ

  1. 使用する言語に応じて、Wasm アプリケーションをビルドする Dockerfile を作成します。
  2. Dockerfile の別のステージで、モジュールを抽出し、ENTRYPOINT として設定します。
ゼロから
コピー --from=build /build/hello_world.wasm /hello_world.wasm
エントリポイント [ "hello_world.wasm" ]
  1. 特定の wasi/wasm32 アーキテクチャのイメージをビルドしてプッシュします。 Buildx を使用すると、1 つのコマンドで簡単に実行できます。
 $ docker buildx build --platform wasi/wasm32 -t username/hello-world 。
...
=> 画像にエクスポート中 0.0s
=> => レイヤー 0.0s をエクスポート
=> => マニフェストをエクスポートしています sha256:2ca02b5be86607511da8dc688234a5a00ab4d58294ab9f6beaba48ab3ba8de56 0.0s
=> => 設定をエクスポートしています sha256:a45b465c3b6760a1a9fd2eda9112bc7e3169c9722bf9e77cf8c20b37295f954b 0.0s
=> => docker.io/username/hello-world:latest 0.0s に名前を付けます
=> => docker.io/username/hello-world:latest 0.0s に解凍しています
docker push ユーザー名/hello-world

WasmとDockerの今後

Wasm は、マルチスレッド、ガベージ コレクションなどをサポートする方法の検討を含め、急速に成長し、発展しています。開発者のフィードバック ループの短縮や実稼働への道筋など、まだ解決すべき問題が数多くあります。

参考リンク

  • https://www.docker.com/blog/docker-wasm-technical-preview/。
  • https://docs.docker.com/desktop/wasm/。

参考文献

[1]バイトコードアライアンス: https://bytecodealliance.org/.

[2] WebAssembly: https://webassembly.org/.

[3] Linuxコンテナの補完技術:https://www.docker.com/blog/why-containers-and-webassembly-work-well-together/.

[4] macOS Apple Silicon: https://dockr.ly/3sf56vH.

[5] macOS Intel: https://dockr.ly/3VF6uFB.

[6] Windows AMD64: https://dockr.ly/3ShlsP0.

[7] Linux Arm64 デブ: https://dockr.ly/3TDcjRV。

[8] Linux AMD64 デブ: https://dockr.ly/3TgpWH8。

[9] Linux AMD64 rpm: https://dockr.ly/3eG6Mvp.

[10] Linux AMD64 tar: https://dockr.ly/3yUhdCk

[11] WasmEdge: https://wasmedge.org/.

[12]ロードマップ: https://github.com/docker/roadmap/issues/426.

<<:  IoT とエッジ コンピューティングの将来はどうなるのでしょうか?

>>:  Amazon Web Services: 持続可能な開発で業界をリード

推薦する

ウェブサイトのユーザー エクスペリエンス デザイン: 情報インタラクション デザインのピラミッド ルール

編集者注: この記事は、7 月 8 日に開催された #36 氪OpenDay#Beijing ステー...

記事ページに100以上のトラフィックをもたらす方法

記事ページはどのようにして 100 以上のトラフィックをもたらすのでしょうか? 記事ページはどのよう...

あなたはまだWeiboを「小さなブログ」と見なしていますか?

モバイルインターネットの時代において、オンラインマーケティングは市場発展の必然的な流れとなり、オンラ...

Raksmart VPS プロモーション: 月額 0.99 ドル、サンノゼ CN2/ロサンゼルス本土最適化、月額 2.99 ドル、香港/日本最適化、無制限のトラフィック

raksmart は、ダブルイレブンとブラックフライデー向けに VPS セール プロモーションを開始...

鉄道省:12306以外のウェブサイトでは列車の切符の購入は認められていない

テンセントテクノロジーニュース4月6日:JD.comが鉄道チケット事業に参入した後、鉄道部運輸局は最...

ウェブマスターはどのようにしてページの適時性価値を生み出し、ウェブサイト全体のトラフィックを増やすことができるのでしょうか?

検索エンジン最適化技術が発達するにつれて、ページの価値がランキングにおいてますます決定的になり、ウェ...

ウェブマスターネットワークニュース:タオバオクラウンストアのオーナーがアルパカ飼育に転職し、パフォーマンスで1日数万元を稼ぐ

1. 羅永浩氏との独占インタビュー: 敗者は去ってエリートに仕えるべきだ。私たちは次の Apple ...

OpenVirtuals - 年間 20 ドル / 512 MB メモリ / 180 g ハード ドライブ / 2 T トラフィック / アトランタ

OpenVirtuals.com は、大容量ハード ドライブを備えた VPS をいくつか設定していま...

Oracle Analytics Cloudが多くの新しいイノベーションをリリース

自動化された分析ワークフローは、企業がより多様な方法でデータを操作して予測を行うのに役立ちます。 O...

RUSHMAIL: メールマーケティングキャンペーンのコンテンツのデザイン方法

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますマーケティ...

ウェブサイトのスナップショットとキーワードランキングを分析する

SEO 専門職に就く者として、私たちは検索エンジンの変化を常に観察し、問題に遭遇したときにそれを避け...

クラウド統合データセンターネットワークの利点は何ですか?

クラウドとインテリジェントの時代において、データ センター ネットワークは、クラウド サービスのシー...

フォーラム署名の外部リンクは 2012 年も引き続き強力でしょうか?

すべてのウェブマスターにとって、ウェブサイト内部の最適化に加えて、外部リンク作業は間違いなくウェブサ...

BandwagonHost: すべての VPS が 10% オフ、10Gbps (米国 cn2 gia + 日本 Softbank) + 1Gbps 香港 cn2 gia

今年、Banwagong はブラックフライデーのプロモーションも実施し、全商品が 10% オフになり...

SEO なしで成功するための 10 ステップ

SEO はウェブマスターにとって重要な教訓であり、多かれ少なかれこのような問題に遭遇することはわかっ...