乐趣区

关于docker:LimaDocker-Desktop-for-Mac-的免费开源且自由的替代品

大家好,我是张晋涛。

近期,Docker Inc. 公司忽然批改了其产品定价和策略,Docker Desktop for Mac/Win 不再 收费 供大型企业内集体应用。

对于此新闻中波及的条款,这里就不再开展介绍了。我来为大家介绍 一款收费、自在、开源的 Docker for Mac 替代品,containerd & Lima

你只须要执行以下命令即可疾速体验:

$ 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 我的项目的外围范畴仅限于非面向用户的区域,因而用户很难间接与 containerd 进行交互。所以咱们近期奉献了一个人性化的 CLI 作为 containerd 的非核心子项目:nerdctl。

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/ss… 中试验);
  • 端口转发:ssh -L 有一个 agent 过程在 guest 中监听 /proc/net/tcp*
  • 网络:默认在用户空间应用“slirp”。同时也反对通过 sudo 和 VDE 应用 vmnet.framework 的高级网络配置,参考 https://github.com/lima-vm/vd…;
  • 平安:在设计上不须要应用宿主机上的 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/co…
经原作者 Akihiro Suda 受权翻译


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

退出移动版