微虚拟机 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 更轻 --- 朱皮特的烂笔头

相关推荐
开心大爆炸38 分钟前
xrdp 连接 登录对话框输入密码后闪退
linux·运维·服务器
梦Arrebol1 小时前
Kubernetes 微服务
微服务·容器·kubernetes
苏生Susheng2 小时前
【软件实施】Linux系统Shell脚本教程
linux·运维·服务器·chrome·spring boot·学习·实施
2601_962304912 小时前
把出片接进自动化流水线:2026 年批量 AI 视频生成工具的脚本契约与同类项目对照
运维·人工智能·自动化
Ruiery2 小时前
Linux 6.6内核 IOMMU 深度解析(七):DMA API 与 IOMMU 集成 — 从 dma_map_single 到 iommu_map
linux·运维·服务器
snow@li2 小时前
服务器运维:Alibaba Cloud Linux 4 LTS 64位 根目录全景深度解析文章
linux·运维·服务器
实战派K8S&DB3 小时前
《基于 Dify + FastAPI + PyTiDB 搭建大模型驱动的 TiDB 智能运维 Agent》
运维·数据库·分布式·云原生·tidb·fastapi
苏生Susheng3 小时前
【软件实施】Linux企业运维常用命令手册
java·linux·运维·服务器·springboot·springcloud·软件实施
想要成为老金高手3 小时前
Kubernetes 调度器详解:从 nodeName 到污点容忍
java·容器·kubernetes
名字还没想好☜4 小时前
Docker buildx 多架构镜像实战:一次构建 amd64+arm64,告别 exec format error
运维·docker·eureka·架构·kubernetes