在 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
。
1 条评论