Multipass 旋風(fēng)教程

作者:LeanCloud weakish

容器技術(shù)可以保證環(huán)境一致性秕岛,簡化項(xiàng)目配置膘婶、部署流程丸氛,因此很受廣大開發(fā)者青睞罚舱。如果你打算嘗試或者已經(jīng)嘗試基于容器簡化本地項(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)前版本是這個月剛發(fā)布的 1.1.0。對很多用戶來說赃蛛,這個版本最大的更新是支持代理恃锉。從 1.1.0 起,multipass 像很多命令行工具一樣呕臂,會遵循 http_proxy 環(huán)境變量中指定的代理破托。因?yàn)?multipass 創(chuàng)建容器時(shí)可能需要從網(wǎng)絡(luò)下載鏡像,而很多地方的網(wǎng)絡(luò)連通性不盡如人意歧蒋,因此支持代理能夠大大改善使用體驗(yàn)土砂。

上手

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

$ multipass launch --name react
Launched: react

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

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

$ multipass exec react -- lsb_release -d
Description:    Ubuntu 18.04.4 LTS

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

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

multipass shell react

我們進(jìn)入了一個完整的 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 這個容器的 IP,所以我們可以直接在宿主機(jī)上打開瀏覽器訪問 http://192.168.64.5:3000/ 查看效果箩绍。

定制

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

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

因此富稻,我們使用以下命令創(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ì)劃使用的云平臺 LeanCloud 云引擎 免費(fèi)版體驗(yàn)實(shí)例的規(guī)格)宣蔚。另外,基本信息中沒有 CPU 核心的信息认境,multipass 默認(rèn)會給容器分配 1 個 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 可以指定容器 首次啟動 時(shí)運(yùn)行的命令叉信,這里我們復(fù)制了之前安裝 Node.js 的命令亩冬,還加上了安裝 lean-cli 的命令(我們通過 lean-cli 將代碼部署到云平臺)。

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

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

multipass mount demo lean:/home/ubuntu/demo

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

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

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

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

cd demo
lean login # 使用之前注冊的 LeanCloud 賬號登錄
lean switch # 選擇之前創(chuàng)建的應(yīng)用
npm install # 安裝項(xiàng)目依賴
lean up # 本地(容器內(nèi))調(diào)試

屏幕會輸出:

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 上起一個 Linux 環(huán)境盟猖,然后進(jìn)行一些操作讨衣,multipass 應(yīng)付這一使用場景最是得心應(yīng)手:

multipass shell

是的,你沒看錯式镐,只需一條命令反镇,你就可以進(jìn)入一個與宿主機(jī)隔離的 Linux 容器!
multipass 會自動創(chuàng)建并運(yùn)行一個名為 Primary 的容器(如果還沒有創(chuàng)建或運(yùn)行的話)娘汞,這個容器也會自動掛載宿主機(jī)的 Home 目錄歹茶,就是這么省心省力。

結(jié)語

Multipass 使用起來十分簡潔直觀你弦。它是由 Canonical (Ubuntu 背后的公司)推出的惊豺,因此使用的鏡像由 Canonical 負(fù)責(zé)更新,包含最近的安全更新禽作,以及專門為各個平臺的虛擬化方案(Windows 的 Hyper-V尸昧、macOS 的 HyperKit、Linux 的 KVM)優(yōu)化的內(nèi)核旷偿。不過也因?yàn)橥瑯拥脑蚺胨祝壳爸С值溺R像也只限于 Ubuntu。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幢妄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蕉鸳,更是在濱河造成了極大的恐慌乎赴,老刑警劉巖潮尝,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異衍锚,居然都是意外死亡嗤堰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門踢匣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人离唬,你說我怎么就攤上這事∈漭海” “怎么了戚哎?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵嫂用,是天一觀的道長型凳。 經(jīng)常有香客問我,道長嘱函,這世上最難降的妖魔是什么甘畅? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮往弓,結(jié)果婚禮上疏唾,老公的妹妹穿的比我還像新娘。我一直安慰自己函似,他們只是感情好槐脏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撇寞,像睡著了一般准给。 火紅的嫁衣襯著肌膚如雪泄朴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天露氮,我揣著相機(jī)與錄音祖灰,去河邊找鬼。 笑死畔规,一個胖子當(dāng)著我的面吹牛局扶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叁扫,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼三妈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了莫绣?” 一聲冷哼從身側(cè)響起畴蒲,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎对室,沒想到半個月后模燥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掩宜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年蔫骂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牺汤。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡辽旋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出檐迟,到底是詐尸還是另有隱情补胚,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布追迟,位于F島的核電站溶其,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏怔匣。R本人自食惡果不足惜握联,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一每瞒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧代芜,春花似錦浓利、人聲如沸钞速。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掷酗。三九已至,卻和暖如春技肩,著一層夾襖步出監(jiān)牢的瞬間浮声,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工雳锋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留羡洁,地道東北人筑煮。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓真仲,卻偏偏與公主長得像初澎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子软啼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容