Docker 与 WasmEdge 合作,发布 WebAssembly 支持

在 KubeCon NA 2022 的 Cloud native Wasm day 大会上, Docker 与 CNCF 的 WasmEdge Runtime 项目发布了 Docker+Wasm 技术预览。 只需一个命令 docker compose up, 上千万的 Docker 开发者可以立即构建、共享并运行一个完整的 Wasm 应用。
Wasm 最初是作为 Web 浏览器中的安全沙箱而开发的。近年来,它在服务器端作为 VM 和 Linux 容器 (LXC) 的安全、轻量级、快速和可移植的替代方案,有了很多应用程序。Linux 容器这一领域最初由 Docker 开创。
Docker+Wasm 中的标准 demo 应用是由 Second State 提供的。这是一个数据库驱动的 Web 应用程序,它有一个用于整个 Web 服务(微服务)的 WasmEdge “容器”,以及两个用于支持服务的 Linux 容器:一个用于 MySQL 数据库,一个用于 Niginx,为前端 UI 提供静态 HTML 页面。 这三个容器在同一个网络中并排运行并形成一个应用程序。 微服务用 Rust 编写并编译成 Wasm。 它有一个高性能(non-blocking)HTTP 服务器、一个事件处理程序(用于处理 HTTP 请求的业务逻辑)和一个 MySQL 数据库客户端。 整个“容器化”的 Wasm 微服务只有 3MB,而数据库和 Nignix 的 Linux 容器则需要好几百 MB。

Docker Compose 不仅将这些 Wasm 应用程序与侧容器一起运行,而且还将 Rust 源代码构建到 Wasm 中。 开发者甚至不需要安装 Rust 编译器工具链,因为整个构建环境也由 Docker 容器化。 Docker+Wasm 是真正的端到端解决方案。
随着 Docker 开启了引领了云原生时代的容器革命,Docker 在当今的“多运行时”世界支持 Wasm 的承诺,重要性愈发凸显。
Docker+Wasm 的发布非常有意义。 我们不再生活在单一 runtime 的世界中:有 linux 容器、Windows 容器和 Wasm 容器。 OCI 可以将它们全部打包,我应该能够使用 docker 构建和运行它们。 — Solomon Hykes, Docker 联合创始人。
Docker+Wasm 背后的技术主要来自开源社区。 例如,Docker 依赖于一个名为 runwasi 的容器 shim,最初 由 Microsoft 的 DeisLabs 创建, 来启动 WasmEdge 并执行 Wasm 程序。
深耕开源的可能远远不止 Docker 一家。 例如,红帽团队已经将 Wasm 运行时支持集成到 OCI 运行时 crun 中。 这使得整个 Kubernetes 堆栈能够无缝支持 WasmEdge 应用程序。 事实上,Liquid Reply 团队在 KubeCon 大会几天前用 WasmEdge 演示了 Podman+Wasm。
在 KubeCon 活动中展示的其他 Wasm 应用程序包括 AI 推理应用程序、基于 Dapr 的微服务和 streaming pipeline 中的数据处理函数。 现在有了 Docker+Wasm,开发者可以轻松构建、共享和运行这些应用程序。
相关推荐
WasmEdge (之前名为 SSVM) 是为边缘计算优化的轻量级、高性能、可扩展的 WebAssembly (Wasm) 虚拟机,可用于云原生、边缘和去中心化的应用
该运行时完全遵循 WebAssembly 标准规范,包括 Core Wasm、WASI(WebAssembly System Interface)以及多项扩展提案,如 WASI-NN(用于神经网络推理)
go-wasm-cat-games on-canvas-with-docker:全球最简单的Golang WebAssembly简介
该项目展示了如何使用Go语言编译为WebAssembly,在浏览器Canvas上运行一个交互式猫主题小游戏。通过wasm_exec.js桥接JavaScript与Go代码,实现鼠标交互、激光动画及碰撞
wasm-sodium:libsodium的PoC在wasm32-unknown-unknown上的Rust中使用
本文介绍如何利用Docker容器编译WebAssembly文件。首先构建一个支持wasm的clang版本的Docker镜像,然后在容器中编译代码至wasm格式,并将输出文件放置在宿主机的target目
Rust-wasm-nodejs.pdf Rust ➡ WebAssembly Node.js
它允许代码直接与JavaScript交互,同时也成为了Rust程序的理想编译目标,因为Rust和Cargo工具链都支持WASM。使用WASM,我们可以享受到以下几点好处:1.
wasm2brs:将WebAssembly的功能带到Roku并支持CC ++ Rust之类的语言
建筑wasm2brs wasm2brs的所有依赖项都安装在可以通过./run.sh运行的Docker映像中。 要建立我们的仓库: git submodule update --init --recur


