5

Lima:Docker Desktop for Mac 的免费开源且自由的替代品

 2 years ago
source link: https://zhuanlan.zhihu.com/p/407119179
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Lima:Docker Desktop for Mac 的免费开源且自由的替代品

二次元/程序猿 公众号: MoeLove

大家好,我是张晋涛。

近期,Docker Inc. 公司突然修改了其产品定价和策略[1],Docker Desktop for Mac/Win 不再 免费 供大型企业内个人使用。

关于此新闻中涉及的条款,这里就不再展开介绍了。我来为大家介绍 一款免费、自由、开源的 Docker for Mac 替代品,containerd[2] & Lima[3]

你只需要执行以下命令即可快速体验:

$ brew install lima
$ limactl start
$ lima nerdctl run -it --rm alpine

注意:如果是 Arm 版的 Mac 则需要安装一个额外的 QEMU 的 patch ,请参考 Lima 的文档

什么是 containerd ? 什么是 nerdctl ?

containerd 是一个开源的容器运行时,被很多项目所使用,包括 Docker,和很多云厂商默认配置的 Kubernetes 集群,例如 AKS, EKS 和 GKE。

由于 containerd 项目的核心范围仅限于非面向用户的区域[4],因此用户很难直接与 containerd 进行交互。所以我们近期贡献了一个人性化的 CLI 作为 containerd 的非核心子项目:nerdctl[5] 。

nerdctl 的功能和用法几乎与 Docker CLI 相同,但是 nerdctl 还支持 Docker 中不存在的几个 containerd 的前沿功能。此类功能包括但不限于 延迟拉取(stargz)运行加密镜像(ocicrypt)

有关更多输 nerdctl 的内容可参考之前的文章:nerdctl: Docker-compatible CLI for contaiNERD

什么是 Lima?

Lima(Linux MAchines)可以启动具有自动文件共享、端口转发和使用 containerd 的 Linux 虚拟机。

Lima 截至到 2021 年 9 月 1 日时已经在 GitHub 上获得了 3k star 。

我们最初创建 Lima 是为了向 Mac 用户推广 containerd 和 nerdctl ,但是 Lima 也可以用于其他的容器引擎,例如 Podman 甚至是非容器化的应用程序。

Lima 的设计和 WSL2 类似,但 Lima 使用 MacOS 作为其主要的目标主机。Lima 目前不支持 Windows 主机,如果有需求,我们也可以考虑支持 Windows 系统。

Lima 的技术细节

以下是 Lima 的技术细节,感谢的小伙伴可以看看:

  • 管理程序: QEMU, 带 hvf (Hypervisor.framework)加速器;
  • 支持的 Guest 操作系统:Ubuntu (默认), Debian, Fedora, Alpine, Arch, and openSUSE;
  • 文件共享(host->guset):当前版本中使用的是 “Reverse SSHFS”,在将来可能会改变,可能会切换到 Samba;
  • 文件共享(guset->host):WebDAV over SSH(在 https://github.com/lima-vm/sshwebdav 中实验);
  • 端口转发: ssh -L 有一个 agent 进程在 guest 中监听 /proc/net/tcp*
  • 网络:默认在用户空间使用 “slirp”。同时也支持通过 sudo 和 VDE 使用 vmnet.framework 的高级网络配置,参考 https://github.com/lima-vm/vde_vmnet
  • 安全:在设计上不需要使用宿主机上的 root 权限,除了可选的 vmnet.framework 支持;

快速开始

安装 Lima

如果你使用的是 Intel Mac,只要运行如下 brew 命令即可完成:

$ brew install lima

如果你使用的 Arm Mac(M1),当前你需要安装一个 QUME 的 path 版本才能启用 hvf 加速,该补丁可能在不久之后会合并到 QUME 上游。请参考 Lima 的文档

启动 Lima

执行 limactl start 并按下回车选择 Proceed with the default configuration ,稍等几分钟,Lima 会自动完成下载 VM 镜像和启动虚拟机。

$ limactl start
? Creating an instance "default"  [Use arrows to move, type to filter]
> Proceed with the default configuration
  Open an editor to override the configuration
  Exit
...
INFO[0111] READY. Run `lima` to open the shell.

在看到 READY 输出后,执行 lima uname -a 来确认虚拟机已经在运行了。

$ lima uname -a
Linux lima-default 5.11.0-31-generic #33-Ubuntu SMP Wed Aug 11 13:19:04 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

使用 lima nerdctl 构建和运行一个容器

在宿主机上创建一个文件 ~/lima-test/Dockerfile 并写入以下内容:

FROM nginx
RUN  echo "hello lima" > /usr/share/nginx/html/index.html

然后使用如下命令构建一个名为 lima-test 的容器镜像:

$ lima nerdctl build -t lima-test ~/lima-test

Lima 将主机的家目录挂载到 guest 文件系统,所以 guest 中的 nerdctl 可以无缝的访问主机上的 ~/lima-test 目录。为了安全起见,家目录默认被挂载为只读,但是也可以通过在执行 limactl start 时,通过修改配置来实现可读写模式的挂载。

刚才构建好的 lima-test 镜像可通过如下命令进行启动:

$ lima nerdctl run -d -p 127.0.0.1:8080:80 lima-test

Lima 将 guest VM 上已经映射了容器中 80 端口的地址 127.0.0.1:8080 映射到宿主机上的 127.0.0.1:8080 ,所以你可以直接在 Safari 中打开 http://127.0.0.1:8080/ 进而访问到 lima-test 容器。

Rancher Desktop & GUI

Rancher Desktop 已经适配了 Lima ,以便在 macOS 上运行 k3s 。(我在之前的 『K8S生态周报』中曾为大家介绍过此项目)

尽管 Lima 和 nerdctl 它们目前不包含 GUI 控制面,但是 Rancher Desktop 已经使用 Electron 提供了一个很酷的 GUI 。

未来,上游的 Lima 和 nerdctl 可能也会有自己的 GUI ,这取决于来自社区的需求(和贡献)。

原文地址:https://medium.com/nttlabs/containerd-and-lima-39e0b64d2a59 经原作者 Akihiro Suda 授权翻译


欢迎订阅我的文章公众号【MoeLove】

http://weixin.qq.com/r/ZjkaAhPE5k6ZrVdh92x0 (二维码自动识别)

参考资料

Docker 新的产品定价策略公告: https://www.docker.com/blog/updating-product-subscriptions/

containerd: https://github.com/containerd/containerd

Lima: https://github.com/lima-vm/lima

containerd 项目的核心目标: https://containerd.io/scope/

nerdctl: https://github.com/containerd/nerdctl


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK