Packer是一款建立(OS)映象的工具,它以程式碼為表現形式,並支援多種本地和雲平臺,比如支援VirtualBox的OVF和VMware的VMDK映象,以及EC2、DigitalOcean、OpenStack、Google
Compute Engine等主流雲主機,甚至支援構建Docker映象。
為什麼用Packer:
首先,那就是基礎設施程式碼化,即Infrastructure as
Code。因為我們都是程式設計師,喜歡程式碼,喜歡命令列,我們喜歡在Shell執行命令,看結果在螢幕上流動那種感覺。
其次,有利於實現 Immutable Infrastructure
,即不可變基礎設施,這一部分靈感來自於函數語言程式設計,不可變帶來的好處是不會發生狀態汙染,也就是說,環境之間的差異被消除,出了問題,很容易知道是自己程式碼的問題,還是OS等基礎設施軟體的問題。
Packer還能提高部署速度。在雲端計算之前,我們要想啟動一臺機器老費勁了,可能得從購買CPU、硬碟開始,攢成機器,裝上OS,再裝軟體,把程式碼拷貝進去,再啟動;有了雲端計算技術,前幾步我們都可以省了;而使用Packer的話,只要你的程式不需要更新,所有步驟都可以省了。啟動服務,約等於從映象啟動一臺主機這麼簡單、快速。
Packer還能在一定程度上簡化、方便在vendor之間進行遷移(備份),使用混合環境。比如,你可以在Digital
Ocean上構架staging環境,而生產環境跑在AWS上,開發則使用桌面虛擬機器技術,比如VirtualBox等。
使用者可以通過Packer建置VirtualBox、AWS或Google的映像檔,讓環境的組態設定完全一致,方便後續的測試或執行。有了此映象,我們就可以隨意建立任意數量的雲主機出來了,從而保證了執行環境的統一。這也是基礎設施程式碼化和不可變基礎設施的一項基本條件。[Packer詳細說明]