You need to enable JavaScript to run this app.
导航

使用Packer创建自定义镜像

最近更新时间2024.03.22 16:45:43

首次发布时间2023.05.09 08:20:32

Packer是一款可以通过单一的模板文件,高效、并行创建多云平台镜像的轻量级开源工具,能够运行在常用的主流操作系统(如Windows、Linux和macOS)上。

本文以创建Linux镜像为例,介绍使用Packer流程。如需创建Windows镜像,可查看Packer官方文档

前提条件

  • 已开通快照服务
  • 运行Packer的服务器需可以访问公网。
  • 请参考账户说明确认您的火山引擎账号余额(即现金余额)和代金券的总值大于等于100元人民币。若余额不足,您可参考充值操作指引进行充值。

注意事项

Packer将在火山引擎创建按量计费的临时云服务器实例、公网IP等资源用于创建自定义镜像,并在创建镜像后自动删除。创建过程中相关云资源将收取费用,计费方式说明可查看按量计费

名词解释

名词说明
Volcengine Image Builder(Builder)火山引擎自定义镜像生成器,用于指定Packer需要使用的配置器、自定义镜像创建过程使用的配置信息,详情可查看Volcengine Image Builder(生成器)
Provisioner配置器,用于配置Packer在创建的自定义镜像中,需要安装的软件、补丁等内容。本文以常用的Shell配置器为例,更多配置器详情可查看Provisioners

操作步骤

步骤一:安装Packer

  1. 登录您运行Packer工具的实例。若您使用火山引擎云服务器,操作详情可查看登录Linux实例
  2. 执行如下命令,下载Packer。

    本文以1.8.6_linux_amd64版本为例,更多版本Packer可查看Packer官方文档

    wget https://releases.hashicorp.com/packer/1.8.6/packer_1.8.6_linux_amd64.zip
    
  3. 执行如下命令,解压Packer压缩文件。

    请将packer_1.8.6_linux_amd64.zip替换为实际Packer文件。

    unzip packer_1.8.6_linux_amd64.zip
    
  4. 执行如下命令,将Packer移动至环境变量目录,方便在任意目录下快速使用。
    mv packer /usr/local/bin/
    
  5. 执行如下命令,验证Packer是否成功安装。
    packer -v
    
    • 若返回如下所示,表示Packer已正确安装。
    • 若返回command not found,表示Packer未正确安装。

步骤二:配置Packer模板

使用Packer创建自定义镜像前,您需要创建并配置模板文件。在该模板文件中,您需要配置创建自定义镜像过程中使用的临时实例、目标地域、Builder(生成器)和Provisioners(配置器)等信息。

  1. 登录您运行Packer工具的实例,执行如下命令,创建后缀为.pkr.hcl的配置文件。

    说明

    • 支持HCL、JSON两种格式文件作为模板,建议您使用HCL格式文件。
    • 请将<volc_config>替换为待创建文件名。
    vim <volc_config>.pkr.hcl 
    
  2. 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"
        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
    • 本文仅展示重要参数,更多火山引擎Builder支持使用的参数,可查看Volcengine Image Builder

    -
    build

    本模块用于定义Packer的将启动什么Builder(配置器)及配置器(Provisioners),更多使用详情可查看build

    -
  3. 执行如下命令,初始化模板文件。

    • 若您使用JSON文件配置Packer模板,您可以执行packer hcl2_upgrade xxx.json命令将JSON文件转换为HCL文件。更多详情可查看Upgrade Packer JSON Template to HCL2
    • 请将<volc_config>替换为实际文件名。
    packer init <volc_config>.pkr.hcl
    

步骤三:创建自定义镜像

完成Packer模板创建及初始化后,即可创建自定义镜像。

  1. 登录您运行Packer工具的实例。

  2. 执行如下命令,导入您的火山引擎账号AccessKey ID。

    请将<AccessKey ID>替换为您实际的AccessKey ID,获取详情可查看API访问密钥

    export VOLCENGINE_ACCESS_KEY=<AccessKey ID>
    
  3. 执行如下命令,导入您的火山引擎账号AccessKey Secret。

    请将<AccessKey Secret>替换为您实际的AccessKey Secret,获取详情可查看API访问密钥

    export VOLCENGINE_SECRET_KEY=<AccessKey Secret>
    
  4. 执行如下命令,开始创建自定义镜像。

    请将volc_config.pkr.hcl替换为实际文件名。

    packer build volc_config.pkr.hcl
    

    示例运行结果如下,以下示例将创建含MySQL的自定义镜像。

查看创建结果

创建成功后,您可以前往火山引擎控制台查看镜像详情。

  1. 使用创建自定义镜像的火山引擎账号登录云服务器控制台
  2. 在顶部导航栏选择目标镜像所在地域。
  3. 在左侧目录树选择“实例与镜像 > 镜像”,进入镜像列表页面。
  4. 选择“自定义镜像”页签,通过镜像名称或镜像ID查找目标镜像。
  5. 目标镜像的状态为可用 ,则使用Packer创建自定义镜像成功。