Packer是一款轻量级的镜像定义工具,能够运行在常用的主流操作系统(例如Windows、Linux和macOS)上,并行高效的创建多平台的虚拟机镜像。本文为您介绍如何安装并使用Packer创建自定义镜像。
前提条件
已创建AccessKey,并获取AccessKey ID和AccessKey Secret。具体操作,请参见创建AccessKey。说明
- 由于AccessKey权限过大,为防止数据泄露,建议您先创建RAM用户,再使用RAM用户创建AccessKey。创建RAM用户的具体操作,请参见创建RAM用户。
- RAM用户的AccessKey Secret只在创建时显示,不支持查看,请妥善保管。
背景信息
Packer工具包含Builders(生成器)、Provisioners(配置器)、Post-Processors(后处理器)等组件,通过JSON格式的模板文件较大地降低了创建自定义镜像的难度,并且将创建镜像的过程从人工的随机过程变成可以配置管理代码,从而减少了用户应用上云的障碍之一。本文以Linux系统的服务器为例进行介绍,Windows系统的具体操作请参见Packer官方文档。操作流程
Linux服务器使用Packer创建自定义镜像的操作流程如下:
步骤一:安装Packer
- 远程连接ECS实例。具体操作,请参见通过密码认证登录Linux实例。
- 运行以下命令,进入/usr/local/bin目录。
cd /usr/local/bin
说明 /usr/local/bin目录为环境变量目录,您可以将Packer安装到该目录下或其他已添加到环境变量的目录下。 - 运行以下命令,获取Packer安装包。您也可以访问Packer下载页面获取与云服务器ECS操作系统及架构类型相对应的Packer安装包,本操作以packer_1.8.5_linux_amd64.zip为例。
wget https://releases.hashicorp.com/packer/1.8.5/packer_1.8.5_linux_amd64.zip
- 运行以下命令,解压Packer安装包。unzip packer_1.8.5_linux_amd64.zip
- 运行以下命令查询Packer版本号,验证Packer的安装状态。
packer -v
- 如果返回Packer版本号,表示您已正确安装Packer。
- 如果返回信息提示
command not found
,表示Packer未正确安装,请检查Packer所在目录是否被添加到环境变量中。
步骤二:定义Packer模板
使用Packer创建自定义镜像时,需要创建一个JSON格式的模板文件。在该模板文件中,您需要指定创建自定义镜像的生成器和配置器。更多信息,请参见Builders(生成器)和Provisioners(配置器)。Packer具有多种配置器类型可用于配置自定义镜像的内容生成方式,以下操作以常用的Shell配置器为例,定义Packer模板。
- 运行以下命令,创建名为alicloud的JSON文件。
vi alicloud.json
- 按i键进入编辑模式,并根据实际情况修改以下自定义参数后粘贴内容到alicloud.json文件。
{ "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-qingdao", "image_name":"packer_basic", "source_image":"aliyun_3_x64_20G_alibase_20220907.vhd", "associate_public_ip_address":true, "ssh_username":"root", "instance_type":"ecs.g6.large", "internet_charge_type":"PayByTraffic", "io_optimized":true, "skip_image_validation":true }], "provisioners": [{ "type": "shell", "inline": [ "sleep 30", "yum install redis.x86_64 -y" ] }] }
您需要自定义的参数值如下表所示。参数 描述 access_key 您的AccessKey ID。查询RAM用户AccessKey ID的具体操作,请参见查看RAM用户的AccessKey信息。 secret_key 您的AccessKey Secret。RAM用户的AccessKey Secret只在创建时显示,不支持查询。更多信息,请参见创建AccessKey。 region 指定创建自定义镜像时使用临时资源的地域,例如 cn-qingdao
。image_name 指定创建的自定义镜像名称,例如 packer_basic
。source_image 基础镜像的名称,该镜像用于创建临时ECS实例。可以从ECS控制台公共镜像列表获得,也可以通过DescribeImages接口查询获得。 instance_type 创建自定义镜像时生成的临时ECS实例的类型,例如 ecs.g6.large
规格。镜像创建完成后,该实例会被自动释放。说明 使用Packer创建自定义镜像过程中,会调用创建一台包年包月或者按量付费ECS实例接口创建ECS实例,该实例包含了用于创建自定义镜像的操作系统和预装软件等。该实例类型为按量付费,因此会产生部分费用。请确保您的阿里云账户余额(即现金余额)和代金券的总值不得小于100.00元人民币。internet_charge_type 创建自定义镜像时临时实例的公网带宽付费类型。 - PayByBandwidth:按固定带宽计费。
- PayByTraffic:按使用流量计费。
provisioners 创建自定义镜像时使用的Packer配置器类型。更多信息,请参见Provisioners(配置器)。 - 按Esc键,并输入
:wq
后按下回车键,保存并退出。
步骤三:使用Packer创建自定义镜像
使用Packer模板文件生成自定义镜像的操作步骤如下:
- 创建自定义镜像。
- 查看已创建的自定义镜像。