前言
這玩意說白了就是一個輕量級的虛擬機,允許在Win中啟動一個完整的虛擬機,比VM操作更加的友善更加的Linux,底層用的是Hyper-V。雖然WIndows中有WSL也挺好用的,但是如果需要測試一些比較敏感的Shell腳本或者操作比較底層的庫的話,這玩意玩壞了就重建一個就行了。
我個人比較喜歡用這個系統(tǒng)去構(gòu)建離線的deb的包,或者去測試一些腳本,還有運行一些服務,這樣子我只要將這個虛擬機關閉我這個服務就結(jié)束了,不會影響我的Win系統(tǒng),雖然WSL也能實現(xiàn)這個需求,但是我用下來發(fā)現(xiàn)他們兩的使用場景不太一樣,這個玩意適合運行一些輔助服務,WSL更加適合開發(fā)使用。Docker-Desktop也能運行服務的說,但是總的來說這里面運行的服務會更加的穩(wěn)定,不會受到Win的影響,長時間運行的服務我更喜歡放這個里面運行。
總的來說存在即合理,和WSL有不同的使用場景,看個人需要。
安裝
開啟 Hyper-V
控制面板->程序->啟用或關閉Windows功能->Hyper-V
將這個選項勾選好,然后點擊確認,安裝提示操作即可,開啟之后需要重啟電腦。

安裝 Multipass
Multipass下載地址
下載完畢之后雙擊安裝一直下一步就安裝完畢了。
裝完了需要將存儲地址改一下,如果只有C盤就當我沒說這個,如果放C盤,久了會影響Win的運行速度
mkdir "D:\Multipass"
Set-ItemProperty -Path "HKLM:System\CurrentControlSet\Control\Session Manager\Environment" -Name MULTIPASS_STORAGE -Value
安裝完畢之后要重啟一下電腦,否則存儲位置不會變?。?!
創(chuàng)建網(wǎng)橋供虛擬機使用(固定IP用)
這一步如果不指定一個網(wǎng)卡的話一些持久運行的虛擬機就會出現(xiàn)每次啟動IP和網(wǎng)關地址都會變的問題
我建議是指定一個,后期會比較方便。
# 創(chuàng)建虛擬機的網(wǎng)絡
New-VMSwitch -SwitchName "vmnet" -SwitchType Internal
# 創(chuàng)建虛擬網(wǎng)卡
New-NetIPAddress -IPAddress "158.50.0.1" -PrefixLength 24 -InterfaceAlias "vEthernet (vmnet)"
# 開啟NAT
New-NetNat -Name vmnet -InternalIPInterfaceAddressPrefix 158.50.0.0/24
新建虛擬機
# 創(chuàng)建一個 4核心 4G內(nèi)存 10G存儲的虛擬機 并將虛擬網(wǎng)絡 vmnet作為第二個網(wǎng)卡
multipass launch --name vm1 --cpus 4 --memory 4G --disk 20G --network name=vmnet,mode=manual
進入虛擬機中
執(zhí)行如下的命令就會進入虛擬機的命令行中
multipass shell vm1
配置虛擬機固定IP
啟動的就是一個完整的Ubuntu虛擬機,可以直接使用Ubuntu的方式進行IP固定
打開配置文件,并添加如下的配置即可
配置文件地址為 sudo vi /etc/netplan/50-cloud-init.yaml
eth1: # 網(wǎng)卡名稱,這是固定的
addresses: [158.50.0.2/24] # IP地址,連接的網(wǎng)卡同段即可,可以選擇0.2~0.253之間
gateway4: 158.50.0.1 # 網(wǎng)卡的網(wǎng)關
nameservers:
addresses: [114.114.114.114] # DNS地址
修改完畢應該是這樣的

然后執(zhí)行網(wǎng)絡重啟指令可以
sudo netplan apply
宿主機端口轉(zhuǎn)發(fā)
虛擬機安裝之后所有的服務和端口都只能在本機進行訪問,如果想要外部也訪問這個端口提供的服務,需要將Win的端口做一個轉(zhuǎn)發(fā)
# 開啟WIndows的防火墻
New-NetFirewallRule -DisplayName "Allow TCP 80" -Direction Inbound -LocalPort 80 -Protocol TCP -Action Allow
# 端口轉(zhuǎn)發(fā)
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=158.50.0.2 connectport=80
常用指令集
multipass shell <vm_name> # 進入某個虛擬機
multipass stop <vm_name> # 停止某個虛擬機
multipass start <vm_name> # 啟動虛擬機
multipass restart <vm_name> # 重啟虛擬機
multipass list # 列出虛擬機列表
multipass delete <vm_name> # 清理已經(jīng)刪除的虛擬機
multipass purge # 清理已經(jīng)刪除的虛擬機
multipass --help # 查看指令幫助