macOS 上全能的 Linux 虚拟机管理工具——OrbStack

OrbStack

前言

之前摸鱼的时候刷到了 OrbStack 的相关推文。看了 Benchmarks 对比后,决定安装上试一下,果然国外开发者诚不欺我!

进入 OrbStack 官网后引入眼帘的 Slogan 是:Say goodbye to slow, clunky containers and VMs

特点介绍

  • 原生 UI
  • 支持 eBPF
  • 支持 Linux VMs 管理(算是整合了 Docker 和 UTM)
  • 支持 ARM 和 Intel(在 ARM 可以上使用 Rosetta 转译)
  • 完善的 CLI 集成
  • Kubernetes 集成
  • VirtioFS 文件共享
  • 相较于 Docker Desktop 有更高的网络吞吐
  • 针对 Apple Silicon 优化
  • 支持为容器或虚拟机绑定域名

架构设计:

Arch

了解更多信息请移步至官方文档:

安装

$ brew install orbstack

域名

这是我觉得比较实用的功能,OrbStack 为 Docker compose 服务和容器都默认绑定了域名,我们可以通过访问 orb.local 来查看可访问的服务!

OrbStack Service list

例如我们在 OrbStack 中启动一个 名为 web 的 Nginx 容器,那么就会绑定一个 web.orb.local 的域名。OrbStack 通过 mDNS 来实现域名到 IP 的解析,我们可以通过如下命令查看域名解析的 IP:

$ dns-sd -Q web.orb.local

DATE: ---Sun 17 Sep 2023---
17:33:11.494 ...STARTING...
Timestamp A/R Flags IF Name Type Class Rdata
17:33:11.495 Add 40000002 24 web.orb.local. Addr IN 192.168.215.2

当然我们也可以自己手动注册,可以参考 dns-sd 的帮助手册:

$ dns-sd --help

dns-sd -E (Enumerate recommended registration domains)
dns-sd -F (Enumerate recommended browsing domains)
dns-sd -R <Name>  <Type>  <Domain>  <Port> [<TXT>...] (Register a service)
dns-sd -P <Name>  <Type>  <Domain>  <Port>  <Host>  <IP> [<TXT>...] (Register Proxy)
dns-sd -B <Type>  <Domain> (Browse for service instances)
dns-sd -Z <Type>  <Domain> (Output results in Zone File format)
dns-sd -L <Name>  <Type>  <Domain> (Resolve (‘lookup’) a service instance)
dns-sd -Q <name>  <rrtype>  <rrclass> (Generic query for any record type)
dns-sd -q <name>  <rrtype>  <rrclass> (Generic query, using SuppressUnusable)
dns-sd -G v4/v6/v4v6 <hostname> (Get address information for hostname)
dns-sd -X udp/tcp/udptcp <IntPort>  <ExtPort>  <TTL> (NAT Port Mapping)
dns-sd -H (Print usage for complete command list)
dns-sd -V (Get version of currently running daemon / system service)
dns-sd -O [-compress|-stdout](Dump the state of mDNSResponder to file / STDOUT)

但是 mDNS 有一个限制,那就是只对 .local 这个 TLD 有效,这也是为什么 OrbStack 在官方文档中说仅支持 local 的 TLD!

而对于 Docker Compose 启动的容器,则会使用 Docker Compose 项目名称作为域名的中缀,如上图所示,我为 outline 启动的一些列服务,得到的域名如下

  • cockroachdb.outline.orb.local
  • outline.outline.orb.local
  • zitadel.outline.orb.local
  • minio.outline.orb.local
  • postgres.outline.orb.local
  • redis.outline.orb.local
  • nginx.outline.orb.local

当然除了默认绑定的域名,我们还可以通过在 docker-compose.yaml 文件中为 service 配置 label 项来手动指定域名:

services:
  nginx:
    image: nginx
    labels:
      - dev.orbstack.domains=foo.local,bar.local

通过上面的配置,我们可以访问 foo.local 和 bar.local 来访问 Nginx 容器!

总结

OrbStack 强大且优雅,无论是 UI 还是设计理念,据说该项目的开发者还是一名大学生,只能说努力在天赋面前一文不值……

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 16
Cooper

这个雀食是个好东西,体验一阵子了。

1年前 评论

wndows 不支持吗

1年前 评论
GeorgeKing (楼主) 1年前

目前来看,除了软件更新频繁点,其他没啥不适

1年前 评论

唯一的缺点 就是以后可能收费

1年前 评论
nff93 1年前
GeorgeKing (楼主) 1年前
SeedLoop (作者) 1年前

file

我没搞懂他这个服务域名具体有什么用,比如我截图里,除了phpmyadmin那个可以直接访问,其余的也都无法访问,这个具体来干什么呢?

比如我nginx也不可能就一个站点,肯定是N个域名的。

能说说吗?

1年前 评论
GeorgeKing (楼主) 1年前
GeorgeKing (楼主) 1年前
PHPisGod (作者) 1年前
PHPisGod (作者) 1年前
PHPisGod (作者) 1年前
GeorgeKing (楼主) 1年前
Jianne

使用下来感觉挺好 :relaxed:

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!