Multipass 旋風教程

做者:LeanCloud weakishhtml

容器技術能夠保證環境一致性,簡化項目配置、部署流程,所以很受廣大開發者青睞。若是你打算嘗試或者已經嘗試基於容器簡化本地項目環境配置,但又嫌棄 docker 用起來仍是不夠直截了當,那麼能夠試下 multipassnode

安裝

macOS(支持 Sierra 以上版本)能夠直接經過 Homebrew 安裝:react

brew cask install multipass

Windows 用戶能夠到這裏下載安裝(只支持 Windows 10,若是是 Windows 家庭版或者 v1803 以前的 Windows 10 專業版/企業版,還須要另外安裝 VirtualBox)。git

運行一下 multipass version 命令確認安裝成功,順便查看一下版本:github

multipass  1.1.0+mac
multipassd 1.1.0+mac

能夠看到當前版本是這個月剛發佈的 1.1.0。對不少用戶來講,這個版本最大的更新是支持代理。從 1.1.0 起,multipass 像不少命令行工具同樣,會遵循 http_proxy 環境變量中指定的代理。由於 multipass 建立容器時可能須要從網絡下載鏡像,而不少地方的網絡連通性不盡如人意,所以支持代理可以大大改善使用體驗。docker

上手

先來建立一個容器:shell

$ multipass launch --name react
Launched: react

初次建立時須要下載鏡像,網絡暢通的狀況下,稍等片刻便可。npm

容器建立後 multipass 會立刻啓動它,這樣建立好容器後咱們就能夠直接使用了:ubuntu

$ multipass exec react -- lsb_release -dDescription:    Ubuntu 18.04.4 LTS

lsb_release 會打印 Linux 發行版的信息。以前咱們建立容器的時候並無指定使用什麼樣的鏡像,上面命令的輸出代表,multipass 默認會使用當前 LTS 版本的 Ubuntu。vim

除了直接在容器上運行(exec)命令外,還能夠經過 shell 命令「進入」容器:

multipass shell react

咱們進入了一個完整的 Linux 環境,能夠進行各類操做。例如,假設咱們看到了一篇介紹 React Hooks 的教程,打算體驗一下教程的示例項目:

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

哎呀,系統告訴咱們 npm 沒有安裝,並建議經過 apt 安裝。

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

不過,當前 LTS 版本的 Ubuntu 倉庫裏的 Node.js 比較老舊,咱們轉而安裝 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

項目跑起來了,太棒了:

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,因此咱們能夠直接在宿主機上打開瀏覽器訪問 http://192.168.64.5:3000/ 查看效果。

定製

接下來咱們嘗試容器化手頭正在開發的一個 Node.js 項目。和以前不一樣,咱們將對容器進行一些定製,這樣用起來更方便。

首先,咱們的 Node.js 項目將部署到雲平臺,因此咱們但願容器的規格儘量和雲平臺上的生產環境一致。其次,咱們以前手動安裝了 Node.js,此次咱們但願自動化這一安裝過程。

所以,咱們使用如下命令建立容器:

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

咱們經過命令行參數指定了容器的磁盤和內存大小,而且顯式指定使用 Ubuntu 18.04。容器建立成功後,經過 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

能夠看到,以前建立的 react 容器,multipass 默認分配了 5G 硬盤和 1G 內存。而 lean 容器則按照咱們的要求分配了 2G 硬盤和 256M 內存(這是咱們計劃使用的雲平臺 LeanCloud 雲引擎 免費版體驗實例的規格)。另外,基本信息中沒有 CPU 核心的信息,multipass 默認會給容器分配 1 個 CPU 核心。

至於 lean.yaml 則是容器的初始化配置文件,內容以下:

#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 能夠指定容器 首次啓動 時運行的命令,這裏咱們複製了以前安裝 Node.js 的命令,還加上了安裝 lean-cli 的命令(咱們經過 lean-cli 將代碼部署到雲平臺)。

容器初始化配置文件遵循 cloud-init 標準,能夠經過 yaml 文件進行用戶、文件、軟件倉庫、 DNS 解析、SSH 密鑰、puppet、chef 等各類初始化配置。

咱們只打算在容器中測試、部署項目,並不打算 multipass shell 到容器內使用 vim 或 emacs 開發項目。因此,咱們直接掛載宿主機上的一個目錄:

multipass mount demo lean:/home/ubuntu/demo

demo 是咱們的 Node.js 項目目錄,若是讀者想要測試,能夠用下面這個模板項目:

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

同時去 LeanCloud 註冊帳號、建立應用,方便體驗下面的部署操做。

掛載完成後,咱們就能夠在宿主機上使用趁手的 IDE編輯器開發項目,以後 multipass shell lean 到容器內測試:

cd demo
lean login # 使用以前註冊的 LeanCloud 帳號登陸lean switch # 選擇以前建立的應用
npm install # 安裝項目依賴
lean up # 本地(容器內)調試

屏幕會輸出:

Node app is running on port: 3000

以前經過 multipass info,咱們知道 lean 容器的 IP 是http://192.168.64.2,因此在宿主機上訪問 http://192.168.64.2:3000/ 便可查看效果。
若是效果符合預期,咱們能夠在容器內運行 lean deploy --prod 1 部署項目。

更多

運行 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

若是但願節約資源,咱們能夠中止暫時用不到的容器,好比以前建立的 react:

multipass stop react

以後咱們能夠運行 multipass start react 從新運行容器。若是之後再也不使用,那麼也能夠乾脆刪除:

multipass delete --purge react

最後,不少時候,咱們只是想要在 macOS 或 Windows 上起一個 Linux 環境,而後進行一些操做,multipass 應付這一使用場景最是駕輕就熟:

multipass shell

是的,你沒看錯,只需一條命令,你就能夠進入一個與宿主機隔離的 Linux 容器!
multipass 會自動建立並運行一個名爲 Primary 的容器(若是尚未建立或運行的話),這個容器也會自動掛載宿主機的 Home 目錄,就是這麼省心省力。

結語

Multipass 使用起來十分簡潔直觀。它是由 Canonical (Ubuntu 背後的公司)推出的,所以使用的鏡像由 Canonical 負責更新,包含最近的安全更新,以及專門爲各個平臺的虛擬化方案(Windows 的 Hyper-V、macOS 的 HyperKit、Linux 的 KVM)優化的內核。不過也由於一樣的緣由,目前支持的鏡像也只限於 Ubuntu。

相關文章
相關標籤/搜索