閱讀592 返回首頁    go 阿裏雲 go 技術社區[雲棲]


如何使用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

  1. 登陸 阿裏雲官方網站
  2. 進入頁麵上方菜單【管理控製台】
  3. 進入頁麵上方級菜單【Access Key】
  4. 頁麵所顯示的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

  上一篇:go  法國美女情迷阿裏,成了天貓雙11拚命女郎
  下一篇:go  Aliware推出應用配置管理大殺器,分布式架構下配置推送秒級生效