
— 特色专栏 —
大家好,我是民工哥!
如果 WebAssembly(Wasm)早几年前出现,Docker 可能就不会出现了!因为它是一项非常强大的跨平台技术,可以让我们使用不同的编程语言来编写跨平台应用程序。Docker 的原始动力之一就是提供一个跨平台部署和应用的方法。

上面这段话是 Solomon Hykes(Docker的创始人之一)说的。
大意就是如果 WebAssembly 早几年出现的话,它就成为了 Docker 技术的替代品,它让跨平台部署和应用程序更加容易实现,运行更加流畅。
那么,这个 WebAssembly(Wasm)到底是什么?
今天,我们一起来看一看。
WebAssembly(Wasm)是一种基于堆栈虚拟机的二进制指令格式,旨在为现代Web浏览器提供高性能、跨平台的执行环境。它允许开发者使用C、C++、Rust等语言编写代码,并将其编译为Wasm模块,在浏览器中以接近原生应用的速度运行。

Wasm以紧凑的二进制格式存储,可转换为文本格式(.wat)便于调试和阅读。
例如,一个循环的文本表示如下:
(loop $my_loop
i32.const 0
if
;; 条件满足时执行的操作
else
;; 条件不满足时执行的操作
end
br $my_loop ;; 跳转回循环
)
Wasm采用栈式虚拟机设计,操作码(Opcode)后跟随操作数,通过压栈(push)和弹栈(pop)实现计算。
例如,i32.add指令会从栈顶弹出两个32位整数,相加后将结果压回栈顶。
基本类型:32位/64位整数、32位/64位浮点数。
内存类型:
使用函数表(Function Table)实现间接调用,避免直接跳转物理地址,增强安全性。
例如,函数调用需通过索引查找目标函数,间接调用时需进行类型检查。
Wasm的子类型基于内存布局覆盖关系,而非语言层面的继承。例如,若类型A的内存布局包含类型B,则A是B的子类型。
Wasm 与 Container 是两种不同的技术。
Wasm 适合轻量级、跨平台和短生命周期的任务(如无服务器函数、AI推理),而容器适合复杂、长期运行的服务(如企业应用、数据库)。
Docker已探索通过支持运行Wasm容器扩展其平台能力,例如使用Crun作为底层OCI运行时运行Wasm镜像。
容器运行时(如Crun)已集成Wasm支持,允许在同一Kubernetes集群中并存运行Wasm模块和容器。
ByteCode Alliance 和 CNCF 等组织正推动 Wasm 与容器的协同发展。
Container(容器)作为一种轻量级的虚拟化技术,在软件开发、部署和运维中广泛应用。它通过隔离进程和资源,实现了应用的高效运行和环境一致性。
WebAssembly(WASM)无法取代Docker,两者将在不同场景下共存并互补发展。

Docker 通过容器化技术提供完整的进程隔离和资源限制(如CPU、内存),适合运行长时间运行的状态化服务(如数据库、企业级Java应用)。
WASM 运行在沙箱环境中,默认无法访问宿主系统资源,需通过受控API(如WASI)交互,安全性更高,但资源管理能力较弱,难以支持复杂应用。
Docker 依赖主机操作系统内核,跨平台性有限(如Linux容器无法直接在Windows上运行)。
WASM 通过虚拟机(如Wasmtime、WasmEdge)解析执行字节码,不依赖操作系统内核,实现跨平台运行,适合资源受限的边缘设备。
Docker 已成为现代云原生技术栈的核心,拥有庞大的工具链(如Docker Hub、Kubernetes)和社区支持,数百万个预构建镜像提供了核心服务骨干。
WASM 生态尚在发展阶段,工具链和管理能力尚未完善,开发者需投入更多精力适配。
轻量级任务:如无服务器函数、AI推理、边缘计算等,WASM的轻量化特性使其在这些场景中具有优势。
跨平台应用:如游戏开发、浏览器插件等,WASM可实现代码的一次编写、多平台运行。
安全性要求高的场景:如金融、医疗等领域,WASM的沙箱环境可降低攻击面。
复杂应用部署:如微服务架构中的数据库、企业级应用等,Docker可充分利用Linux系统特性,支持长时间运行和复杂依赖管理。
CI/CD流水线:Docker可创建用于构建、测试和部署应用程序的可重复、一致的环境,简化部署流程。
多租户环境:Docker的隔离功能使多租户应用能够彼此独立运行,避免资源冲突或依赖关系问题。
Docker产品负责人Jake Levirne认为,WASM是Docker的补充而非替代,两者可共存以支持开发者选型应用程序架构。
Morphy 指出,WASM可作为Docker短板的优秀替补,特别是在边缘计算和分布式应用程序中,但无法完全取代Docker。
👍 既然都看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~