Lima简介
在很久以前,我尝试在 macOS 上运行Linux虚拟机,使用的是 xhyve - macOS平台的KVM ,其原理是包装和调用 macOS 内置的 Hypervisor 来实现虚拟机运行。随着macOS虚拟化技术的发展,涌现出一些对标 Windows 上 WSL2
的开源项目和商用软件。其中, lima-vm.io 就是其中的佼佼者,社区发展迅速,不仅成为 CNCF沙箱项目
,而且也衍生出了很多容器化开源项目:
Lima的优点是在启动Linux虚拟机同时会自动实现文件共享(file sharing)和端口转发(port forwarding),这对使用者非常友好,类似于Windows的WSL2。我的使用体验是,几乎无感知地将 macOS 的数据目录作为Lima的本地磁盘,能够如同Linux上运行Docker一样以标准化的 Docker 卷 挂载到容器内部。
容器环境
在Lima之上,开源社区有多个容器环境项目:
Colima : 非常简单配置就能够在macOS上运行Docker和Kubernetes,该项目得到了Thoughtworks技术雷达的 "采纳推荐" (替代 Docker Desktop)
GitHub: Finch 对标 Moby 的macOS平台容器镜像构建工具
Podman Desktop 使用一个插件来运行Lima虚拟机的Podman Desktop GUI
GUI
在 macOS 平台,有以下帮助管理虚拟机的软件:
lima-xbar-plugin 使用 xbar 的管理VM启动、停止、状态等
lima-gui 使用Qt开发的Lima管理器
限制和不足
Lima目前对USB设备共享支持不足(文档中没有关于如何共享Host主机的USB设备到虚拟机,根据issue搜索看来还没有支持):
[POC] USB sharing with host #1317 目前还是讨论草稿:
默认使用的VZ引擎( Apple Virtualization ),但没有支持USB设备( Apple Virtualization / USB Devices 显示底层虚拟框架是支持USB设备的,似乎Lima还没有相关开发)
如果使用 QEMU 引擎,则可以通过
qemu-system-x86_64
命令参数-device
将USB设备连接到虚拟机(启动VM前需要先连接USB设备并获取USB设备id) : 具体方法见 Can I pass through a usb port via qemu command line
备注
如果需要运行纯 ref:qemu 虚拟机,那么优先使用 macOS平台QEMU实现:UTM (专注qemu虚拟化,交互方便)
如果在Apple Silicon硬件上运行,并且只使用 Linux 和 macOS 虚拟机,那么使用 Tart - 虚拟化工具集 较好(完全 Apple Virtualization 技术,且只专注Apple Silicon)