Multipass 是由Ubuntu官方提供,在Linux,MacOS和Windows上快速生成 Ubuntu虚拟机 的工具。它提供了一个简单但功能强大的CLI,可让我们在本地快速进入Ubuntu系统环境并使用Linux命令,亦可以在本地计算机创建自己的迷你型云服务器。总的来说就是在本地创建Ubuntu虚拟机,可以获得云端Ubuntu服务器般的体验。
Multipass在Windows上使用Hyper-V,在MacOS上使用Hyperkit,在Linux上使用LXD,以达到用最小的开销和最快的启动时间来进行虚拟机的创建,进而在不同平台提供统一的 Linux 开发环境体验。
Multipass 提供了一个命令行界面来启动和管理 Linux 实例,根据镜像创建实例,在本地已有实例的情况下,实例的启动仅需要数十秒的时间。
无论是Windows,还是MacOS、Linux,都可以在本地通过Multipass创建一个类服务器般体验的Linux系统,我们可以在Ubuntu实例系统中安装nginx、redis、kafka、k8s等软件,进而在本地体验、学习、开发、验证Linux服务器的相关内容。
Multipass官网:Multipass orchestrates virtual Ubuntu instances
以下内容在两台Mac上实践,各例中的VM实例参数略有不同。
- # 安装
- $ brew install --cask multipass
-
- # 卸载
- $ brew uninstall multipass
-
- # 卸载并删除数据
- $ brew uninstall --zap multipass
- (base) ➜ ~ multipass version
- multipass 1.10.1+mac
- multipassd 1.10.1+mac
- (base) ➜ ~ multipass find
- Image Aliases Version Description
- snapcraft:core18 18.04 20201111 Snapcraft builder for Core 18
- snapcraft:core20 20.04 20210921 Snapcraft builder for Core 20
- snapcraft:core22 22.04 20220426 Snapcraft builder for Core 22
- 18.04 bionic 20221014 Ubuntu 18.04 LTS
- ... ... ...
⚠️ 可以指定镜像别名 和 实例别名
根据上一步multipass find的结果,我们使用18.04版本的镜像,其别名为bionic,创建后的实例我们命名为d1804
- (base) ➜ ~ multipass launch bionic --name d1804
- Launched: d1804
不指定镜像会随机选择镜像创建。同样,不指定实例别名也会随机命名。
实例创建后默认启动,即running状态。
创建实例时可以附加的参数如下:
(base) ➜ ~ multipass launch bionic --name d1804 --cpus 4 --disk 20G --mem 8G
- (base) ➜ ~ multipass list
- Name State IPv4 Image
- d1804 Running 192.168.64.3 Ubuntu 18.04 LTS
列表中会展示各实例的本地局域网IP地址,可以把该地址当作远程服务器的地址,进而实现本地VM实例模拟远程服务器的结果,同时可以在VM实例中安装MySQL、Redis等软件,当作本地开发的云端服务。
- (base) ➜ ~ multipass info d1804
- Name: d1804
- State: Running
- IPv4: 192.168.64.3
- Release: Ubuntu 18.04.6 LTS
- Image hash: 5269cad5bc26 (Ubuntu 18.04 LTS)
- Load: 0.00 0.06 0.06
- Disk usage: 1.1G out of 4.7G
- Memory usage: 73.5M out of 985.6M
- Mounts: --
关闭
- (base) ➜ ~ multipass stop d1804
- (base) ➜ ~ multipass list
- Name State IPv4 Image
- d1804 Stopped -- Ubuntu 18.04 LTS
启动
- (base) ➜ ~ multipass start d1804
- (base) ➜ ~ multipass list
- Name State IPv4 Image
- d1804 Running 192.168.64.3 Ubuntu 18.04 LTS
重启
- (base) ➜ ~ multipass restart d1804
- Restarting d1804 ...
补充:--all参数
- (base) ➜ ~ multipass start --all # 启动所有实例
- (base) ➜ ~ multipass stop --all # 关闭所有实例
- (base) ➜ ~ multipass shell d1804
- Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 4.15.0-194-generic x86_64)
-
- * Documentation: https://help.ubuntu.com
- * Management: https://landscape.canonical.com
- * Support: https://ubuntu.com/advantage
- System information as of Sat Nov 5 18:56:38 CST 2022
- ... ...
- ... ...
此时列表还显示被删除的实例
- (base) ➜ ~ multipass delete foo
- (base) ➜ ~ multipass list
- Name State IPv4 Image
- d1804 Running 192.168.64.3 Ubuntu 18.04 LTS
- foo Deleted -- Not Available
恢复被删除的实例:
$ multipass recover foo
关键命令:multipass purge [instances...],采用纯净模式删除的实例不可恢复。
- (base) ➜ ~ multipass delete foo
- (base) ➜ ~ multipass purge
- (base) ➜ ~ multipass list
- Name State IPv4 Image
- d1804 Running 192.168.64.3 Ubuntu 18.04 LTS
或者,一步到位
(base) ➜ ~ multipass delete --purge foo
不需要进入实例的shell交互环境就可以执行实例内部命令,但需要目标实例处于running状态,如果没有处于running状态,会先启动再执行相关命令。
- (base) ➜ ~ multipass exec d1804 -- pwd
- /home/ubuntu
⚠️ 实例别名后的 -- 后面要跟空格,之后再输入命令
mount命令是官方推荐的文件共享方式。
- ➜ ls
- Photos Library.photoslibrary ishot u=60941161,499456713&fm=26&fmt=auto&gp=0.png
- bizhi mail_img
- img pokerking-full-logo.png
-
- ➜ multipass mount bizhi d1804
-
- ➜ multipass info d1804
- Name: d1804
- State: Running
- IPv4: 192.168.64.2
- Release: Ubuntu 18.04.6 LTS
- Image hash: 5269cad5bc26 (Ubuntu 18.04 LTS)
- Load: 0.06 0.09 0.03
- Disk usage: 1.2G out of 9.5G
- Memory usage: 119.4M out of 985.6M
- Mounts: /Users/admin/Pictures/bizhi => /Users/admin/Pictures/bizhi
- UID map: 501:default
- GID map: 20:default
可以看出,根据本地bizhi文件夹的路径,multipass在实例里面建立了同名路径的映射,此后双方任意方对该文件夹进行变动,都会同步至另一方。
取消共享:
$ multipass umount d1804
transfer的作用就是从一端复制文件到另一端,可以是本地复制到一个实例里,也可以是从一个实例复制到另一个实例里,也可以是从实例复制到本地。
⚠️ 同步的数据,后续变动双方互不影响。
从宿主机传送到Multipass实例中:
- # mac本地键入
- ➜ ls
- pokerking-full-logo.png
-
- ➜ multipass transfer pokerking-full-logo.png d1804:/tmp
-
- ➜ multipass shell d1804
-
- # multipass实例中键入
- ubuntu@d1804:~$ ls /tmp/

从Multipass实例传送到宿主机中:
- # mac本地键入
- ➜ ~ ls Public
- Drop Box
-
- ➜ ~ multipass shell d1804
-
- # 实例键入
- ubuntu@d1804:~$ pwd
- /home/ubuntu
-
- ubuntu@d1804:~$ touch test.txt
-
- ubuntu@d1804:~$ ls
- snap test.txt
-
- # 再切换到mac本地shell
- ➜ ~ multipass transfer d1804:/home/ubuntu/test.txt /Users/admin/Public
-
- ➜ ~ ls Public
- Drop Box test.txt
以上命令并不是Multipass支持的所有命令,但足够覆盖日常使用的80%,更多内容可以去文章顶部的Multipass官网自行浏览!
写到这里,相信有部分人觉得Multipass的用法和Docker非常相似,也有部分Windows用户认为这和当前微软力推的WSL (Windows Subsystem for Linux) 的功能高度重叠。具体请看以下对比。
| 对比 | Multipass | Docker | WSL & WSL2 |
|---|---|---|---|
| 技术领域 | 虚拟机 | 容器技术 | 虚拟机 |
| 背书厂商 | Canonical (Ubuntu官方) | Docker官方 | 微软 |
| 开发语言 | C++ | Go | C |
| 开源及 托管状态 | 开源,托管于GitHub 👉 点击直达canonical/multipass | 开源,托管于GitHub 👉 点击直达Docker | 开源,托管于GitHub 👉 点击直达microsoft/WSL2 |
| 适配平台 | Linux & MacOS & Windows,跨平台能力好 | Linux适配较好,MacOS & Windows适配较弱 | Windows无缝集成 |
| 可选环境 | 仅Ubuntu官方镜像 | 各种Linux版本, 选择灵活性程度高 | Linux kernel稳定版 + 部分发行版 |
| 适用场景 | 本地开发&验证&学习玩耍 | 可在工业级生产场景中 实际应用 | 本地开发&验证&学习玩耍 |