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