5

Multipass,多平台本地轻量级Linux体验! - 奥森Orson

 1 year ago
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.
neoserver,ios ssh client

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/

image (1)

从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稳定版 + 部分发行版
适用场景 本地开发&验证&学习玩耍 可在工业级生产场景中
实际应用
本地开发&验证&学习玩耍
  1. 可以在MacOS和Windows上安装Multipass,然后在Multipass的VM实例中安装Docker,使得非Linux系统的宿主机使用稳定的容器技术。(适用于个人学习玩耍,生产环境莫开玩笑!)
  2. Multipass的出现更像是Ubuntu为了和微软的WSL一争高下(个人猜测),可以将Multipass和WSL放在同等地位,Docker则是在Linux的基础上,具备前两者所没有的特性,重点提供不同于Multipass/WSL的服务。
  3. 针对软件开发人员,Windows的环境配置一向杂乱无章,有了Multipass,我们可以在Multipass生成的Linux实例环境中配置各种服务,如MySQL、Redis等,宿主机开发环境通过直连Multipass实例使用其提供的服务。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK