用 Docker 工具管理 WebAssembly 应用程序
开发者可以通过 DockerHub 和 CRI-O 等 Docker 工具在 WasmEdge 中部署、管理和运行轻量级 WebAssembly 应用程序。
WasmEdge 是由 CNCF (Cloud Native Computing Foundation) 托管的 WebAssembly 运行时,是边缘计算应用程序的执行沙箱。
虽然 WebAssembly 最初是作为浏览器应用程序的运行时而发明的,但其轻量级和高性能的沙箱设计使其成为通用应用程序容器的一个极具吸引力的选择。
如果在 2008 年已经有了 WASM + WASI,那么我们压根无需创始 Docker 这个项目了。 — Docker 联合创始人 Solomon Hykes
与 Docker 相比, WebAssembly 在启动时快一百倍, 占用更小的内存和磁盘空间,并且具有更优定义的安全沙箱。然而,缺点是 WebAssembly 需要自己的语言 SDK 和编译器工具链,使其作为开发者环境比 Docker 更受限制。WebAssembly 越来越多地用于边缘计算场景,通常这些场景中,部署 Docker 比较困难,或是应用程序的性能至关重要。
Docker 的一大优势是其丰富的工具生态系统。我们希望为 WasmEdge 开发者带来类似 Docker 的工具。为了实现这一点,我们为 CRI-O 创建了一个名为 runw 的替代 runner 来加载并运行 WebAssembly 字节码程序,如同他们是 Docker 镜像文件一样。
在 CRI-O 中安装 WebAssembly runner
为了在 CRI-O 中支持 WebAssembly,您只需下载 runw
二进制码发布并将其安装到您的 CRI-O 中。
因为
runw
二进制码已经包括了 WasmEdge,无需单独安装 WasmEdge 或任何其它 WebAssembly VM。
首先,确保你使用的是安装了 LLVM-10 的 Ubuntu 20.04。如果你使用的是不同的平台,请参阅如何为你的操作系统创建 runw
项目文档。
确保你安装了 cri-o、 crictl、 containernetworking-plugins 和 buildah 或者 docker 。
下一步,下载 runw
binary build
现在,你可以安装 runw
进 CRI-O 作为 WebAssembly 的备选方案。
最后,重启 cri-o
,从而使新的 WebAssembly runner 开始生效。
用 Rust 构建 Wasm 应用程序
下面案例中的 Wasm 应用程序是 Rust 写的。为了让这些程序工作,确保你安装了 Rust 和 rustwasmc 工具链。
你需要 Rust 编译器和 rustwasmc 来构建 Rust 源成为 wasm 字节码文件。如果你已经有一个 wasm 字节码程序,且只是想要用 cri-o 跑一遍,你可以跳过这个部分。
应用程序源代码仅为一个 main.rs
函数。在此处。该应用程序演示了如何使用标准 Rust API 从 WasmEdge 访问文件系统和其它操作系统资源。
你可以通过下面的命令行将应用程序构建到一个 wasm 字节码文件中。
wasm 字节码文件 在这里。
为 Wasm app 构建并发布一个 Docker Hub 镜像
您现在可以将整个 wasm 字节码文件发布到 Docker hub 中,就好像这是一个 Docker 镜像一样。
首先,在 pkg/
目录中创建一个 Dockerfile,如下所示。
创建一个镜像并发布到 Docker hub。
现在,你可以使用 Docker 工具(例如 crictl
)将发布的 wasm 文件拉为镜像。 下面是我们发布的 wasm 文件镜像的示例。
使用 CRI-O 启动 Wasm app
要启动并运行 wasm 文件,您需要为 CRI-O 创建两个配置文件。 创建一个 container_wasi.json
文件,如下所示。 它告诉 CRI-O 运行时应该从 Docker 存储库的哪里提取 wasm 文件映像。
接下来,创建一个 sandbox_config.json
文件,如下所示。 它定义了运行 wasm 应用程序的沙箱环境。
现在可以创建一个 CRI-O pod 如下:
自 pod ,您可以创建一个容器以隔离方式运行 wasm 字节码程序。
最后,启动容器并查看 wasm 应用程序的输出。
下一步
在本文中,我们看到了如何使用类似 Docker 的 CRI-O 工具启动、运行和管理 WasmEdge 应用程序。
我们的下一步是使用 Kubernetes 来管理 WasmEdge 容器。 为此,我们需要在 Kubernetes 中安装一个 runner 二进制文件,以便它可以同时支持常规 Docker 镜像和 wasm 字节码镜像。
版权声明: 本文为 InfoQ 作者【Michael Yuan】的原创文章。
原文链接:【http://xie.infoq.cn/article/35a1768670434c5ba703ff2f0】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论