这篇文章上次修改于 1111 天前,可能其部分内容已经发生变化,如有疑问可询问作者。 ![Image](https://blog.37hi.com/usr/uploads/2021/09/3071166.png) 近期,Docker Inc. 公司[突然修改了其产品定价和策略](http://mp.weixin.qq.com/s?\_\_biz=MzA5OTAyNzQ2OA==&mid=2649737941&idx=2&sn=d12efe3c25649bf1e91e6dd4e01bde34&chksm=8893f5b6bfe47ca0ce044e654c4661cb7bebecc4bcd300132b8722a122e781bfcf157742fc3a&scene=21#wechat\_redirect),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 ,请参考:https://github.com/lima-vm/lima#getting-started 什么是 containerd?什么是 nerdctl? containerd 是一个开源的容器运行时,被很多项目所使用,包括 Docker,和很多云厂商默认配置的 Kubernetes 集群,例如 AKS, EKS 和 GKE。 由于 containerd 项目的核心范围\[1\]仅限于非面向用户的区域,因此用户很难直接与 containerd 进行交互。所以我们近期贡献了一个人性化的 CLI 作为 containerd 的非核心子项目:nerdctl\[2\]。 nerdctl 的功能和用法几乎与 Docker CLI 相同,但是 nerdctl 还支持 Docker 中不存在的几个 containerd 的前沿功能。此类功能包括但不限于 延迟拉取(stargz)和 运行加密镜像(ocicrypt)。 有关更多输 nerdctl 的内容可参考之前的文章:https://medium.com/nttlabs/nerdctl-359311b32d0e 什么是 Lima? Lima(Linux MAchines)可以启动具有自动文件共享、端口转发和使用 containerd 的 Linux 虚拟机。 Lima 截至到 2021 年 9 月 1 日时已经在 GitHub 上获得了 3k star 。 ![Image](https://blog.37hi.com/usr/uploads/2021/09/1617372180.png) 我们最初创建 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和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),当前你需要安装一个 QEMU 的 path 版本才能启用 hvf 加速,该补丁可能在不久之后会合并到 QEMU 上游。请参考:https://github.com/lima-vm/lima#getting-started **启动 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[] 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 容器。 ![Image](https://blog.37hi.com/usr/uploads/2021/09/2673145439.png) 通过 Safari 访问到 guest VM Rancher Desktop & GUI ![Image](https://blog.37hi.com/usr/uploads/2021/09/1523149916.png) Rancher Desktop 已经适配了 Lima ,以便在 macOS 上运行 k3s 。 ![Image](https://blog.37hi.com/usr/uploads/2021/09/306119673.png) 安装 Rancher Desktop 尽管 Lima 和 nerdctl 它们目前不包含 GUI 控制面,但是 Rancher Desktop 已经使用 Electron 提供了一个很酷的 GUI 。 ![Image](https://blog.37hi.com/usr/uploads/2021/09/44796203.png) Rancher Desktop v0.4.1 ![Image\](https://blog.37hi.com/usr/uploads/2021/09/588384651.png) Rancher Desktop 在后台运行 Lima 未来,上游的 Lima 和 nerdctl 可能也会有自己的 GUI ,这取决于来自社区的需求(和贡献)。 相关链接: 1. https://containerd.io/scope/ 2. https://github.com/containerd/nerdctl 转自:https://mp.weixin.qq.com/s/s7DsZI1sYIAtQTlwWLbp\_Q
没有评论