首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Docker 已成过去式!WebAssembly 将取代容器?

Docker 已成过去式!WebAssembly 将取代容器?

作者头像
民工哥
发布2026-03-24 15:17:06
发布2026-03-24 15:17:06
30
举报

特色专栏

MySQL/PostgreSQL/MongoDB

ElasticSearch/Hadoop/Redis

Kubernetes/Docker/DevOps

Kafka/RabbitMQ/Zookeeper

监控平台/应用与服务/集群管理

Nginx/Git/Tools/OpenStack

大家好,我是民工哥!

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

上面这段话是 Solomon Hykes(Docker的创始人之一)说的。

大意就是如果 WebAssembly 早几年出现的话,它就成为了 Docker 技术的替代品,它让跨平台部署和应用程序更加容易实现,运行更加流畅。

那么,这个 WebAssembly(Wasm)到底是什么?

今天,我们一起来看一看。

WebAssembly 简介

WebAssembly(Wasm)是一种基于堆栈虚拟机的二进制指令格式,旨在为现代Web浏览器提供高性能、跨平台的执行环境。它允许开发者使用C、C++、Rust等语言编写代码,并将其编译为Wasm模块,在浏览器中以接近原生应用的速度运行。

wasm arch
wasm arch
核心特性
二进制与文本双格式

Wasm以紧凑的二进制格式存储,可转换为文本格式(.wat)便于调试和阅读。

例如,一个循环的文本表示如下:

代码语言:javascript
复制
(loop $my_loop
  i32.const 0
  if
    ;; 条件满足时执行的操作
  else
    ;; 条件不满足时执行的操作
  end
  br $my_loop  ;; 跳转回循环
)
基于栈的执行模型

Wasm采用栈式虚拟机设计,操作码(Opcode)后跟随操作数,通过压栈(push)和弹栈(pop)实现计算。

例如,i32.add指令会从栈顶弹出两个32位整数,相加后将结果压回栈顶。

数据类型与内存管理

基本类型:32位/64位整数、32位/64位浮点数。

内存类型:

  • 托管内存:由Wasm虚拟机管理,类似垃圾回收。
  • 线性内存(非托管):可定义多块内存区域,布局由编译器决定(如C++编译为Wasm时需处理内存对齐)。
结构化控制流

使用函数表(Function Table)实现间接调用,避免直接跳转物理地址,增强安全性。

例如,函数调用需通过索引查找目标函数,间接调用时需进行类型检查。

子类型系统

Wasm的子类型基于内存布局覆盖关系,而非语言层面的继承。例如,若类型A的内存布局包含类型B,则A是B的子类型。

Wasm 与 Container

Wasm 与 Container 是两种不同的技术。

Wasm 适合轻量级、跨平台和短生命周期的任务(如无服务器函数、AI推理),而容器适合复杂、长期运行的服务(如企业应用、数据库)。

Docker已探索通过支持运行Wasm容器扩展其平台能力,例如使用Crun作为底层OCI运行时运行Wasm镜像。

容器运行时(如Crun)已集成Wasm支持,允许在同一Kubernetes集群中并存运行Wasm模块和容器。

ByteCode Alliance 和 CNCF 等组织正推动 Wasm 与容器的协同发展。

Container(容器)作为一种轻量级的虚拟化技术,在软件开发、部署和运维中广泛应用。它通过隔离进程和资源,实现了应用的高效运行和环境一致性。

WebAssembly 会取代 Docker 吗?

WebAssembly(WASM)无法取代Docker,两者将在不同场景下共存并互补发展。

Docker 通过容器化技术提供完整的进程隔离和资源限制(如CPU、内存),适合运行长时间运行的状态化服务(如数据库、企业级Java应用)。

WASM 运行在沙箱环境中,默认无法访问宿主系统资源,需通过受控API(如WASI)交互,安全性更高,但资源管理能力较弱,难以支持复杂应用。

Docker 依赖主机操作系统内核,跨平台性有限(如Linux容器无法直接在Windows上运行)。

WASM 通过虚拟机(如Wasmtime、WasmEdge)解析执行字节码,不依赖操作系统内核,实现跨平台运行,适合资源受限的边缘设备。

Docker 已成为现代云原生技术栈的核心,拥有庞大的工具链(如Docker Hub、Kubernetes)和社区支持,数百万个预构建镜像提供了核心服务骨干。

WASM 生态尚在发展阶段,工具链和管理能力尚未完善,开发者需投入更多精力适配。

应用场景
WASM的适用场景

轻量级任务:如无服务器函数、AI推理、边缘计算等,WASM的轻量化特性使其在这些场景中具有优势。

跨平台应用:如游戏开发、浏览器插件等,WASM可实现代码的一次编写、多平台运行。

安全性要求高的场景:如金融、医疗等领域,WASM的沙箱环境可降低攻击面。

Docker的适用场景

复杂应用部署:如微服务架构中的数据库、企业级应用等,Docker可充分利用Linux系统特性,支持长时间运行和复杂依赖管理。

CI/CD流水线:Docker可创建用于构建、测试和部署应用程序的可重复、一致的环境,简化部署流程。

多租户环境:Docker的隔离功能使多租户应用能够彼此独立运行,避免资源冲突或依赖关系问题。

Docker产品负责人Jake Levirne认为,WASM是Docker的补充而非替代,两者可共存以支持开发者选型应用程序架构。

Morphy 指出,WASM可作为Docker短板的优秀替补,特别是在边缘计算和分布式应用程序中,但无法完全取代Docker

👍 既然都看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 民工哥技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WebAssembly 简介
    • 核心特性
  • Wasm 与 Container
  • WebAssembly 会取代 Docker 吗?
    • 应用场景
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档