macOS 上全能的虚拟机管理工具——OrbStack
前言⌗
之前摸鱼的时候在 Twitter 上刷到了 OrbStack 的相关推文。看了 Benchmark 对比后,决定安装上试一下,果然国外开发者诚不欺我!
进入 OrbStack 官网后引入眼帘的 Slogan 是:Say goodbye to slow, clunky containers and VMs
。
特点介绍⌗
- 原生 UI
- 支持 Linux VMs 管理
- 支持 ARM 和 Intel(在 ARM 可以上使用 Rosetta 转译)
- VirtioFS 文件共享
- 完善的 CLI 集成
- Kubernetes 集成
- 更高的网络吞吐
- 支持 eBPF
- 针对 Apple Silicon 优化
- 支持为容器绑定域名
架构设计:
了解更多信息请移步至官方文档:
- OrbStack 官网:https://orbstack.dev
- OrbStack 文档:https://docs.orbstack.dev
安装⌗
brew install orbstack
域名⌗
这是我觉得比较实用的功能,OrbStack 为 Docker compose 服务和容器都默认绑定了域名,我们可以通过访问 http://orb.local 来查看可访问的服务!
例如我们在 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 还是设计理念,据说该项目的开发者还是一名大学生,只能说努力在天赋面前一文不值……
I hope this is helpful, Happy hacking…