前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用 Lima 在你的 Mac 上运行容器

用 Lima 在你的 Mac 上运行容器

原创
作者头像
用户8989785
修改2021-10-13 18:04:00
1.6K0
修改2021-10-13 18:04:00
举报
文章被收录于专栏:网站技术分享网站技术分享

在你的 Mac 上运行容器可能是一个挑战。毕竟,容器是基于 Linux 特有的技术,如控制组和命名空间。幸运的是,macOS 拥有一个内置的虚拟机监控程序hypervisor,允许在 Mac 上运行虚拟机(VM)。虚拟机监控程序是一个底层的内核功能,而不是一个面向用户的功能。hyperkit 是一个可以使用 macOS 虚拟机监控程序运行虚拟机的 开源项目。hyperkit 被设计成一个“极简化”的虚拟机运行器。与 VirtualBox 不同,它没有花哨的 UI 功能来管理虚拟机。你可以获取 hyperkit,这是一个运行容器管理器的极简 Linux 发行版,并将所有部分组合在一起。但这将有很多变动组件,且听起来像有很多工作。特别是如果你想通过使用 vpnkit (一个开源项目,用于创建感觉更像是主机网络一部分的虚拟机网络)使网络连接更加无缝。Lima当 lima 项目 已经解决了这些细节问题时,就没有理由再去做这些努力了。让 lima 运行的最简单方法之一是使用 Homebrew。你可以用这个命令安装 lima

代码语言:javascript
复制
$ brew install lima

安装后,可能需要一些时间,就享受一些乐趣了。为了让 lima 知道你已经准备好了,你需要启动它。下面是命令:

代码语言:javascript
复制
$ limactl start

如果这是你第一次运行,你会被问到是否喜欢默认值,或者是否要改变其中的任何一项。默认值是非常安全的,但我喜欢生活在疯狂的一面。这就是为什么我跳进一个编辑器,从以下地方进行修改:

代码语言:javascript
复制
- location: "~"  # CAUTION: `writable` SHOULD be false for the home directory.  # Setting `writable` to true is possible but untested and dangerous.  writable: false

变成:

代码语言:javascript
复制
 - location: "~"  # I *also* like to live dangerously -- Austin Powers  writable: true

正如评论中所说,这可能是危险的。可悲的是,许多现有的工作流程都依赖于挂载是可读写的。默认情况下,lima 运行 containerd 来管理容器。containerd 管理器也是一个非常简洁的管理器。虽然使用一个包装的守护程序,如 dockerd,来增加这些漂亮的工效是很常见的,但也有另一种方法。nerdctl 工具nerdctl 工具是 Docker 客户端的直接替换,它将这些功能放在客户端,而不是服务器上。lima 工具允许无需在本地安装就可以直接从虚拟机内部运行 nerdctl。做完这些后,可以运行一个容器了!这个容器将运行一个 HTTP 服务器。你可以在你的 Mac 上创建这些文件:

代码语言:javascript
复制
$ lsindex.html$ cat index.htmlhello

现在,挂载并转发端口:

代码语言:javascript
复制
$ lima nerdctl run --rm -it -p 8000:8000 -v $(pwd):/html --entrypoint bash pythonroot@9486145449ab:/#

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

代码语言:javascript
复制
$ lima nerdctl run --rm -it -p 8000:8000 -v $(pwd):/html --entrypoint bash pythonroot@9486145449ab:/# cd /html/root@9486145449ab:/html# python -m http.server 8000Serving HTTP on 0.0.0.0 port 8000 (<http://0.0.0.0:8000/>) ...

在另一个终端,你可以检查一切看起来都很好:

代码语言:javascript
复制
$ curl localhost:8000hello

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

代码语言:javascript
复制
10.4.0.1 - - [09/Sep/2021 14:59:08] "GET / HTTP/1.1" 200 -

一个文件是不够的,所以还要做些优化。 在服务器上执行 CTRL-C,并添加另一个文件:

代码语言:javascript
复制
^CKeyboard interrupt received, exiting.root@9486145449ab:/html# echo goodbye &gt; foo.htmlroot@9486145449ab:/html# python -m http.server 8000Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

检查你是否能看到新的文件:

代码语言:javascript
复制
$ curl localhost:8000/foo.htmlgoodbye

总结总结一下,安装 lima 需要一些时间,但完成后,你可以做以下事情:运行容器。将你的主目录中的任意子目录挂载到容器中。编辑这些目录中的文件。运行网络服务器,在 Mac 程序看来,它们是在 localhost 上运行的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档