如何使用Packer創建阿裏雲自定義鏡像
阿裏雲中的每個ECS實例都由包含不同操作係統分發和版本的鏡像創建。 鏡像可包括預安裝的應用程序和配置。 阿裏雲市場為最常見的操作係統和應用程序環境提供許多第一和第三方鏡像,或者也可創建滿足自身需求的自定義鏡像。 本文詳細介紹了如何使用開源工具 Packer 在阿裏雲中定義和生成自定義鏡像。
1. 安裝Packer
安裝
從Packer官方站點的下載頁麵選擇與你操作係統對應的版本,下載後解壓縮到任何目錄,安裝就完成了,為了方便你在命令行使用,你可以將packer命令移動到位於環境變量PATH中定義的目錄下或者將packer命令所在的目錄添加到係統PATH變量中。
驗證
為了驗證你的Packer安裝正確,在你的係統中運行"packer -v"(注:windows請運行"packer.exe -v") 你應該可以看到如下示例的幫助信息。如果輸出的錯誤信息是找不到Packer命令,請確保packer程序位於你的PATH環境變量指定的路徑下。
$ packer -v
0.12.1
2. 獲取阿裏雲Access Key
- 登陸 阿裏雲官方網站
- 進入頁麵上方菜單【管理控製台】
- 進入頁麵上方級菜單【Access Key】
- 頁麵所顯示的Access Key ID和Access Key Secret則為所需ID和Key
3. 定義 Packer 模板
生成鏡像,需創建一個JSON格式的模板文件。 在模板中,定義執行實際生成過程的生成器和配置器。 Packer 具有多種配置器,可用於自定義鏡像的內容生成方式,在下麵的示例中使用最常用的Shell類型。
創建名為 alicloud.json 的文件並粘貼以下內容。 為以下內容輸入自己的值:
參數 | 獲取位置 |
---|---|
access_key | 從上一步中獲取的 Access Key ID |
secret_key | 從上一步中獲取的 Access Key Secret |
region | 創建鏡像使用臨時資源的區域 |
image_name | 創建的鏡像名稱 |
source_image | 基礎鏡像的名稱,可以從阿裏雲公有鏡像列表獲得 |
instance_type | 創建鏡像時生成的臨時實例的類似 |
internet_charge_type | 創建鏡像時臨時實例的網絡付費類型 |
provisioners | 創建鏡像時配置器類型 |
{
"variables": {
"access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
"secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
},
"builders": [{
"type":"alicloud-ecs",
"access_key":"{{user `access_key`}}",
"secret_key":"{{user `secret_key`}}",
"region":"cn-beijing",
"image_name":"packer_basic",
"source_image":"centos_7_02_64_20G_alibase_20170818.vhd",
"ssh_username":"root",
"instance_type":"ecs.n1.tiny",
"internet_charge_type":"PayByTraffic",
"io_optimized":"true"
}],
"provisioners": [{
"type": "shell",
"inline": [
"sleep 30",
"yum install redis.x86_64 -y"
]
}]
}
4. 生成 Packer 映像
如果尚未在本地計算機上安裝 Packer,請按照第一步安裝或者 Packer 安裝說明進行安裝。
通過指定 Packer 模板文件生成鏡像,如下所示:
$ export ALICLOUD_ACCESS_KEY=在第2步獲得的Access Key ID
$ export ALICLOUD_SECRET_KEY=在第2步得的Access Key Secret
$ packer build alicloud.json
alicloud-ecs output will be in this color.
==> alicloud-ecs: Prevalidating alicloud image name...
alicloud-ecs: Found image ID: centos_7_02_64_20G_alibase_20170818.vhd
==> alicloud-ecs: Start creating temporary keypair: packer_59e44f40-c8d6-0ee3-7fd8-b1ba08ea94b8
==> alicloud-ecs: Start creating alicloud vpc
==> alicloud-ecs: Start creating vswitch...
==> alicloud-ecs: Start creating security groups...
==> alicloud-ecs: Start creating alicloud instance
==> alicloud-ecs: Start allocated alicloud eip
==> alicloud-ecs: Allocated alicloud eip 39.106.47.173
==> alicloud-ecs: Alcoud instance starting
alicloud-ecs: Attach keypair packer_59e44f40-c8d6-0ee3-7fd8-b1ba08ea94b8 to instance: i-2zefhslbbsg76l3g5bf9
==> alicloud-ecs: Waiting for SSH to become available...
==> alicloud-ecs: Connected to SSH!
==> alicloud-ecs: Provisioning with shell script: /var/folders/3q/w38xx_js6cl6k5mwkrqsnw7w0000gn/T/packer-shell257466182
alicloud-ecs: Loaded plugins: fastestmirror
alicloud-ecs: Determining fastest mirrors
alicloud-ecs: Resolving Dependencies
alicloud-ecs: --> Running transaction check
alicloud-ecs: ---> Package redis.x86_64 0:3.2.10-2.el7 will be installed
alicloud-ecs: --> Processing Dependency: libjemalloc.so.1()(64bit) for package: redis-3.2.10-2.el7.x86_64
alicloud-ecs: --> Running transaction check
alicloud-ecs: ---> Package jemalloc.x86_64 0:3.6.0-1.el7 will be installed
alicloud-ecs: --> Finished Dependency Resolution
alicloud-ecs:
alicloud-ecs: Dependencies Resolved
alicloud-ecs:
alicloud-ecs: ================================================================================
alicloud-ecs: Package Arch Version Repository Size
alicloud-ecs: ================================================================================
alicloud-ecs: Installing:
alicloud-ecs: redis x86_64 3.2.10-2.el7 epel 545 k
alicloud-ecs: Installing for dependencies:
alicloud-ecs: jemalloc x86_64 3.6.0-1.el7 epel 105 k
alicloud-ecs:
alicloud-ecs: Transaction Summary
alicloud-ecs: ================================================================================
alicloud-ecs: Install 1 Package (+1 Dependent package)
alicloud-ecs:
alicloud-ecs: Total download size: 650 k
alicloud-ecs: Installed size: 1.7 M
alicloud-ecs: Downloading packages:
alicloud-ecs: --------------------------------------------------------------------------------
alicloud-ecs: Total 1.3 MB/s | 650 kB 00:00
alicloud-ecs: Running transaction check
alicloud-ecs: Running transaction test
alicloud-ecs: Transaction test succeeded
alicloud-ecs: Running transaction
alicloud-ecs: Installing : jemalloc-3.6.0-1.el7.x86_64 1/2
alicloud-ecs: Installing : redis-3.2.10-2.el7.x86_64 2/2
alicloud-ecs: Verifying : redis-3.2.10-2.el7.x86_64 1/2
alicloud-ecs: Verifying : jemalloc-3.6.0-1.el7.x86_64 2/2
alicloud-ecs:
alicloud-ecs: Installed:
alicloud-ecs: redis.x86_64 0:3.2.10-2.el7
alicloud-ecs:
alicloud-ecs: Dependency Installed:
alicloud-ecs: jemalloc.x86_64 0:3.6.0-1.el7
alicloud-ecs:
alicloud-ecs: Complete!
==> alicloud-ecs: Start delete alicloud image snapshots
==> alicloud-ecs: Creating alicloud images: packer_basic
alicloud-ecs: Detach keypair packer_59e44f40-c8d6-0ee3-7fd8-b1ba08ea94b8 from instance: i-2zefhslbbsg76l3g5bf9
==> alicloud-ecs: Clean the created EIP
==> alicloud-ecs: Clean the created instance
==> alicloud-ecs: Clean the created security group
==> alicloud-ecs: Clean the created vSwitch
==> alicloud-ecs: Clean the created VPC
==> alicloud-ecs: Deleting temporary keypair...
Build 'alicloud-ecs' finished.
==> Builds finished. The artifacts of successful builds are:
--> alicloud-ecs: Alicloud images were created:
cn-beijing: m-2ze12578be1oa4ovs6r9
執行完成後,就可以在自定義鏡像列表中剛才創建的包含了安裝好redis的自定義鏡像了。基於這個鏡像就可以創建包含redis應用的ECS實例。更多的參考可以訪問阿裏雲官方插件倉庫和 Packer 官方文檔
最後更新:2017-10-26 10:33:40