👉点击这里申请火山引擎VIP帐号,立即体验火山引擎产品>>>
前提条件
已开通快照服务。
运行Packer的服务器需可以访问公网。
请参考账户说明确认您的火山引擎账号余额(即现金余额)和代金券的总值大于等于100元人民币。若余额不足,您可参考充值操作指引进行充值。
注意事项
名词解释
名词 | 说明 |
Volcengine Image Builder(Builder) | 火山引擎自定义镜像生成器,用于指定Packer需要使用的配置器、自定义镜像创建过程使用的配置信息。 |
Provisioner | 配置器,用于配置Packer在创建的自定义镜像中,需要安装的软件、补丁等内容。本文以常用的Shell配置器为例,更多配置器详情可查看Provisioners。 |
操作步骤
步骤一:安装Packer
登录您运行Packer工具的实例。若您使用火山引擎云服务器,操作详情可查看登录Linux实例。
执行如下命令,下载Packer。
本文以1.8.6_linux_amd64版本为例,更多版本Packer可查看Packer官方文档。
wget https://releases.hashicorp.com/packer/1.8.6/packer_1.8.6_linux_amd64.zip
执行如下命令,解压Packer压缩文件。
请将packer_1.8.6_linux_amd64.zip替换为实际Packer文件。
unzip packer_1.8.6_linux_amd64.zip
执行如下命令,将Packer移动至环境变量目录,方便在任意目录下快速使用。
mv packer /usr/local/bin/
执行如下命令,验证Packer是否成功安装。
packer -v
若返回如下所示,表示Packer已正确安装。

若返回command not found,表示Packer未正确安装。
步骤二:配置Packer模板
登录您运行Packer工具的实例,执行如下命令,创建后缀为.pkr.hcl的配置文件。
支持HCL、JSON两种格式文件作为模板,建议您使用HCL格式文件。
请将<volc_config>替换为待创建文件名。
vim <volc_config>.pkr.hcl
按i键,进入编辑模式,复制并粘贴如下内容。
packer {required_plugins {volcengine = {version = ">= 0.0.1"source = "github.com/volcengine/volcengine"}}}source "volcengine-ecs" "foo" {target_image_name = "packer_test"source_image_id = "image-yc41yungxxxxxx"region = "cn-beijing"instance_type = "ecs.g2a.large"associate_public_ip_address = "true"public_ip_band_width = "20"public_ip_id = ""system_disk_size = "50"system_disk_type = "ESSD_PL0"ssh_username = "root"temporary_key_pair_name = "packer-key"}build {sources = ["source.volcengine-ecs.foo"]provisioner "shell" {inline = ["sleep 30", "yum install mysql -y"]}}
本文使用的HCL模板完整使用说明,可查看HCL Templates。
参数名 | 说明 | 取值样例 |
packer | 本模块用于配置Packer本身行为(例如:指定当前模板所需安装的所有插件)。 请保留示例中的volcengine插件配置,更多详情可查看packer。 | - |
source | 本模块用于配置生成器(Builder)启动信息,您需要在第一个标签指定volcengine-ecs表示创建火山引擎云服务器镜像。source模块使用详情可查看source。 | - |
L region | 生成镜像所在的火山引擎地域,详情可查看地域和可用区。 | cn-beijing |
L target_image_name | 生成镜像的名称。 | packer_test |
L source_image_id | 基础镜像ID,Packer将在该镜像基础上创建自定义镜像。
| image-38deyjkaxxxxx |
L instance_type | 生成镜像使用的临时实例规格,详情可查看实例规格介绍。 | ecs.g2i.large |
L system_disk_size | 系统盘大小,单位GiB。 | 50 |
L system_disk_type | 系统盘类型。 | ESSD_PL0 |
L associate_public_ip_address | 是否为临时实例关联公网IP,取值:
注意 当本参数传入true时,支持:
| true |
L public_ip_id | 需要使用的已有公网IP的ID。 | eip-13frvze8oo8hs3xxxxxx |
L public_ip_band_width | 临时公网IP带宽上限。
说明 本参数仅在associate_public_ip_address参数值为true,且public_ip_id参数值为空时生效。 | 1 |
L temporary_key_pair_name | 设置连接临时实例的临时密钥对名称,系统将自动创建该密钥对并用于临时实例。 您还可以改用ssh_password参数,通过密码连接临时实例。更多SSH连接参数详情,可查看SSH Communicator。 | packer-key |
L ssh_username | SSH连接临时实例使用的用户名,Linux固定为root,详情可查看SSH Communicator。 | root |
build | 本模块用于定义Packer的将启动什么Builder(配置器)及配置器(Provisioners),更多使用详情可查看build。 | - |
执行如下命令,初始化模板文件。
packer init <volc_config>.pkr.hcl
若您使用JSON文件配置Packer模板,您可以执行packer hcl2_upgrade xxx.json命令将JSON文件转换为HCL文件。更多详情可查看Upgrade Packer JSON Template to HCL2。
请将<volc_config>替换为实际文件名。

步骤三:创建自定义镜像
登录您运行Packer工具的实例。
执行如下命令,导入您的火山引擎账号AccessKey ID。
export VOLCENGINE_ACCESS_KEY=<AccessKey ID>
执行如下命令,导入您的火山引擎账号AccessKey Secret。
export VOLCENGINE_SECRET_KEY=<AccessKey Secret>
执行如下命令,开始创建自定义镜像。
packer build volc_config.pkr.hcl

查看创建结果
登录镜像控制台。
在顶部导航栏选择目标自定义镜像所在地域与项目。
选择“自定义镜像”页签。
若目标镜像“状态”列为可用,则创建自定义镜像成功。

您还可以单击镜像名称进入镜像详情页,选择“关联快照”页签,查看镜像包含的云盘关联的快照ID、云盘类型及对应容量信息。更多快照详情可查看快照概述。
