专栏首页网站技术分享用 Lima 在你的 Mac 上运行容器
原创

用 Lima 在你的 Mac 上运行容器

在你的 Mac 上运行容器可能是一个挑战。毕竟,容器是基于 Linux 特有的技术,如控制组和命名空间。幸运的是,macOS 拥有一个内置的虚拟机监控程序hypervisor,允许在 Mac 上运行虚拟机(VM)。虚拟机监控程序是一个底层的内核功能,而不是一个面向用户的功能。hyperkit 是一个可以使用 macOS 虚拟机监控程序运行虚拟机的 开源项目。hyperkit 被设计成一个“极简化”的虚拟机运行器。与 VirtualBox 不同,它没有花哨的 UI 功能来管理虚拟机。你可以获取 hyperkit,这是一个运行容器管理器的极简 Linux 发行版,并将所有部分组合在一起。但这将有很多变动组件,且听起来像有很多工作。特别是如果你想通过使用 vpnkit (一个开源项目,用于创建感觉更像是主机网络一部分的虚拟机网络)使网络连接更加无缝。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。做完这些后,可以运行一个容器了!这个容器将运行一个 HTTP 服务器。你可以在你的 Mac 上创建这些文件:

$ lsindex.html$ cat index.htmlhello

现在,挂载并转发端口:

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

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

$ 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/>) ...

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

$ curl localhost:8000hello

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

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

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

^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/) ...

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

$ curl localhost:8000/foo.htmlgoodbye

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用 Lima 在你的 Mac 上运行容器

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

    用户8639654
  • 今日推荐:lima

    Lima:Linux-on-mac(“用于Linux的macOS子系统”,“用于Mac的容器”)

    仇诺伊
  • 云空调,GitHub 的专属冷气——GitHub 热点速览 v.21.20

    万物皆可上云,air-conditioner 是上周火爆小鱼干朋友圈和公众号信息流的云空调项目。第一眼的时候,你会觉得和这个云空调还挺别致的,第二眼,si~~感...

    HelloGitHub
  • 如何在Ubuntu 14.04上的Docker容器中运行Nginx

    通过容纳Nginx,我们减少了系统管理员的开销。我们将不再需要通过包管理器管理Nginx或从源代码构建它。Docker容器允许我们在发布新版本的Nginx时简单...

    朝朝
  • 如何在 Mac 上使用 pyenv 运行多个版本的 Python

    即使对于有经验的开发人员,管理本地 Python 开发环境仍然是一个挑战。尽管有详细的软件包管理策略,但仍需要采取另外的步骤来确保你在需要时运行所需的 Pyth...

    用户8639654
  • 在你的电脑上运行Kubernetes

    Kubernetes 是编配平台的首选。在开发过程中,您不妨在个人电脑上运行 Kubernetes,以便在本地启动和调试应用程序。本文提供了两种在 Mac OS...

    小铁匠米兰的v
  • 1 分钟上手,在容器中运行 Visual Studio Code

    https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-cont...

    为少
  • 使用非root用户在容器中运行celery

    在 docker 环境中, 如果使用 root 用户运行 celery worker会有下面才警告出现. 虽然可以通过C_FORCE_ROOT环境变量来避免这个...

    用户1416054
  • Mac在Hadoop的yarn上运行mapreduce报错ExitCodeException exitCode=127:

    hadoop 2.7.2 17/04/14 14:07:00 INFO mapreduce.Job: Job job_1492146520853_0005 r...

    Albert陈凯
  • 在 Android 模拟器上运行 ARM 应用

    随着 Android 11 开发者预览版的发布,我们同时也推出了 Android 11 系统映像。新的系统映像在执行 ARM 二进制文件方面取得了显著的性能提升...

    Android 开发者
  • Docker - 如何SSH到正在运行的容器

    本文包含有关如何让Docker容器使用SSH与其他Docker容器连接的说明。如果我没有提到一个或多个重点,请随意评论/建议。

    Hero
  • 进入正在运行的 docker 容器(docker container)

    在使用 docker 容器的时候,我们总会想看看容器内部长什么样子:我们使用 docker exec 命令可以满足我们的期望:

    xuyaowen
  • Docker修改正在运行的容器的时区

    笔者在对网站日志(nginx)做分析时,发现时间不在东八区,也就服务器时间和当前时间对不上,而该Web网站是放在Nginx容器中,本文是修改已经运行了的容器时区...

    肓己
  • 使用Termux在Android上运行SSH服务器

    借助出色的Termux终端仿真器应用程序,您可以在Android上运行SSH服务器。

    用户5005176
  • 进入正在运行状态中的Docker容器

    我运行一个包含了SpringBoot应用打好的jar包的docker镜像后,在宿主机控制台看到了SpringBoot应用成功启动的调试信息:

    Jerry Wang
  • 在裸机与虚拟机上运行容器:性能和优点

    根据最近的研究,Docker正在像野火一样蔓延,特别是在企业中,它的采用率从2015年的13%上升到了27%以上;另有35%的公司计划使用Docker。根据这些...

    首席架构师智库
  • 知识图谱这么火,本文带你揭秘它的前世今生!

    本文转载自SimmerChan的知乎专栏《知识图谱-给AI装个大脑》中的文章《为什么需要知识图谱?什么是知识图谱?——KG的前世今生》,作者已同意本公众号转载该...

    木东居士
  • 在你的 Android 手机上运行 Golang 程序

    在我们日常开发中,运行一个服务,都是在 shell 或 cmd 下执行命令,像是使用 go run main.go 直接编译运行,或是 go build 编译生...

    寻寻觅觅的Gopher
  • 使用Longhorn优雅地恢复正在运行中的容器应用

    鞠宏超,Rancher研发工程师。4年云计算领域经验,2018年加入Rancher Labs,先后参与了Longhorn产品研发,Rancher2.x产品研发,...

    CNCF

扫码关注云+社区

领取腾讯云代金券