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

相关推荐
ShiXZ2131 小时前
PDF-OCR文件识别篇(八):配置、运维与排错
java·运维·ocr·dubbo·springboot
爱码少年2 小时前
Docker如何一次查看多个容器日志
运维·docker·容器
WI8LbH7882 小时前
Ubuntu 部署Harbor
linux·运维·ubuntu
huainingning2 小时前
华三ACL单向TCP互通组网-通过Established状态回包实现
运维·网络·tcp/ip
蜀道山老天师2 小时前
K8s 数据存储全解析:从 EmptyDir 到 PV/PVC
云原生·容器·kubernetes
researcher-Jiang3 小时前
高性能计算之MPI:第一次MPI并行程序设计练习
linux·运维·服务器
Promise微笑3 小时前
工业微量水分监测:精密露点仪选型逻辑与行业应用实证深度报告
大数据·运维
联盟分享专家4 小时前
垂直工具型 SaaS 的增长实战:如何把用户变成推广者?
运维
江畔柳前堤5 小时前
第16章:docker企业级实战综合项目
运维·git·安全·docker·容器·eureka