Multipass,多平臺本地輕量級Linux體驗!

奧森iorson發表於2022-11-26

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例項使用其提供的服務。

相關文章