【译文】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的想法或反馈。我们很乐意收到你的来信!

相关文章
|
3天前
|
Kubernetes 调度 Docker
深入探讨容器编排技术:从Docker到Kubernetes
容器编排在现代IT中日益关键,从Docker到Kubernetes,助力应用的自动化部署和扩展。Docker提供容器技术,打包应用及环境为镜像,通过引擎、镜像、容器、网络和存储组件实现隔离运行。Kubernetes作为高级容器编排平台,管理Pod(多容器集合),其核心包括API服务器、控制器管理器、调度器和Kubelet。Kubernetes集群由Master和Worker节点构成,实现Pod的高效调度和运行。
54 6
|
3天前
|
持续交付 开发者 Docker
深入了解 Docker:革命性的容器化技术
Docker,自2013年起,革新了软件开发和部署,解决了环境差异问题。这个轻量级容器技术基于Linux容器(LXC),提供应用程序隔离和环境一致性。Docker通过容器化实现快速部署、CI/CD集成和微服务架构。相比虚拟机,Docker更轻便,不需模拟完整操作系统。它简化流程,提升效率,促进了容器化技术的普及。
75 0
|
3天前
|
Java Go 开发者
Docker容器技术简介及其与Go语言的结合点
【2月更文挑战第23天】本文首先概述了Docker容器技术的核心概念和优势,接着探讨了Go语言与Docker容器技术的结合点。通过阐述Docker的轻量级、可移植性和版本控制等特性,以及Go语言在容器化应用中的优势,本文旨在说明两者结合能够实现更高效、灵活的应用开发和部署。
|
3天前
|
Cloud Native Linux 开发者
【Docker】Docker:解析容器化技术的利器与在Linux中的关键作用
【Docker】Docker:解析容器化技术的利器与在Linux中的关键作用
|
3天前
|
Kubernetes Java 调度
Java容器技术:Docker与Kubernetes
Java容器技术:Docker与Kubernetes
26 0
|
3天前
|
Linux 开发者 Docker
Docker容器化技术详解
【4月更文挑战第30天】Docker,一个开源的容器化平台,助力开发者通过轻量级容器打包应用及依赖,实现跨平台快速部署。核心概念包括:容器(可执行的软件包)、镜像(只读模板)、Dockerfile(构建镜像的指令文件)和仓库(存储镜像的地方)。Docker利用Linux内核功能隔离容器,采用联合文件系统构建镜像。广泛应用包括开发测试一致性、微服务部署、CI/CD以及本地到远程部署。通过安装Docker,编写Dockerfile,构建&运行容器,可实现高效灵活的应用管理。随着容器技术进步,Docker在云计算和DevOps中的角色日益重要。
|
3天前
|
弹性计算 测试技术 持续交付
Docker技术这些应用场景,你知道吗?
Docker技术这些应用场景,你知道吗?
|
3天前
|
Cloud Native Shell Linux
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
22 0
|
3天前
|
Kubernetes 云计算 开发者
云计算中的容器化技术:Docker与Kubernetes的实践
云计算中的容器化技术:Docker与Kubernetes的实践
193 0
|
3天前
|
运维 Java Linux
深入解析:使用Docker容器化技术提升Java应用的部署效率
在快速迭代的软件开发周期中,如何保证应用的快速、一致和可靠部署成为了开发团队需要面对的重大挑战。本文将探讨如何利用Docker容器化技术,结合Java应用,实现高效、一致的部署流程。我们将从Docker的基本概念出发,详细介绍将Java应用容器化的步骤,包括创建Dockerfile、构建镜像以及运行容器等关键环节,并通过示例代码加以说明。此外,本文还将讨论在使用Docker部署Java应用时可能遇到的常见问题及其解决策略,旨在为读者提供一种提升部署效率、优化开发流程的有效方法。
314 2