【译文】Docker+Wasm技术预览

简介: 【译文】Docker+Wasm技术预览
原文: Introducing the Docker+Wasm Technical Preview

2022年10月24日Docker发布了WASM相关的技术预览,目前仍处于Bata阶段。我看到甚至Docker官网的Logo都加上Wasm了,可以说Docker官方很重视这项实验性特性。

image.png
Docker+Wasm的技术预览现已发布!Wasm最近引起了很多关注,这一特性将使您更容易快速构建针对Wasm运行时的应用程序。

作为此次发布的一部分,我们也很高兴地宣布Docker将作为投票成员加入Bytecode AllianceBytecode Alliance是一个非营利组织,致力于创建安全的新软件基础,以WebAssembly和WebAssemply系统接口(WASI)等标准为基础。

image.png

什么是Wasm

WebAssembly(通常简称为Wasm)是一种相对较新的技术,它允许您编译用40多种语言(包括Rust、C、C++、JavaScript和Golang)编写的应用程序代码,并在沙盒环境中运行。

最初的例子侧重于在web浏览器(如FigmaAutoCADPhotoshop)中运行本机代码。事实上,当将基于网络的DNA序列质量分析仪转换为Wasm时,fastq.bio的速度提高了20倍)。迪士尼在Wasm之上构建了他们的Disney+ Application Development Kit!浏览器的好处是显而易见的。

但是多亏了WebAssembly系统接口(WASI), Wasm正在迅速扩展到浏览器之外。VercelFastlyShopifyCloudflare等公司都支持使用Wasm在边缘运行代码,Fermyon正在构建一个平台,在云中运行Wasm微服务。

Why Docker?

在Docker,我们的目标是帮助开发人员通过克服应用程序开发的复杂性来实现他们的想法。我们努力使构建、共享和运行应用程序变得容易,而不管底层技术是什么。通过使容器对所有人都可访问,我们证明了我们使开发人员的生活更容易的能力,并被公认为最受欢迎的开发人员工具

我们认为Wasm是Linux容器的一种补充技术,开发人员可以根据用例选择使用哪种技术(或者两者都使用!)随着社区探索使用Wasm的可能性,我们希望利用您所了解和喜爱的经验和工具,帮助开发、构建和运行Wasm应用程序更容易。

如何获得技术预览?

准备好亲自尝试了吗?太棒了!但在你开始探索之前,有几点需要记住:

  • 重要提示#1:这是Docker Desktop的技术预览版本,事情可能不会像预期的那样工作。在继续之前,请确保备份您的容器和镜像。
  • 重要提示#2:此预览启用了包含的容器镜像存储不能被禁用。如果您当前没有使用容器镜像存储,则将无法访问预先存在的镜像和容器。

你可以在这里下载Docker Desktop的技术预览版本:

有什么已知的限制吗?

是的!这是一个早期的技术预览,我们仍在努力使体验尽可能流畅。但有几件事你应该注意:

  1. 当中断时,Docker Compose可能无法干净地退出

    • 解决方法:通过发送SIGKILL (killall -9 docker-compose)来清理docker-compose进程。
  2. 推送到集线器可能会给出一个错误server message: insufficient_scope: authorization failed,即使在使用Docker Desktop登录后
  • 解决方法:在命令行中执行docker login命令

OK,那么Wasm集成实际上是如何工作的呢?

我们很高兴你这么问!首先,我们需要提醒您,由于这是一个技术预览,事情可能会迅速变化。但它目前是这样运作的。

  1. 我们正在利用我们最近的工作将镜像管理迁移到容器,因为它提供了使用与兼容OCI-compatible和containerd shims的能力。
  2. 我们与WasmEdge合作,创造了一个containerd shim。这个shim从OCI-compatible中提取Wasm模块,并使用WasmEdge运行时运行它。
  3. 我们添加了对声明Wasm运行时的支持,这将支持使用这个新的shim。

image.png

让我们看一个例子!

在安装预览之后,我们可以运行以下命令来启动一个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 这通知Docker引擎我们想要使用Wasm containerd shim,而不是标准的Linux容器运行时
  • --platform=wasi/wasm32 指定我们想要使用的镜像的体系结构。通过利用Wasm体系结构,我们不需要为不同的体系结构构建单独的镜像。Wasm运行时将完成将Wasm二进制代码转换为机器指令的最后一步。

在提取图像之后,运行时读取图像的ENTRYPOINT以定位和提取Wasm模块。然后将模块加载到Wasm运行时中,启动并配置网络。现在,我们的机器上运行了一个Wasm应用程序!

这个特殊的应用程序是一个简单的web服务器,它说“Hello world!”并将数据反馈给我们。为了验证它是否工作,让我们首先查看日志。

docker logs wasm-example
Server is now running

我们可以通过打开http://localhost:8080或使用curl来获得“Hello world”消息。

curl localhost:8080

我们的响应会给我们一个Hello world信息:

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

为了将数据发送到echo端点,我们可以使用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正在迅速发展和发展,包括探索如何支持多线程垃圾回收等等。还有许多仍然需要解决的挑战,包括缩短开发人员反馈循环和可能的生产路径。

所以你可以自己尝试一下,然后让我们知道你对the public roadmap的想法或反馈。我们很乐意收到你的来信!

相关文章
|
6天前
|
弹性计算 运维 持续交付
探索Docker容器化技术及其在生产环境中的应用
探索Docker容器化技术及其在生产环境中的应用
36 5
|
1天前
|
运维 Ubuntu Linux
深入理解并实践Docker容器化技术
深入理解并实践Docker容器化技术
21 6
|
7天前
|
Cloud Native 持续交付 Docker
探索Docker容器化技术及其在软件开发中的应用
探索Docker容器化技术及其在软件开发中的应用
17 7
|
7天前
|
存储 虚拟化 开发者
深入理解Docker容器化技术
深入理解Docker容器化技术
36 6
|
10天前
|
持续交付 开发者 Docker
掌握 Docker:容器化技术在现代开发中的应用
Docker 是一个开源容器化平台,使开发者能够将应用程序及其依赖项封装在轻量级容器中,确保跨平台的一致性。本文介绍了 Docker 的基本概念、核心组件及优势,并展示了其在快速部署、一致性、可移植性和微服务架构中的应用。通过示例说明了 Docker 在本地开发环境搭建、服务依赖管理和 CI/CD 流程中的作用,以及多阶段构建、资源限制和网络模式等高级特性。掌握 Docker 可大幅提升开发效率和应用管理能力。
|
6天前
|
Cloud Native 持续交付 Docker
探索容器化技术Docker的奥秘
探索容器化技术Docker的奥秘
23 3
|
15天前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
|
20天前
|
Kubernetes Cloud Native 开发者
探索云原生技术:从Docker到Kubernetes的旅程
【8月更文挑战第31天】云原生技术正在改变软件开发、部署和运维的方式。本文将带你了解云原生的核心概念,并通过实际代码示例,展示如何使用Docker容器化应用,并进一步通过Kubernetes进行集群管理。我们将一起构建一个简单的微服务架构,体验云原生带来的高效与便捷。
|
20天前
|
应用服务中间件 Java Maven
掌控视图的力量!深入解析 JSF 视图管理,揭秘视图生命周期的秘密,让你的应用更高效!
【8月更文挑战第31天】JavaServer Faces (JSF) 是一种强大的框架,用于管理 Web 应用程序的视图。本文通过具体案例介绍 JSF 视图管理的基础知识,包括创建、管理和销毁视图的过程。首先,在 Eclipse 中创建一个新 JSF 项目,并配置 Maven 依赖。接着,在 `WEB-INF` 目录下配置 `web.xml` 文件,设置 JSF servlet。
31 0
|
20天前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【8月更文挑战第31天】 在云原生的世界里,容器技术是基石。本文将带你了解如何通过Kubernetes和Docker这两个强大的工具,搭建起你的云原生应用架构。我们将一起探索它们如何相互配合,提升开发与运维的效率。准备好了吗?让我们启航,探索云原生的奥秘!