產品說明
Packer 是由 HashiCorp 開發的開源(Source Available)工具,專門用於從單一設定檔自動建立適用於多種平台的機器映像檔(Machine Images)。在現代化的 DevOps 流程中,Packer 扮演著「黃金映像檔(Golden Image)」製造工廠的角色。
傳統上,維運人員可能需要手動安裝 OS、打 Patch、安裝軟體來製作一個 VM 範本。Packer 將這個過程程式碼化(Infrastructure as Code),讓你使用 HCL (HashiCorp Configuration Language) 語言定義伺服器的狀態。執行一次建置,就能同時產出 AWS AMI、VMware Template、Docker Image 與 VirtualBox Box,確保所有環境的底層系統完全一致。
核心特色:
- 跨多雲平台支援:單一設定檔可同時輸出 AWS、Azure、GCP、DigitalOcean、VMware 等多種格式的映像檔。
- Infrastructure as Code:使用 HCL 語法管理映像檔建置流程,支援版本控制、模組化與變數管理。
- 自動化配置 (Provisioning):建置過程中可呼叫 Shell Script、Ansible、Chef、Puppet 等工具自動安裝軟體與設定環境。
- 極速建置:支援並行建置(Parallel Builds),可同時為多個平台產出映像檔,大幅縮短等待時間。
常用指令
Packer 的操作流程通常分為:初始化專案 -> 驗證語法 -> 格式化程式碼 -> 執行建置。以下是日常開發最常用的指令:
基礎操作與範例
# 範例 1:初始化專案
# 下載設定檔中定義的 plugin (如 amazon, docker 等 builder)
packer init .
# 範例 2:驗證設定檔
# 檢查 HCL 語法是否正確,變數是否都有定義
packer validate .
# 範例 3:格式化程式碼
# 自動排版 HCL 檔案,保持程式碼風格一致 (類似 go fmt)
packer fmt .
# 範例 4:執行建置 (Build)
# 讀取設定檔並開始建立映像檔,預設會輸出所有定義的 source
packer build aws-ubuntu.pkr.hcl
# 範例 5:傳入變數進行建置
# 透過命令列覆蓋設定檔中的變數 (例如指定版本號)
packer build -var "version=1.0.0" -var "region=us-east-1" .
# 範例 6:除錯模式
# 在每個步驟暫停,讓開發者可以 SSH 進去檢查狀態
packer build -debug .
| 參數/指令 | 功能說明 | 對應操作 |
|---|---|---|
| init | 初始化 | 下載並安裝必要的 Plugins |
| build | 建置 | 開始執行映像檔製作流程 |
| validate | 驗證 | 檢查設定檔語法與邏輯是否正確 |
| fmt | 格式化 | 自動調整 HCL 程式碼縮排與格式 |
| inspect | 檢查 | 查看 Template 中的元件依賴關係 |
| console | 主控台 | 進入互動模式測試變數與函數 |
設定檔範例 (HCL)
packer {
required_plugins {
amazon = {
version = ">= 1.0.0"
source = "[github.com/hashicorp/amazon](https://github.com/hashicorp/amazon)"
}
}
}
source "amazon-ebs" "ubuntu" {
ami_name = "packer-linux-aws-demo"
instance_type = "t2.micro"
region = "us-west-2"
source_ami_filter {
filters = {
name = "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*"
root-device-type = "ebs"
virtualization-type = "hvm"
}
most_recent = true
owners = ["099720109477"]
}
ssh_username = "ubuntu"
}
build {
name = "learn-packer"
sources = [
"source.amazon-ebs.ubuntu"
]
provisioner "shell" {
inline = [
"echo Installing Redis...",
"sudo apt-get update",
"sudo apt-get install -y redis-server"
]
}
}
操作介面





![]()
