MacOS 上使用 orbstack 管理 Linux 虚拟机

使用 orbstack 管理 Linux 虚拟机,可以方便的创建、启动、停止、删除 Linux 虚拟机,并且可以方便的进行文件的共享、网络的连接等操作。

虚拟机管理

使用 orbstack 管理虚拟机可以使用 orbctl 命令,也可以使用专门用于管理虚拟机的子命令 orb 命令。

创建虚拟机

以创建 ubuntu 系统的虚拟机为例,更多虚拟机系统可以查看支持的虚拟机发行版列表

orb create ubuntu

orb create ubuntu:22.04 # 指定系统版本
orb create ubuntu:noble # 指定系统版本

orb create ubuntu my-ubuntu # 自定义虚拟机名称

orb create -a arm64 ubuntu # 指定架构
orb create -a amd64 ubuntu # 指定架构

orb create -u ubuntu # 指定用户名(默认当前用户)
orb create -p ubuntu # 指定密码(回车后输入用户密码, sudo 时需要输入指定的密码,默是空密码)

同时可以使用命令别名:orb addorb new 来创建虚拟机。

重命名虚拟机

重命名虚拟机,可以方便的通过虚拟机名来管理虚拟机。

orb rename ubuntu my-ubuntu
  • ubuntu 是虚拟机名
  • my-ubuntu 是新虚拟机名

虚拟机列表

列出所有虚拟机,可以查看虚拟机的运行状态、虚拟机名、版本和架构等信息。

orb list

orb list --running # 仅列出运行中的虚拟机
orb list --quiet # 仅列出停止的虚拟机名

虚拟机信息

查看虚拟机的详细信息,包括虚拟机的ID、名称、状态、发行版、版本和架构。

orb info ubuntu
  • ubuntu 是虚拟机名或者虚拟机ID

虚拟机日志

查看虚拟机的日志,可以查看虚拟机的启动日志、停止日志、错误日志等。

orb logs ubuntu

orb logs ubuntu --all # 所有虚拟机日志
  • ubuntu 是虚拟机名或者虚拟机ID
  • 可以使用别名 logconsole

设为默认虚拟机

设置虚拟机为默认虚拟机,可以方便的管理虚拟机。

orb default ubuntu
  • ubuntu 是设为默认虚拟机的虚拟机名

启动虚拟机

通过下面的命令可以启动虚拟机。

orb start ubuntu

orb start --all # 启动所有虚拟机和容器

停止虚拟机

通过下面的命令可以停止虚拟机。

orb stop ubuntu

orb stop --all # 停止所有虚拟机和容器

重启虚拟机

通过下面的命令可以重启虚拟机。

orb restart ubuntu

orb restart --all # 重启所有虚拟机和容器

删除虚拟机

通过下面的命令可以删除虚拟机。

orb delete ubuntu

orb delete --force # 强制删除而无需确认
orb delete --all # 删除所有虚拟机和容器

SSH

通过 SSH 连接到虚拟机,可以方便的进行文件的传输、网络的连接等操作。

连接虚拟机

从宿主机进入 orbstack 创建的 Linux 虚拟机有多种方式:

  1. 使用 orb 命令进入默认虚拟机
    orb ssh ubuntu
    

    同时还会自动进入到当前虚拟机的目录。
  2. 使用 ssh orb 命令进入指定虚拟机
    ssh orb # 进入默认虚拟机
    
    ssh ubuntu@orb # 指定虚拟机名
    ssh root@ubuntu@orb # 指定用户名和虚拟机名
    
  3. 使用常规的 ssh 命令进入指定虚拟机
    ssh -p 32222 -i ~/.orbstack/ssh/id_ed25519 default@localhost
    

    其中 -p 32222 是虚拟机的端口号,~/.orbstack/ssh/id_ed25519 是虚拟机的私钥,default@localhost 是虚拟机的用户名和主机名。

网络

域名

默认情况 orbstack 会生成一个域名 orb.local,可以通过访问这个域名来查看容器和虚拟机。

对于虚拟机,可以无需设置直接访问 machine-name.orb.local,更多 Docker 容器信息可以查看 容器域名

正在运行的服务

在虚拟机上运行的任何服务器都可以通过 Mac 访问。

例如在虚拟机的端口 8000 上运行 Web 服务器,则可以从 Mac 通过 http://localhost:8000http://machine-name.orb.local:8000 来访问它 :

python3 -m http.server 8000

连接到 Mac 服务

使用 host.orb.internal 主机名连接到在 Mac 上运行的服务器。

例如连接到 Mac 上的 MySQL 服务器:

mysql -h host.orb.internal -u root -p

虚拟机之间的连接

所有虚拟机都连接到同一个网桥,因此可以使用它们的 IP 地址在虚拟机之间进行连接。运行 ip addr 命令查找虚拟机的 IP 地址:

5: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether be:d4:b6:65:f4:aa brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 198.19.249.60/24 metric 100 brd 198.19.249.255 scope global dynamic eth0 // ![code focus]
       valid_lft 163689sec preferred_lft 163689sec // ![code focus]
    inet6 fd07:b51a:cc66:0:bcd4:b6ff:fe65:f4aa/64 scope global mngtmpaddr noprefixroute // ![code focus]
       valid_lft forever preferred_lft forever // ![code focus]
    inet6 fe80::bcd4:b6ff:fe65:f4aa/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever

上面示例中虚拟机的主网络接口上有 IPv4 地址 198.19.249.60 和 IPv6 地址 fd07:b51a:cc66:0:bcd4:b6ff:fe65:f4aa

其他命令

文件传输

在虚拟机中使用 mac 命令可以方便的拷贝文件到Mac和从Mac拷贝文件到虚拟机。

  • 从Mac拷贝文件到虚拟机
    mac pull ~/Downloads/test.txt # 拷贝到当前目录
    
    mac pull ~/Downloads/test.txt ~/Desktop/test.txt # 拷贝到指定目录
    
  • 从虚拟机中拷贝文件到Mac
    mac push ~/Downloads/test.txt # 不指定目录则拷贝到用户的家目录下
    
    mac push test.txt ~/Desktop/test.txt # 拷贝到指定目录
    

在Mac中使用 orb 命令可以方便的拷贝文件到虚拟机和从虚拟机拷贝文件到Mac。

  • 从Mac拷贝文件到虚拟机
    orb push ~/Downloads/test.txt # 不指定目录则拷贝到当前目录
    
    orb push ~/Downloads/test.txt ~/test.txt # 拷贝到指定目录
    
  • 从虚拟机中拷贝文件到Mac
    orb pull ~/test.txt # 不指定目录则拷贝到当前目录
    
    orb pull ~/test.txt ~/Desktop/test.txt # 拷贝到指定目录