Multipass 是一个轻量级的虚拟机管理器(VM),可能是开发人员启动虚拟机的理想方式。支持 Linux、MacOS 或 Windows,支持 cloud-init 元数据,它允许用户通过单个命令启动全新的 Ubuntu 环境,可用于模拟小型云部署。
我用这个工具来快速启动一个 Ubuntu 系统,这比连到国外机器速度快的多,随时创建销毁,也方便的多。
基本命令#
启动
# 获取最新的 Ubuntu LTS 版本
$ multipass launch --name foo
# focal 指代 Ubuntu 20.04 LTS 版本
$ multipass launch --name foo --memory 512M --timeout 3600 focal
--timeout 指代命令最长运行时间,3600 即一个小时
运行命令
$ multipass exec foo -- lsb_release -a

登入实例(交互式执行命令)
$ multipass shell foo

查看实例
$ multipass list

启动停止实例
# 停止
$ multipass stop foo bar
# 启动
$ multipass start foo
删除、恢复、永久删除实例
# 删除
$ multipass delete bar
# 恢复
$ multipass recover bar
# 对已删除的实例永久删除
$ multipass purge
查看所有支持的镜像
$ multipass find

通过 multipass shell 命令即可进入虚拟机实例,如果你仍想通过 SSH 免密登录,方法如下:
通过 SSH 登录进实例(方式一)#
这种方式适用于已启动的虚拟机实例
首先获取本机的公钥,一般名为 ~/.ssh/id_rsa.pub,我这里是 ~/.ssh/id_ed25519.pub,公钥这里可以参考我的另一篇笔记:《使用 ECDSA 与 Ed25519 公钥算法》

通过 multipass transfer 传输公钥,而后放置到 authorized_keys 文件中(注意文件名替换)
$ multipass transfer ~/.ssh/id_ed25519.pub foo:/tmp
$ multipass exec foo -- bash -c "cat /tmp/id_ed25519.pub >> ~/.ssh/authorized_keys && rm /tmp/id_ed25519.pub"
通过 SSH 登录进实例(方式二)#
这种方式适用于初始化虚拟机实例时即添加 SSH 免密支持
先创建 Cloud init 脚本 cloud-init.yaml
users:
- name: vmuser
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- "ssh-ed25519 AAAA... your_email@example.com"
$ multipass launch --name bar --memory 512M --cloud-init cloud-init.yaml focal
创建成功后可以使用 multipass info bar 命令查询机器 IP
➜ multipass info bar
Name: bar
State: Running
IPv4: 192.168.64.3
Release: Ubuntu 20.04.6 LTS
Image hash: 61f990edc97a (Ubuntu 20.04 LTS)
CPU(s): 1
Load: 0.52 0.14 0.05
Disk usage: 1.4GiB out of 4.7GiB
Memory usage: 145.9MiB out of 459.9MiB
Mounts: --
而后通过 SSH 进行登录验证
$ ssh vmuser@192.168.64.3 -o StrictHostKeyChecking=no
如果不想新增用户,用系统默认的 ubuntu,可以这样写 cloud-init.yaml
ssh_authorized_keys:
- "ssh-ed25519 AAAA... your_email@example.com"
设置静态 IP#
在测试过程中发现删除虚拟机实例后,再次创建虚拟机实例,它的 IP 是递增的,如果需要设置静态 IP,官方文档在 Ubuntu Desktop 下的设置教程如下:
补充:如果想创建一个集群用于 k3s 等服务测试,可能使用域名绑定 IP 地址是更好的方式。
在 Multipass 中使用 Docker 镜像#
Multipass 提供了一个 docker 的方案,可以通过 multipass 快速测试 Docker 容器。
$ multipass launch docker
$ multipass exec docker docker
根据终端提示设置 PATH
export PATH="$PATH:/Users/joecovert/Library/Application Support/multipass/bin"

重启终端,输入 docker ps 命令可以看到一个 portainer 容器已经自动创建。
使用 multipass list 查看 docker 实例的地址,有两个地址,其中一个加 9000 端口可以访问 Portainer(我的是:http://192.168.64.7:9000)
首次访问提示我需要重启下 portainer (docker restart portainer),之后就能访问 Portainer 了,它是一款免费、开源的 Docker 的图形化管理工具,首次登录需设置管理员密码。

之后可以借助 Portainer 安装服务等,不过我还是更习惯通过 docker cli 来使用。另外虽然能够借助 multipass 使用 Docker 功能,但如果有条件安装使用原生的 Docker 会更好。
使用 Cloud init 初始化系统#
这里有一个简单的 Cloud init 脚本,换源、安装软件、设置 SSH Key,如需创建系统时就进行设置的功能,可以问 AI 要配置进行补充。
#cloud-config
apt:
sources:
source.list: |
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
packages:
- net-tools
ssh_authorized_keys:
- "ssh-ed25519 AAAA... your_email@example.com"
其他补充#
如果你对 Multipass 有兴趣,可以再翻翻 HowTo 教程,如果你想在本机电脑快速起两个 Ubuntu 服务器测试用,Multipass 是个不错的选择。