<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          再見了 VMware,一款更輕量級(jí)的虛擬機(jī)!

          共 10416字,需瀏覽 21分鐘

           ·

          2021-12-23 09:06


          Multipass是一個(gè)輕量虛擬機(jī)管理器,是由 Ubuntu 運(yùn)營(yíng)公司 Canonical 所推出的開源項(xiàng)目。運(yùn)行環(huán)境支持 Linux、Windows、macOS。在不同的操作系統(tǒng)上,使用的是不同的虛擬化技術(shù)。在 Linux 上使用的是 KVM、Window 上使用 Hyper-V、macOS 中使用 HyperKit 以最小開銷運(yùn)行VM,支持在筆記本模擬小型云。


          同時(shí),Multipass 提供了一個(gè)命令行界面來啟動(dòng)和管理 Linux 實(shí)例。下載一個(gè)全新的鏡像需要幾秒鐘的時(shí)間,并且在幾分鐘內(nèi)就可以啟動(dòng)并運(yùn)行 VM。(直呼好家伙,大大降低的我們安裝虛擬機(jī)的成本了)


          Multipass官網(wǎng):https://multipass.run/




          1

          開始使用


          在使用 Multipass 之前 ,首先需要安裝 Multipass 工具,可以打開官網(wǎng)進(jìn)行下載


          https://multipass.run/


          選擇對(duì)應(yīng)的操作系統(tǒng),因?yàn)槲业氖?Mac 電腦,所以選擇 MacOS,點(diǎn)擊 Download 開始下載



          如果電腦裝了 brew 可以直接命令行下載安裝:


          brew cask install?multipass


          下載安裝成功后, 執(zhí)行以下命令可以查看當(dāng)前軟件版本:


          multipass --version


          安裝成功后,點(diǎn)擊運(yùn)行,即可打開 Multipass 客戶端,這里能夠快速的通過 Open Shell 創(chuàng)建和啟動(dòng)一個(gè)虛擬機(jī)



          下面,我們來介紹如何通過命令的方式,創(chuàng)建一臺(tái)虛擬機(jī)



          2

          創(chuàng)建Ubuntu虛擬機(jī)


          首先,通過以下指令查看可供下載的 Ubuntu 鏡像


          multipass find


          運(yùn)行成功后,可以看到下面的這些鏡像列表,包含各種版本的


          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 鏡像并運(yùn)行,初次創(chuàng)建時(shí)需要下載 Ubuntu 鏡像,網(wǎng)絡(luò)暢通的情況下,稍等片刻即可。


          multipass?launch -n vm01 -c 1?-m 1G?-d 10G


          自定義配置創(chuàng)建可以參考如下方式:


          -n, --name: 名稱
          -c, --cpus: cpu核心數(shù), 默認(rèn): 1
          -m, --mem: 內(nèi)存大小, 默認(rèn): 1G
          -d, --disk: 硬盤大小, 默認(rèn): 5G



          3

          操作虛擬機(jī)


          查看虛擬機(jī)列表


          虛擬機(jī)創(chuàng)建完成后,可以使用multipass list命令進(jìn)行查看虛擬機(jī)列表


          % multipass?list
          Name????????????????????State?????????????IPv4?????????????Image
          vm01????????????????????Running???????????192.168.64.2?????Ubuntu?20.04?LTS


          可以看到目前正在運(yùn)行一臺(tái) Ubuntu 20.04 版本的虛擬機(jī),并且對(duì)應(yīng)的 IP 地址為 192.168.64.2


          外部操作虛擬機(jī)


          通過multipass exec命令在實(shí)例內(nèi)執(zhí)行給定的命令。第一個(gè)參數(shù)是運(yùn)行命令的實(shí)例,也就是 vm01


          我們通過 exec 命令,就可以在外部操作剛剛創(chuàng)建的虛擬機(jī),例如查看內(nèi)部所處的目錄,執(zhí)行 pwd 命令


          #?multipass exec?vm01 pwd
          /home/ubuntu


          查看虛擬機(jī)信息


          通過multipass info命令,即可查看當(dāng)前運(yùn)行的虛擬機(jī)信息


          # 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: --


          進(jìn)入虛擬機(jī)


          通過multipass shell命令,即可進(jìn)入到虛擬機(jī)內(nèi)部


          multipass shell?vm01


          運(yùn)行后的結(jié)果如下所示,可以看到目前虛擬機(jī)的一些系統(tǒng)配置信息,以及內(nèi)存和磁盤的使用情況



          同時(shí)會(huì)運(yùn)行一個(gè)新的 Ubuntu 系統(tǒng),此時(shí)便進(jìn)入到了Ubuntu 環(huán)境中, 在里面可以執(zhí)行相關(guān)的 linux 指令


          當(dāng)然如果不想進(jìn)入系統(tǒng)內(nèi)部,也可以通過上述提到的 multipass exce 命令,來操作 Ubuntu 系統(tǒng)


          首先執(zhí)行下面命令,給系統(tǒng)設(shè)置一個(gè) root 密碼,設(shè)置好密碼后,使用 su root 切換到 root 用戶


          #?設(shè)置密碼
          sudo passwd
          #?切換 root
          su root


          ubuntu 是使用 apt-get 來進(jìn)行包管理的,首先更新一下 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


          下面我們可以測(cè)試一下,nginx 是否安裝成功,在 mac 上打開瀏覽器,輸入虛擬機(jī)的 ip 地址 192.168.64.2



          可以看出,目前 nginx 已經(jīng)成功運(yùn)行了,后續(xù)的話,可能會(huì)考慮在上面部署更多的應(yīng)用。


          掛載數(shù)據(jù)卷


          multipass 還提供和 Docker 一樣的掛載數(shù)據(jù)卷的功能,能夠與外部宿主機(jī)的文件保持同步。


          #?掛載格式
          multipass mount 宿主機(jī)目錄 實(shí)例名:虛擬機(jī)目錄


          下面,我在用戶的目錄下,創(chuàng)建一個(gè) hello 目錄


          #?創(chuàng)建hello目錄
          mkdir hello
          #
          ?掛載
          multipass mount /Users/moxi/hello vm01:/hello


          掛載完成后,我們回到實(shí)例 vm01 中,可以看出多了一個(gè) hello 文件夾,說明已經(jīng)成功掛載~



          因此,以后在 vm01 的 hello文件夾 中創(chuàng)建的文件,都會(huì)在的宿主機(jī)的 hello 文件夾同步顯示


          卸載數(shù)據(jù)卷


          如果以后不需要用到掛載了,可以使用 unmount 命令卸載


          #卸載數(shù)據(jù)卷
          multipass umount 容器名


          傳輸文件


          除了使用上述的 mount 掛載卷的方式實(shí)現(xiàn)文件的交互,同時(shí)還可以通過 transfer 命令,將宿主機(jī)的文件,發(fā)送到虛擬機(jī)內(nèi)部


          multipass?transfer 主機(jī)文件 容器名:容器目錄


          例如,將 hello.txt 發(fā)送到


          multipass transfer hello.txt vm01:/home/ubuntu/


          刪除和釋放實(shí)例


          使用下面的命令,可以開啟、停止、刪除和釋放實(shí)例


          #?啟動(dòng)實(shí)例
          multipass start vm01
          #?停止實(shí)例
          multipass stop vm01
          #?刪除實(shí)例(刪除后,還會(huì)存在)
          multipass delete vm01
          #?釋放實(shí)例(徹底刪除)
          multipass purge vm01


          容器配置自動(dòng)化


          為了保持開發(fā)環(huán)境和線上環(huán)境一致性 同時(shí)節(jié)省部署時(shí)間 multipass 給我們提供了 --cloud-init 選項(xiàng)進(jìn)行容器啟動(dòng)初始化配置:


          multipass launch --name ubuntu --cloud-init config.yaml


          上面 config.yaml 則是容器的初始化配置文件,例如,我們想在初始化容器的時(shí)候,自動(dòng)下載安裝 Node.js,內(nèi)容如下:


          #cloud-config
          runcmd:
          ??- curl -sL https://deb.nodesource.com/setup_12.x?| sudo -E bash -
          ??- sudo apt-get?install -y?nodejs


          runcmd 可以指定容器首次啟動(dòng)時(shí)運(yùn)行的命令


          凡是用戶自定義的cloud-init的配置文件,必須以#cloud-config開頭,這是cloud-init識(shí)別它的方式。














          容器技術(shù)可以保證環(huán)境一致性,簡(jiǎn)化項(xiàng)目配置、部署流程,因此很受廣大開發(fā)者青睞。如果你打算嘗試或者已經(jīng)嘗試基于容器簡(jiǎn)化本地項(xiàng)目環(huán)境配置,但又嫌棄 docker 用起來還是不夠直截了當(dāng),那么可以試下 multipass。


          安裝

          macOS(支持 Sierra 以上版本)可以直接通過 Homebrew 安裝:


          brew cask install multipass

          Windows 用戶可以到這里下載安裝(只支持 Windows 10,如果是 Windows 家庭版或者 v1803 之前的 Windows 10 專業(yè)版/企業(yè)版,還需要另外安裝 VirtualBox)。


          運(yùn)行一下 multipass version 命令確認(rèn)安裝成功,順便查看一下版本:


          multipass? 1.1.0+mac

          multipassd 1.1.0+mac

          可以看到當(dāng)前版本是這個(gè)月剛發(fā)布的 1.1.0。對(duì)很多用戶來說,這個(gè)版本最大的更新是支持代理。從 1.1.0 起,multipass 像很多命令行工具一樣,會(huì)遵循 http_proxy 環(huán)境變量中指定的代理。因?yàn)?multipass 創(chuàng)建容器時(shí)可能需要從網(wǎng)絡(luò)下載鏡像,而很多地方的網(wǎng)絡(luò)連通性不盡如人意,因此支持代理能夠大大改善使用體驗(yàn)。


          上手

          先來創(chuàng)建一個(gè)容器:


          $ multipass launch --name react

          Launched: react

          初次創(chuàng)建時(shí)需要下載鏡像,網(wǎng)絡(luò)暢通的情況下,稍等片刻即可。


          容器創(chuàng)建后 multipass 會(huì)馬上啟動(dòng)它,這樣創(chuàng)建好容器后我們就可以直接使用了:


          $ multipass exec react -- lsb_release -d

          Description:? ? Ubuntu 18.04.4 LTS

          lsb_release 會(huì)打印 Linux 發(fā)行版的信息。之前我們創(chuàng)建容器的時(shí)候并沒有指定使用什么樣的鏡像,上面命令的輸出表明,multipass 默認(rèn)會(huì)使用當(dāng)前 LTS 版本的 Ubuntu。


          除了直接在容器上運(yùn)行(exec)命令外,還可以通過 shell 命令「進(jìn)入」容器:


          multipass shell react

          我們進(jìn)入了一個(gè)完整的 Linux 環(huán)境,可以進(jìn)行各種操作。例如,假設(shè)我們看到了一篇介紹 React Hooks 的教程,打算體驗(yàn)一下教程的示例項(xiàng)目:


          git clone https://github.com/hjiang/react-hook-demo.git

          cd react-hook-demo

          npm install?

          哎呀,系統(tǒng)告訴我們 npm 沒有安裝,并建議通過 apt 安裝。


          The program 'npm' is currently not installed. You can install it by typing:

          sudo apt install npm

          不過,當(dāng)前 LTS 版本的 Ubuntu 倉庫里的 Node.js 比較老舊,我們轉(zhuǎn)而安裝 LTS 版本的 Node.js(12):


          curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

          sudo apt-get install -y nodejs

          npm install

          npm start

          項(xiàng)目跑起來了,太棒了:


          Compiled successfully!


          You can now view leancloud-react-hook-tutorial in the browser.


          ? Local:? ? ? ? ? ? http://localhost:3000/

          ? On Your Network:? http://192.168.64.5:3000/


          Note that the development build is not optimized.

          To create a production build, use npm run build.

          這里 192.168.64.5 是 Multipass 分配給 react 這個(gè)容器的 IP,所以我們可以直接在宿主機(jī)上打開瀏覽器訪問 http://192.168.64.5:3000/ 查看效果。


          定制

          接下來我們嘗試容器化手頭正在開發(fā)的一個(gè) Node.js 項(xiàng)目。和之前不同,我們將對(duì)容器進(jìn)行一些定制,這樣用起來更方便。


          首先,我們的 Node.js 項(xiàng)目將部署到云平臺(tái),所以我們希望容器的規(guī)格盡可能和云平臺(tái)上的生產(chǎn)環(huán)境一致。其次,我們之前手動(dòng)安裝了 Node.js,這次我們希望自動(dòng)化這一安裝過程。


          因此,我們使用以下命令創(chuàng)建容器:


          multipass launch --name lean --disk 2G --mem 256M --cloud-init lean.yaml 18.04

          我們通過命令行參數(shù)指定了容器的磁盤和內(nèi)存大小,并且顯式指定使用 Ubuntu 18.04。容器創(chuàng)建成功后,通過 multipass info 可以查看容器的基本信息:


          $ multipass info --all

          Name:? ? ? ? ? ?lean

          State:? ? ? ? ? Running

          IPv4:? ? ? ? ? ?192.168.64.2

          Release:? ? ? ? Ubuntu 18.04.4 LTS

          Image hash:? ? ?fe3030939822 (Ubuntu 18.04 LTS)

          Load:? ? ? ? ? ?0.11 0.30 0.16

          Disk usage:? ? ?1.3G out of 2.0G

          Memory usage:? ?71.4M out of 229.7M


          Name:? ? ? ? ? ?react

          State:? ? ? ? ? Running

          IPv4:? ? ? ? ? ?192.168.64.5

          Release:? ? ? ? Ubuntu 18.04.4 LTS

          Image hash:? ? ?fe3030939822 (Ubuntu 18.04 LTS)

          Load:? ? ? ? ? ?0.00 0.00 0.00

          Disk usage:? ? ?1.7G out of 4.7G

          Memory usage:? ?112.1M out of 985.7M

          可以看到,之前創(chuàng)建的 react 容器,multipass 默認(rèn)分配了 5G 硬盤和 1G 內(nèi)存。而 lean 容器則按照我們的要求分配了 2G 硬盤和 256M 內(nèi)存(這是我們計(jì)劃使用的云平臺(tái) LeanCloud 云引擎 免費(fèi)版體驗(yàn)實(shí)例的規(guī)格)。另外,基本信息中沒有 CPU 核心的信息,multipass 默認(rèn)會(huì)給容器分配 1 個(gè) CPU 核心。


          至于 lean.yaml 則是容器的初始化配置文件,內(nèi)容如下:


          #cloud-config


          runcmd:

          ? - curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

          ? - sudo apt-get install -y nodejs

          ? - wget https://releases.leanapp.cn/leancloud/lean-cli/releases/download/v0.21.0/lean-cli-x64.deb

          ? - sudo dpkg -i lean-cli-x64.deb

          runcmd 可以指定容器 首次啟動(dòng) 時(shí)運(yùn)行的命令,這里我們復(fù)制了之前安裝 Node.js 的命令,還加上了安裝 lean-cli 的命令(我們通過 lean-cli 將代碼部署到云平臺(tái))。


          容器初始化配置文件遵循 cloud-init 標(biāo)準(zhǔn),可以通過 yaml 文件進(jìn)行用戶、文件、軟件倉庫、 DNS 解析、SSH 密鑰、puppet、chef 等各種初始化配置。


          我們只打算在容器中測(cè)試、部署項(xiàng)目,并不打算 multipass shell 到容器內(nèi)使用 vim 或 emacs 開發(fā)項(xiàng)目。所以,我們直接掛載宿主機(jī)上的一個(gè)目錄:


          multipass mount demo lean:/home/ubuntu/demo

          demo 是我們的 Node.js 項(xiàng)目目錄,如果讀者想要測(cè)試,可以用下面這個(gè)模板項(xiàng)目:

          git clone https://github.com/leancloud/node-js-getting-started demo


          同時(shí)去 LeanCloud 注冊(cè)賬號(hào)、創(chuàng)建應(yīng)用,方便體驗(yàn)下面的部署操作。

          掛載完成后,我們就可以在宿主機(jī)上使用趁手的 IDE、編輯器開發(fā)項(xiàng)目,之后 multipass shell lean 到容器內(nèi)測(cè)試:


          cd demo

          lean login # 使用之前注冊(cè)的 LeanCloud 賬號(hào)登錄

          lean switch # 選擇之前創(chuàng)建的應(yīng)用

          npm install # 安裝項(xiàng)目依賴

          lean up # 本地(容器內(nèi))調(diào)試

          屏幕會(huì)輸出:


          Node app is running on port: 3000

          之前通過 multipass info,我們知道 lean 容器的 IP 是http://192.168.64.2,所以在宿主機(jī)上訪問 http://192.168.64.2:3000/ 即可查看效果。

          如果效果符合預(yù)期,我們可以在容器內(nèi)運(yùn)行 lean deploy --prod 1 部署項(xiàng)目。


          更多

          運(yùn)行 multipass list 可以列出所有的容器:


          Name? ? ? ? ? ? ? ? ? ? State? ? ? ? ? ? ?IPv4? ? ? ? ? ? ?Image

          lean? ? ? ? ? ? ? ? ? ? Running? ? ? ? ? ?192.168.64.2? ? ?Ubuntu 18.04 LTS

          react? ? ? ? ? ? ? ? ? ?Running? ? ? ? ? ?192.168.64.5? ? ?Ubuntu 18.04 LTS

          如果希望節(jié)約資源,我們可以停止暫時(shí)用不到的容器,比如之前創(chuàng)建的 react:


          multipass stop react

          之后我們可以運(yùn)行 multipass start react 重新運(yùn)行容器。如果以后不再使用,那么也可以干脆刪除:


          multipass delete --purge react

          最后,很多時(shí)候,我們只是想要在 macOS 或 Windows 上起一個(gè) Linux 環(huán)境,然后進(jìn)行一些操作,multipass 應(yīng)付這一使用場(chǎng)景最是得心應(yīng)手:


          multipass shell

          是的,你沒看錯(cuò),只需一條命令,你就可以進(jìn)入一個(gè)與宿主機(jī)隔離的 Linux 容器!

          multipass 會(huì)自動(dòng)創(chuàng)建并運(yùn)行一個(gè)名為 Primary 的容器(如果還沒有創(chuàng)建或運(yùn)行的話),這個(gè)容器也會(huì)自動(dòng)掛載宿主機(jī)的 Home 目錄,就是這么省心省力。


          結(jié)語

          Multipass 使用起來十分簡(jiǎn)潔直觀。它是由 Canonical (Ubuntu 背后的公司)推出的,因此使用的鏡像由 Canonical 負(fù)責(zé)更新,包含最近的安全更新,以及專門為各個(gè)平臺(tái)的虛擬化方案(Windows 的 Hyper-V、macOS 的 HyperKit、Linux 的 KVM)優(yōu)化的內(nèi)核。不過也因?yàn)橥瑯拥脑?,目前支持的鏡像也只限于 Ubuntu。


          yaml 配置文件可以參考下面的文章


          https://cloudinit.readthedocs.io/en/latest/topics/examples.html?highlight=lock-passwd#including-users-and-groups


          更多關(guān)于 multipass 的高階的技巧,歡迎訪問 multipass 官方文檔。


          https://multipass.run/docs/


          好了,本期關(guān)于 Multipass 的基礎(chǔ)學(xué)習(xí)就到這里了,感興趣的小伙伴環(huán)境下載自己動(dòng)手學(xué)習(xí)呢~



          4

          總結(jié)


          使用了一陣子后,Multipass 在使用起來很簡(jiǎn)潔直觀,在整體操作上和 docker 類似,如果想在自己電腦上快速搭建一個(gè) Linux 系統(tǒng)用于學(xué)習(xí)的話,選擇使用 Multipass 還是非常方便的。


          唯一不足的地方就是,Multipass 是由 Ubuntu 背后的 Canonical 公司開發(fā)的,因此 Multipass 所使用的鏡像也都是 Ubuntu 鏡像(這也可以理解,畢竟支持自家的產(chǎn)品),不過對(duì)于習(xí)慣了使用 CentOS 的用戶來說,還是用些許不太習(xí)慣。不過瑕不掩瑜,Multipass 在我看來還是一款非常棒的軟件~




          往期推薦



          異步調(diào)用@Async注解,提升SpringBoot 項(xiàng)目中API并發(fā)能力!

          RedisJson 橫空出世,性能碾壓ES和MongoDB!

          MySQL 8.0 的 5 個(gè)新特性,太實(shí)用了

          Notion,程序員最后一款筆記軟件!

          SpringBoot五種熱部署方式,極速開發(fā)就是生產(chǎn)力!

          告別 Maven,趕快使用他!



          瀏覽 42
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  以及视频片又粗又猛 | 分分艹| 永久免费不卡在线观看黄网站 | 国产色噜噜在线 | 午夜黄色大片 |