查看原文
其他

Go 语言实现的轻量级 Linux 虚拟机

源自开发者 源自开发者
2024-08-28

在 macOS 上进行 Linux 开发,一直以来都是一个挑战。开发者需要使用 Docker Desktop 这样的工具,或者使用虚拟机,但是这些方法都存在一些问题。Docker Desktop 资源消耗较大,而虚拟机配置繁琐,使用起来也不够流畅。为了解决这个问题,Lima 应运而生。

Lima 简介

Lima 是一个用 Go 语言编写的开源工具,它可以让你在 macOS、Linux、NetBSD 等平台上轻松地创建和管理 Linux 虚拟机。Lima 的设计目标是:

  • 轻量级:Lima 使用 QEMU 作为虚拟化后端,并进行了优化,使得虚拟机启动速度更快,资源占用更低。
  • 易于使用:Lima 提供了简单的命令行工具,可以方便地创建、启动、停止和管理虚拟机。
  • 自动文件共享和端口转发:Lima 支持自动将宿主机上的文件和端口映射到虚拟机中,方便开发者进行开发和调试。

Lima 最初是为了方便 Mac 用户使用 containerd 和 nerdctl 而开发的,但它也可以用于其他容器引擎(如 Docker、Podman、Kubernetes 等)和非容器应用。

安装 Lima

在 macOS 上安装 Lima 非常简单,只需要使用 Homebrew 即可:

brew install lima

创建并启动虚拟机

Lima 提供了一些预定义的虚拟机模板,例如 dockerk8s 等,你可以直接使用这些模板创建虚拟机。例如,要创建一个运行 Docker 的虚拟机,可以使用以下命令:

limactl start template://docker

这会下载一个预先构建好的 Docker 镜像,并启动一个运行该镜像的虚拟机。你也可以自定义虚拟机的配置,例如 CPU 核心数、内存大小、磁盘空间等。

访问虚拟机

Lima 会自动将虚拟机的 SSH 端口转发到宿主机上,你可以使用 lima 命令连接到虚拟机:

lima

这会使用默认的 SSH 配置连接到虚拟机。你也可以使用 limactl shell 命令打开一个新的终端窗口,并连接到虚拟机。

文件共享

Lima 支持自动将宿主机上的文件系统共享到虚拟机中,默认情况下,宿主的 $HOME 目录会被共享到虚拟机的 /Users/$USER 目录。你也可以在配置文件中自定义共享目录。

端口转发

Lima 支持自动将宿主机上的端口转发到虚拟机中,你可以在配置文件中指定要转发的端口。例如,要将宿主机的 8080 端口转发到虚拟机的 80 端口,可以在配置文件中添加以下内容:

portForwards:
  - guestPort: 80
    hostPort: 8080

使用 Lima 运行 Docker

Lima 可以很方便地与 Docker 一起使用。在启动 Docker 虚拟机后,可以使用 limactl list docker 命令获取 Docker 守护进程的地址:

limactl list docker --format 'unix://{{.Dir}}/sock/docker.sock'

然后,将 DOCKER_HOST 环境变量设置为该地址:

export DOCKER_HOST=$(limactl list docker --format 'unix://{{.Dir}}/sock/docker.sock')

现在,你就可以像在宿主机上一样使用 Docker 命令了。

使用 Lima 运行 Kubernetes

Lima 也可以用于运行 Kubernetes 集群。在启动 Kubernetes 虚拟机后,可以使用 limactl list k8s 命令获取 kubeconfig 文件的路径:

limactl list k8s --format 'unix://{{.Dir}}/copied-from-guest/kubeconfig.yaml'

然后,将 KUBECONFIG 环境变量设置为该路径:

export KUBECONFIG=$(limactl list k8s --format 'unix://{{.Dir}}/copied-from-guest/kubeconfig.yaml')

现在,你就可以像使用远程集群一样使用 kubectl 命令了。

Lima 的优势

相比于其他 macOS 上的 Linux 虚拟化解决方案,Lima 有以下几个优势:

  • 轻量级: Lima 虚拟机启动速度快,资源占用低,不会拖慢你的系统。
  • 易于使用: Lima 命令行工具简单易用,可以方便地创建、启动、停止和管理虚拟机。
  • 自动文件共享和端口转发: Lima 可以自动将宿主机上的文件和端口映射到虚拟机中,方便开发者进行开发和调试。
  • 支持多种容器引擎: Lima 不仅支持 Docker,还支持 containerd、Podman、Kubernetes 等多种容器引擎。

总结

Lima 是一个功能强大且易于使用的 Linux 虚拟机工具,它为 macOS 用户提供了一种在本地运行 Linux 和容器化应用的便捷方式。如果你正在寻找一种轻量级、易于使用且功能强大的虚拟化解决方案,那么 Lima 绝对值得一试。

文章精选

使用 Go 语言连接并操作 SQLite 数据库

Go语言官方团队推荐的依赖注入工具

替代zap,Go语言官方实现的结构化日志包

Go语言常见错误 | 不使用function option模式

必看| Go语言项目结构最佳实践


点击关注并扫码添加进交流群
领取「Go 语言」学习资料

继续滑动看下一个
源自开发者
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存