使用Packer创建ECS自定义镜像

Packer是一款轻量级的镜像定义工具,能够运行在常用的主流操作系统上。本教程介绍了通过创建一个JSON格式的Packer模板文件来构建ECS自定义镜像。

教程介绍

以下步骤及示例均已在 Alibaba Cloud Shell 中集成。您可以在 Cloud Shell 中打开,快速体验通过Packer模板文件来构建您的ECS自定义镜像。

安装Packer

您可以在 Packer官网页面获取不同平台最新版本的Packer,选择下载与您操作系统对应的版本。并通过以下示例或者访问Packer官方安装说明来安装Packer。

mkdir -p $HOME/bin
curl https://shell-image-softwares-cn-shanghai.oss-cn-shanghai.aliyuncs.com/packer/packer_1_3_5.tar.gz | tar zxv -C $HOME/bin

定义Packer模板

使用Packer创建自定义镜像时,需要先创建一个JSON格式的模板文件。在该模板文件中,您需要指定创建自定义镜像的Alicloud Image Builder(生成器)和Provisioners(配置器)。Packer具有多种配置器,可用于配置自定义镜像的内容生成方式。

本教程以常用的Shell配置器为例,定义了一个名为alicloud.json的Packer模板,模板内容如下:

{
  "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": [
      "yum install redis.x86_64 -y"
    ]
  }]
}
说明
  • 您可以执行cat alicloud.json命令查看模板详情。

  • 本示例中,将创建一个含Redis的自定义镜像。

您可以通过以下参数自定义您的模板文件:

参数名

说明

access_key

您的AccessKey ID。

secret_key

您的AccessKey Secret。

region

创建自定义镜像时使用临时资源的地域。

image_name

自定义镜像的名称。

source_image

基础镜像的名称,可以从阿里云公共镜像列表获得。

instance_type

创建自定义镜像时生成的临时实例的类型。

internet_charge_type

创建自定义镜像时临时实例的公网带宽付费类型。

provisioners

创建自定义镜像时使用的Packer配置器类型。

使用Packer创建自定义镜像

在使用上述Packer模板文件创建ECS自定义镜像之前,您需要确保您已有ECS的相关操作权限。如果已开放权限,在Alibaba Cloud Shell环境下,可以直接执行如下命令来构建镜像。

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: Provisioning with shell script: /var/folders/3q/w38xx_js6cl6k5mwkrqsnw7w0000gn/T/packer-shell257466182
alicloud-ecs: Loaded plugins: fastestmirror
---------------------------
alicloud-ecs: Total                                              1.3 MB/s | 650 kB 00:00
alicloud-ecs: Running transaction check
---------------------------
==> 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

更多信息