使用 Lima 在 Mac 上运行容器

Lima 可以帮助克服在 Mac 上运行容器的挑战。
61 位读者喜欢这篇文章。
Creating a reproducible build system for Docker images

Håkan Dahlström. CC BY-SA 4.0

在 Mac 上运行容器可能是一个挑战。毕竟,容器是基于 Linux 特定的技术,如 cgroups 和命名空间。

幸运的是,macOS 有一个内置的虚拟机管理程序,允许在 Mac 上运行虚拟机 (VM)。虚拟机管理程序是一个低级别的内核功能,而不是面向用户的功能。

介绍 hyperkit,一个 开源项目,它将使用 macOS 虚拟机管理程序运行 VM。hyperkit 工具被设计为一个“极简”VM 运行器。与 VirtualBox 不同,它不提供用于管理 VM 的精美 UI 功能。

您可以获取 hyperkit,一个运行容器管理器的极简 Linux 发行版,并将所有部件连接在一起。这将有很多移动部件,听起来工作量很大。特别是如果您想通过使用 vpnkit 使网络连接更无缝,vpnkit 是一个开源项目,用于创建一个感觉更像是主机网络一部分的 VM 网络。

Lima

没有理由花费这么多精力,因为 lima 项目已经解决了这些细节。 运行 lima 最简单的方法之一是使用 Homebrew。您可以使用此命令安装 lima

$ brew install lima

安装完成后,可能需要一段时间,现在是开始享受乐趣的时候了。 为了让 lima 知道您已准备好开始,您需要启动它。 这是命令

$ limactl start

如果是您第一次使用,系统会询问您是否喜欢默认设置,或者是否要更改任何设置。 默认设置非常安全,但我喜欢冒险。 这就是为什么我跳到编辑器并进行以下修改,从

 - location: "~"
    # CAUTION: `writable` SHOULD be false for the home directory.
    # Setting `writable` to true is possible but untested and dangerous.
    writable: false

  - location: "~"
    # I *also* like to live dangerously -- Austin Powers
    writable: true

正如评论中所说,这可能很危险。 遗憾的是,许多现有的工作流程都依赖于此挂载为读写。

默认情况下,lima 运行 containerd 来管理容器。 containerd 管理器也是一个非常简洁的管理器。 虽然使用包装守护程序(例如 dockerd)来添加这些锦上添花的人体工程学特性并不少见,但还有另一种方法。

nerdctl 工具

nerdctl 工具是 Docker 客户端的直接替代品,它将这些功能放在客户端中,而不是服务器中。 lima 工具允许运行 nerdctl,而无需在本地安装它,而是直接从 VM 内部运行。

将它们放在一起,现在是运行容器的时候了! 此容器将运行 HTTP 服务器。 您可以在 Mac 上创建文件

$ ls
index.html
$ cat index.html
hello

现在,挂载并转发端口

$ lima nerdctl run --rm -it -p 8000:8000 -v $(pwd):/html --entrypoint bash python
root@9486145449ab:/# 

在容器内部,运行一个简单的 Web 服务器

$ lima nerdctl run --rm -it -p 8000:8000 -v $(pwd):/html --entrypoint bash python
root@9486145449ab:/# cd /html/
root@9486145449ab:/html# python -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

从另一个终端,您可以检查一切是否正常

$ curl localhost:8000
hello

回到容器,有一条日志消息记录了 HTTP 客户端的连接

10.4.0.1 - - [09/Sep/2021 14:59:08] "GET / HTTP/1.1" 200 -

一个文件不够,所以是时候改进一些东西了。 CTRL-C 服务器,并添加另一个文件

^C
Keyboard interrupt received, exiting.
root@9486145449ab:/html# echo goodbye > foo.html
root@9486145449ab:/html# python -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

检查您是否可以看到新文件

$ curl localhost:8000/foo.html
goodbye

总结

总而言之,安装 lima 需要一段时间,但完成后,您可以执行以下操作

  • 运行容器。
  • 将主目录的任意子目录挂载到容器中。
  • 编辑这些目录中的文件。
  • 运行网络服务器,使 Mac 程序看起来像它们在 localhost 上运行一样。

全部使用 lima nerdctl

下一步阅读
标签
Moshe sitting down, head slightly to the side. His t-shirt has Guardians of the Galaxy silhoutes against a background of sound visualization bars.
自 1998 年以来,Moshe 一直参与 Linux 社区,帮助举办 Linux“安装派对”。 自 1999 年以来,他一直在编写 Python,并为核心 Python 解释器做出了贡献。 自从这些术语出现之前,Moshe 一直是一名 DevOps/SRE,他非常关心软件的可靠性、构建的可重复性以及其他此类事情。

1 条评论

喜欢这篇文章

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.