Multipass,多平台本地轻量级Linux体验! - 奥森Orson
source link: https://www.cnblogs.com/iorson/p/16927992.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Multipass介绍 🏆
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官网:https://multipass.run/
使用指南 🧭
以下内容在两台Mac上实践,各例中的VM实例参数略有不同。
安装&卸载multipass
# 安装
$ brew install --cask multipass
# 卸载
$ brew uninstall multipass
# 卸载并删除数据
$ brew uninstall --zap multipass
查看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
- -n, --name:名称
- -c, --cpus:cpu核心数, 默认: 1
- -m, --mem:内存大小, 默认: 1G
- -d, --disk::硬盘大小, 默认: 5G
查看实例列表
(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 # 关闭所有实例
使用实例 - 进入shell交互
(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
⚠️ 实例别名后的 -- 后面要跟空格,之后再输入命令
挂载数据 using mount
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
传输文件 using transfer
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稳定版 + 部分发行版 |
适用场景 | 本地开发&验证&学习玩耍 | 可在工业级生产场景中 实际应用 |
本地开发&验证&学习玩耍 |
- 可以在MacOS和Windows上安装Multipass,然后在Multipass的VM实例中安装Docker,使得非Linux系统的宿主机使用稳定的容器技术。(适用于个人学习玩耍,生产环境莫开玩笑!)
- Multipass的出现更像是Ubuntu为了和微软的WSL一争高下(个人猜测),可以将Multipass和WSL放在同等地位,Docker则是在Linux的基础上,具备前两者所没有的特性,重点提供不同于Multipass/WSL的服务。
- 针对软件开发人员,Windows的环境配置一向杂乱无章,有了Multipass,我们可以在Multipass生成的Linux实例环境中配置各种服务,如MySQL、Redis等,宿主机开发环境通过直连Multipass实例使用其提供的服务。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK