微虚拟机 smolvm 与Docker 容器比较

一、概述

molvm 是一个 CLI 工具,跨平台运行微 VM。基于 libkrun VMM,冷启动 <200ms,兼容 OCI 容器镜像,支持 macOS/Linux/Windows,产出 .smolmachine 便携包。面向沙箱执行、开发隔离和可移植工作负载

smolmachines 的微虚拟机 smolvm(基于 libkrun,与 Podman 共用底层)、podlet(compose 转 quadlet 的工具)、hetzner-podman-bunjs-deploy 模板项目等

molvm 比 Docker 容器隔离更强(独立内核),比 QEMU 虚拟机启动更快(<200ms),比 Firecracker 支持更多平台(macOS/Windows)。

二、技术架构

smolvm 的工作方式:

  1. 硬件虚拟化层------使用平台原生虚拟化后端:macOS 的 Hypervisor.framework、Linux 的 KVM、Windows 的 Windows Hypervisor Platform(WHP)
  2. VMM (Virtual Machine Monitor)------基于 libkrun,一个库形式的轻量 VMM,无需 QEMU 那样的独立守护进程
  3. 自定义内核 ------使用 libkrunfw 提供微 VM 专用内核,只包含运行容器化工作负载所需的最小内核模块
  4. 镜像格式------OCI 兼容,可以直接使用 Docker Hub / ghcr.io 上的任何容器镜像,无需额外转换
  5. 弹性内存------通过 virtio balloon 实现内存弹性分配,宿主机只提交 VM 实际使用的内存量,空闲时自动回收

三、解决问题

容器不够隔离

容器共享宿主内核,虽然轻量,但内核漏洞(如 Dirty Pipe、Dirty COW)可以突破 namespace 隔离。smolvm 给每个工作负载一个独立内核,硬件隔离由 Hypervisor.framework(macOS)、KVM(Linux)或 Windows Hypervisor Platform(Windows)保证

QEMU 太重了

QEMU 启动 15-30 秒,镜像管理复杂,不适合"临时跑一个命令就跑完"的场景。smolvm 冷启动 <200ms,用完即焚,体验像运行本地命令行一样自然。

跨平台便携难

你开发时在 macOS,CI 在 Linux,部署在 Windows------每个平台的虚拟化方案都不一样。smolvm 统一抽象为 smolvm machine run,而且可以把一台完整 VM 打包成 .smolmachine 在任意支持的平台上恢复。

四、与其他方案的对比

smolvm 的 README 自带了一张对比表,非常清晰

维度 smolvm Docker 容器 Colima QEMU Firecracker Kata
隔离性 每工作负载独立 VM namespace(共享内核) namespace(1 个 VM) 独立 VM 独立 VM 每容器 VM
冷启动 <200ms ~100ms ~秒级 ~15-30s <125ms ~500ms
架构 库(libkrun) 守护进程 守护进程(在 VM 中) 进程 进程 运行时栈
每工作负载 VM ✔ ✗ ✗(共享) ✔ ✔ ✔
macOS native ✔ 需 Docker VM ✔(krunkit) ✔ ✗ ✗
可嵌入 SDK ✔ ✗ ✗ ✗ ✗ ✗
便携制品 .smolmachine 镜像(需守护进程) ✗ ✗ ✗ ✗

核心差异:

  • Docker------启动最快,但隔离最弱(共享内核)

  • QEMU------功能最全,但启动最慢(15-30 秒)

  • Firecracker------启动最快(<125ms),但只支持 Linux,不适合 macOS 开发机

  • smolvm------在启动速度(200ms)和平台覆盖(三大桌面系统)之间取了最实用的平衡点

    smolvm/
    ├── src/ # 主 CLI 入口
    ├── crates/
    │ ├── smolvm-agent # VM 内部代理
    │ ├── smolvm-network # 网络层
    │ ├── smolvm-pack # 打包子系统
    │ ├── smolvm-protocol # 宿主机-客户机协议
    │ ├── smolvm-registry # OCI 镜像注册表交互
    │ └── smolvm-smolfile # Smolfile 解析器
    └── docs/

五、适用场景

场景 为什么用 smolvm
临时运行不可信代码 硬件隔离 + 默认无网络 + 细粒度出站控制
构建便携开发环境 .smolmachine 文件跨平台运行,无依赖
CI/CD 任务隔离 次秒启动,用完即焚,不污染 CI 宿主机
本地开发与 CI 保持环境一致 同一 Smolfile 声明即可复现
短时容器化工作负载 比 Docker 隔离更强,比 QEMU 轻,代价适中
无 root 权限的场景 OCI 镜像拉取 + libkrun VMM,无需 Docker 守护进程

参考资料

https://github.com/smol-machines/smolvm

Introducing Podman v6.0.0

smolvm:一次秒冷的微 VM 运行器,比容器更隔离、比 QEMU 更轻 --- 朱皮特的烂笔头

相关推荐
克里斯蒂亚诺更新15 分钟前
一个服务器访问另外一个服务器端口页面
运维·服务器
12.=0.23 分钟前
【持续更新】shell脚本 + Linux命令
linux·运维·服务器
无言听风雨丶1 小时前
Linux 容器本质探秘:Cgroup 与 Namespace 深度解析与实战
linux·运维·服务器·kubernetes
万联WANFLOW1 小时前
CVE-2026-98432 等漏洞自查:AI 查出的 Linux、Windows 漏洞,运维怎么确认受不受影响
linux·运维·windows·网络安全
debugdynamo1 小时前
Netcatty:把 SSH 客户端做回工作台
运维·其他·ssh
时空无限1 小时前
ssh 直接免密输入 sudo 密码
运维·ssh
OPEN-F1 小时前
Ubuntu 自动登录后 GNOME 远程桌面连不上?一次登录钥匙环锁定的排查与永久修复
linux·运维·ubuntu
硅基手札1 小时前
【Linux 内核专栏 19】20 · 嵌入式子系统 — GPIO·pinctrl·clock·regulator
linux·运维·单片机·linux内核·嵌入式开发·调试定位
修心光2 小时前
记录一次,jenkins打包异常问题
运维·jenkins
分布式存储与RustFS2 小时前
JuiceFS 接 RustFS 当数据后端:把对象存储挂成本地文件系统
运维·云原生·开源·对象存储·分布式存储·s3·性能基准