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