再見了 VMware,一款更輕量級的虛擬機 Multipass!
作者:陌溪
陌溪的學習筆記:http://note.moguit.cn
大家好,我是陌溪。
最近,打算在 Mac 電腦上安裝一個虛擬機,用來學習 K8S。
首先想到的是 Vmware 和 Parallels Desktop,然後打開瀏覽器找了找,發現都只提供付費版本,只有 Parallels Desktop 提供了 14 天的免費試用。
然後,開始嘗試使用免費 VirtualBox,但是在安裝 CentOS 的時候,貌似因爲 MacOS 最新版本的原因,總是報錯,花費了好幾天的時間,試過各種方案,最終解決無果,就放棄了。。
就在陌溪要放棄的時候,突然在 Ubuntu 官網進行衝浪的時候,發現了一款叫 Multipass 的東西。
它可以快速在電腦上快速搭建一個輕量級的虛擬機,並且相比於 Vmware 更加輕量,只需一行命令快速創建 Ubuntu 虛擬機。
Multipass 是一個輕量虛擬機管理器,是由 Ubuntu 運營公司 Canonical 所推出的開源項目。運行環境支持 Linux、Windows、macOS。在不同的操作系統上,使用的是不同的虛擬化技術。在 Linux 上使用的是 KVM、Window 上使用 Hyper-V、macOS 中使用 HyperKit 以最小開銷運行 VM,支持在筆記本模擬小型雲。
同時,Multipass 提供了一個命令行界面來啓動和管理 Linux 實例。下載一個全新的鏡像需要幾秒鐘的時間,並且在幾分鐘內就可以啓動並運行 VM。(直呼好傢伙,大大降低的我們安裝虛擬機的成本了)
Multipass 官網:https://multipass.run/
Multipass 官網
開始使用
在使用 Multipass 之前 ,首先需要安裝 Multipass 工具,可以打開官網進行下載
https://multipass.run/
選擇對應的操作系統,因爲我的是 Mac 電腦,所以選擇 MacOS,點擊 Download 開始下載
選擇對應版本安裝
如果電腦裝了 brew 可以直接命令行下載安裝:
brew cask install multipass
下載安裝成功後, 執行以下命令可以查看當前軟件版本:
multipass --version
安裝成功後,點擊運行,即可打開 Multipass 客戶端,這裏能夠快速的通過 Open Shell 創建和啓動一個虛擬機
Multipass 客戶端
下面,我們來介紹如何通過命令的方式,創建一臺虛擬機
創建 Ubuntu 虛擬機
首先,通過以下指令查看可供下載的 Ubuntu 鏡像
multipass find
運行成功後,可以看到下面的這些鏡像列表,包含各種版本的
Image Aliases Version Description
core core16 20200818 Ubuntu Core 16
core18 20200812 Ubuntu Core 18
18.04 bionic 20211109 Ubuntu 18.04 LTS
20.04 focal,lts 20211118 Ubuntu 20.04 LTS
21.04 hirsute 20211119 Ubuntu 21.04
21.10 impish 20211103 Ubuntu 21.10
appliance:adguard-home 20200812 Ubuntu AdGuard Home Appliance
appliance:mosquitto 20200812 Ubuntu Mosquitto Appliance
appliance:nextcloud 20200812 Ubuntu Nextcloud Appliance
appliance:openhab 20200812 Ubuntu openHAB Home Appliance
appliance:plexmediaserver 20200812 Ubuntu Plex Media Server Appliance
anbox-cloud-appliance latest Anbox Cloud Appliance
minikube latest minikube is local Kubernetes
下載最新版的 Ubuntu 鏡像並運行,初次創建時需要下載 Ubuntu 鏡像,網絡暢通的情況下,稍等片刻即可。
multipass launch -n vm01 -c 1 -m 1G -d 10G
自定義配置創建可以參考如下方式:
-n, --name: 名稱
-c, --cpus: cpu核心數, 默認: 1
-m, --mem: 內存大小, 默認: 1G
-d, --disk: 硬盤大小, 默認: 5G
操作虛擬機
查看虛擬機列表
虛擬機創建完成後,可以使用 multipass list 命令進行查看虛擬機列表
% multipass list
Name State IPv4 Image
vm01 Running 192.168.64.2 Ubuntu 20.04 LTS
可以看到目前正在運行一臺 Ubuntu 20.04 版本的虛擬機,並且對應的 IP 地址爲 192.168.64.2
外部操作虛擬機
通過 multipass exec 命令在實例內執行給定的命令。第一個參數是運行命令的實例,也就是 vm01
我們通過 exec 命令,就可以在外部操作剛剛創建的虛擬機,例如查看內部所處的目錄,執行 pwd 命令
# multipass exec vm01 pwd
/home/ubuntu
查看虛擬機信息
通過 multipass info 命令,即可查看當前運行的虛擬機信息
# multipass info vm01
Name: vm01
State: Running
IPv4: 192.168.64.2
Release: Ubuntu 20.04.3 LTS
Image hash: 91740d72ffff (Ubuntu 20.04 LTS)
Load: 0.00 0.00 0.00
Disk usage: 1.3G out of 9.5G
Memory usage: 170.9M out of 1.9G
Mounts: --
進入虛擬機
通過 multipass shell 命令,即可進入到虛擬機內部
multipass shell vm01
運行後的結果如下所示,可以看到目前虛擬機的一些系統配置信息,以及內存和磁盤的使用情況
進入虛擬機內部
同時會運行一個新的 Ubuntu 系統,此時便進入到了 Ubuntu 環境中, 在裏面可以執行相關的 linux 指令
當然如果不想進入系統內部,也可以通過上述提到的 multipass exce 命令,來操作 Ubuntu 系統
首先執行下面命令,給系統設置一個 root 密碼,設置好密碼後,使用 su root 切換到 root 用戶
# 設置密碼
sudo passwd
# 切換 root
su root
ubuntu 是使用 apt-get 來進行包管理的,首先更新一下 apt-get,然後安裝 nginx
# 更新apt
apt-get update
# 安裝 nginx
apt-get install nginx
安裝好 nginx 後,可以到 /etc/nginx 目錄即可看到剛剛的 nginx 配置信息
root@vm01:/lost+found# cd /etc/nginx/
root@vm01:/etc/nginx# ls
conf.d fastcgi_params koi-win modules-available nginx.conf scgi_params sites-enabled uwsgi_params
fastcgi.conf koi-utf mime.types modules-enabled proxy_params sites-available snippets win-utf
下面我們可以測試一下,nginx 是否安裝成功,在 mac 上打開瀏覽器,輸入虛擬機的 ip 地址 192.168.64.2
nginx 安裝成功
可以看出,目前 nginx 已經成功運行了,後續的話,可能會考慮在上面部署更多的應用,感興趣的小夥伴歡迎關注~
掛載數據卷
multipass 還提供和 Docker 一樣的掛載數據卷的功能,能夠與外部宿主機的文件保持同步。
# 掛載格式
multipass mount 宿主機目錄 實例名:虛擬機目錄
下面,我在用戶的目錄下,創建一個 hello 目錄
# 創建hello目錄
mkdir hello
# 掛載
multipass mount /Users/moxi/hello vm01:/hello
掛載完成後,我們回到實例 vm01 中,可以看出多了一個 hello 文件夾,說明已經成功掛載~
掛載成功
因此,以後在 vm01 的 hello 文件夾 中創建的文件,都會在的宿主機的 hello 文件夾同步顯示
卸載數據卷
如果以後不需要用到掛載了,可以使用 unmount 命令卸載
#卸載數據卷
multipass umount 容器名
傳輸文件
除了使用上述的 mount 掛載卷的方式實現文件的交互,同時還可以通過 transfer 命令,將宿主機的文件,發送到虛擬機內部
multipass transfer 主機文件 容器名:容器目錄
例如,將 hello.txt 發送到
multipass transfer hello.txt vm01:/home/ubuntu/
刪除和釋放實例
使用下面的命令,可以開啓、停止、刪除和釋放實例
# 啓動實例
multipass start vm01
# 停止實例
multipass stop vm01
# 刪除實例(刪除後,還會存在)
multipass delete vm01
# 釋放實例(徹底刪除)
multipass purge vm01
容器配置自動化
爲了保持開發環境和線上環境一致性 同時節省部署時間 multipass 給我們提供了 --cloud-init 選項進行容器啓動初始化配置:
multipass launch --name ubuntu --cloud-init config.yaml
上面 config.yaml 則是容器的初始化配置文件,例如,我們想在初始化容器的時候,自動下載安裝 Node.js,內容如下:
#cloud-config
runcmd:
- curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
- sudo apt-get install -y nodejs
runcmd
可以指定容器 首次啓動 時運行的命令
凡是用戶自定義的 cloud-init 的配置文件, 必須以 #cloud-config 開頭,這是 cloud-init 識別它的方式。
yaml 配置文件可以參考下面的文章
https://cloudinit.readthedocs.io/en/latest/topics/examples.html?highlight=lock-passwd#including-users-and-groups
更多關於 multipass 的高階的技巧,歡迎訪問 multipass 官方文檔
https://multipass.run/docs/
好了,本期關於 Multipass 的基礎學習就到這裏了,感興趣的小夥伴環境下載自己動手學習呢~
我是陌溪,我們下期再見~
總結
陌溪使用了一陣子後,Multipass 在使用起來很簡潔直觀,在整體操作上和 docker 類似,如果想在自己電腦上快速搭建一個 Linux 系統用於學習的話,選擇使用 Multipass 還是非常方便的。
唯一不足的地方就是,Multipass 是由 Ubuntu 背後的 Canonical 公司開發的,因此 Multipass 所使用的鏡像也都是 Ubuntu 鏡像(這也可以理解,畢竟支持自家的產品),不過對於習慣了使用 CentOS 的用戶來說,還是用些許不太習慣。不過瑕不掩瑜,Multipass 在我看來還是一款非常棒的軟件~
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/zMG4R1XrCbI-C71iYd9LMg