跳转到内容

Lima — macOS 上跑 Linux 虚拟机的轻量 CLI

是什么

Lima 是一套让 macOS 一句命令起一台 Linux 虚拟机的工具,自动帮你处理文件共享、端口转发、镜像下载这些破事。

日常类比:直接玩 QEMU 像自己组装电脑——一堆参数、一堆命令行开关,新手会被劝退;Lima 像买成品笔记本——开机就能用,文件夹自动同步,网线自动插好。

最简单的体验,一行命令起一台 Ubuntu 虚机:

Terminal window
limactl start --name=default template://ubuntu
limactl shell default

第二行直接进了 VM 的 shell,里面 ls ~ 看到的就是 macOS 的家目录——文件共享自动配好。退出来后 limactl stop default 关机。

为什么重要

不理解 Lima 的位置,下面这些事都没法解释:

  • 为什么 Rancher Desktop / Colima / Finch(AWS)这些 Docker Desktop 替代品都跑在 Lima 上——它们只是包了一层 UI
  • 为什么 Apple Silicon 上 Lima + vz 模式跑容器比 Docker Desktop 快 2-3 倍——它直接用 macOS 原生虚拟化
  • 为什么 2021 Docker Desktop 商业化后,开源世界没有崩溃——Lima 顶上来当底座
  • 为什么 macOS 跑 Linux 工具链不再是噩梦——文件共享 + 端口转发自动化把 80% 痛苦消除

简单说:Lima 是 macOS Linux 容器生态的隐形地基,大多数人用 Colima / Rancher Desktop 时其实是在用 Lima。

核心要点

Lima 的模型可以拆成 三块

  1. VM 引擎:底层用 QEMU 或 vz(Apple Virtualization.framework)跑 Linux 内核。Intel Mac 默认 QEMU,Apple Silicon 可切 vz——后者性能近原生,前者跨架构更灵活。

  2. 声明式 YAML:每台 VM 是一份 lima.yaml,写明 CPU / 内存 / 磁盘 / 镜像 / 共享目录 / 端口转发规则。改 YAML 后 limactl start 重建,整台机器可重现。

  3. 自动桥接:Lima 默认把 macOS 家目录只读挂进 VM,VM 内 listen 在 0.0.0.0 的端口自动从 host 可达。这两件破事手写要几百行 QEMU 参数,Lima 默认就给你。

简单说:limactl 是把 QEMU/vz 包装成”开箱即用 Linux 沙盒”的命令行

实践案例

案例 1:装 Lima 然后起一台默认 VM

Terminal window
brew install lima
limactl start

第二行会问你选哪个模板(Ubuntu / Fedora / Alpine …),按回车走默认 Ubuntu。Lima 后台下镜像(约 500 MB)、起 VM、跑 cloud-init 配 SSH——全程不用你管。

完成后:

Terminal window
limactl shell default
uname -a # Linux lima-default ... aarch64 GNU/Linux

进 VM 后看到的是个干净的 Ubuntu,文件系统 /Users/你/ 直接挂载进来。

案例 2:拿 Lima 替代 Docker Desktop

Lima 默认模板 docker 自动装好 Docker daemon:

Terminal window
limactl start template://docker
docker context use lima-docker
docker run hello-world

docker context use 把本机 docker CLI 指向 Lima VM 里的 daemon,从此 docker run / docker build 行为和 Docker Desktop 一致,但底层是开源 + 免费。

实际生产里更多人用 Colimabrew install colima && colima start)——它是 Lima 的薄封装,把上面这三步合成一句话。

案例 3:写自己的 lima.yaml 起一台定制 VM

my-vm.yaml
vmType: vz
cpus: 4
memory: 8GiB
disk: 50GiB
images:
- location: https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-arm64.img
arch: aarch64
mounts:
- location: "~/projects"
writable: true
portForwards:
- guestPort: 8080
hostPort: 8080
Terminal window
limactl start ./my-vm.yaml

VM 内 ~/projects 写入会反映回 host,VM 内 python -m http.server 8080 在 host localhost:8080 就能访问。这套配置 check 进 git,团队任何人 limactl start 拿到一模一样的环境。

踩过的坑

  1. 第一次 start 卡在下载镜像:Ubuntu cloud image 500 MB+,国内网速慢经常超时。解决:换镜像源(社区有 alibaba/tuna 的代理 yaml),或先 curl -O 下完用 file:// 协议指向本地文件。

  2. QEMU 模式 IO 慢到怀疑人生:默认 QEMU + 9p 文件共享,编译 / npm install 慢一倍。解决:Apple Silicon 上加 vmType: vz + mountType: virtiofs,体感接近原生 Linux。

  3. 端口只转发 listen 0.0.0.0 的服务:很多人写 python -m http.server 默认 bind 0.0.0.0 没事,但有些工具默认 bind 127.0.0.1,host 怎么都连不上。解决:服务里显式 bind 0.0.0.0,或在 lima.yaml 里加 portForwards 规则强制转发。

  4. vz + Rosetta 跑 amd64 镜像偶尔崩:Apple Silicon 上 arch: x86_64 + rosetta: enabled: true 能跑 amd64 二进制,但部分老工具(特定 glibc 版本)会段错误。遇到就退回 QEMU 模拟,慢但稳。

适用 vs 不适用场景

适用

  • macOS 上替代 Docker Desktop(直接用,或通过 Colima / Rancher Desktop)
  • 本地学 k3s / k8s(lima 模板有 k3s / k8s.io 现成的)
  • 需要纯净 systemd 环境跑服务(容器跑 systemd 别扭,VM 天然支持)
  • 团队共享开发环境(lima.yaml 进 git,新人一句话起齐)

不适用

  • Linux / Windows 主机(Lima 专为 macOS 设计,Linux 直接用 LXD / multipass,Windows 用 WSL2)
  • 需要 GUI 桌面环境(Lima 偏向无头 server VM,要 GUI 用 UTM / VMware Fusion)
  • 性能敏感的极限场景(VM 仍有几个百分点开销,HFT / 内核调试用裸金属)
  • 不想学 YAML 的人(Colima 更简单,命令行 flag 就够)

历史小故事(可跳过)

  • 2021-03:Akihiro Suda(NTT,containerd 维护者之一)启动 Lima,最初目标只是”在 macOS 跑 nerdctl”。
  • 2021-06:Docker Inc 宣布 Docker Desktop 对大企业收费,开源社区急寻替代,Lima 一夜间从小众变热门。
  • 2022:Rancher Desktop 切到 Lima 做底座;Colima(Lima 的薄封装)出现,成为 macOS 跑 Docker 最简单的方式。
  • 2023:AWS 推 Finch(同样基于 Lima),证明 Lima 已经是基础设施级别的项目。
  • 2024:vz + virtiofs 成熟,性能瓶颈基本消除。
  • 2025-01:Lima 1.0 发布,API 稳定,正式推荐生产可用。

短短 4 年,从一个开发者的 side project 长成 macOS Linux 容器生态的事实标准。

学到什么

  1. 包装一层就能改变可用性——QEMU 已存在 20+ 年,Lima 只是”加默认值 + 自动化共享”,瞬间从极客玩具变大众工具
  2. 声明式 YAML 是基础设施的通用语——lima.yaml 让 VM 可重现、可共享、可 review
  3. 生态位比功能强大更重要——Lima 自己做的事不多,但它给 Colima / Rancher Desktop / Finch 当地基,价值乘以 N
  4. 开源替代品在商业化压力下会爆发——Docker Desktop 收费 → Lima 起飞,每次商业化都在催生新的开源底座

延伸阅读

关联

  • docker —— Lima 最大的使用场景就是替代 Docker Desktop 跑 Docker daemon
  • lazydocker —— Lima VM 内可以装 lazydocker 监控容器,体验和原生一致