全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
云服务器 ECS

使用 Packer 创建自定义镜像

更新时间:2017-12-05 11:54:20

Packer 是一个便捷的创建自定义镜像的开源工具,能运行在大多数主流操作系统上。您可以参阅本文安装并使用 Packer,执行一两行命令就能轻松创建自定义镜像。

前提条件

您已经获取了 AccessKey,参阅文档 创建 Access Key 在管理控制台获取 AccessKey。

注意:由于 AccessKey 权限过大,为防止错误操作,建议您 创建 RAM 子账号,并使用 RAM 子账号 创建 Access Key

使用 Packer 创建自定义镜像

1. 安装 Packer

您可以进入 Packer 官网下载页面,选择下载与您操作系统对应的版本,参阅以下步骤或者访问 Packer 官方安装说明 安装 Packer。

在 Linux 服务器上安装 Packer

以 CentOS 6.8 安装 64 位 Packer 为例:

  1. 连接并登录到 Linux 服务器。如果您的服务器为 ECS Linux 实例,可参阅文档 使用用户名密码验证连接 Linux 实例
  2. 执行命令 cd /usr/local/bin 进入 /usr/local/bin 目录。

    注意:/usr/local/bin 目录为环境变量目录,您可以将 Packer 安装到该目录下或其他已添加到环境变量的目录下。

  3. 执行命令 wget https://releases.hashicorp.com/packer/1.1.1/packer_1.1.1_linux_amd64.zip 获取 Packer 安装包。您可以访问 Packer 下载页面 获取其他版本 Packer 安装包。
  4. 执行命令 unzip packer_1.1.1_linux_amd64.zip 解压文件。
  5. 执行命令 packer -v 验证 Packer 安装状态。若 Linux 服务器返回 Packer 版本号,表示您已正确安装 Packer;若 Linux 服务器提示 command not found 表示 Packer 未正确安装。

在 Windows 服务器上安装 Packer

以 Windows Server 2012 安装 64 位 Packer 为例:

  1. 连接并登录到 Windows 服务器。如果您的服务器为 ECS Windows 实例,可参阅文档 使用远程连接软件连接 Windows 实例
  2. 打开 Packer 下载页面 选择下载 Windows 64 位 Packer。
  3. 解压文件到指定目录并安装,您可以指定自己常用的目录。
  4. 在环境变量 PATH 中 定义 Packer 所在目录。
    1. 打开 控制面板
    2. 选择 所有控制面板项 > 系统 > 高级系统设置
    3. 单击 环境变量
      Advanced
    4. 在系统变量列表中找到 Path
      PATH
    5. 变量值 中加入 Packer 的安装目录,如本示例中的 C:\Packer,目录之间以半角分号(;)隔开。单击 确定
      Variable
  5. 在 CMD 中执行命令 packer.exe -v 验证 Packer 安装状态。若 Windows 服务器返回 Packer 版本号,表示您已正确安装 Packer;若 Windows 服务器提示 command not found 表示 Packer 未正确安装。

2. 定义 Packer 模板

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

创建名为 alicloud 的 json 文件并粘贴以下内容。

  1. {
  2. "variables": {
  3. "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
  4. "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
  5. },
  6. "builders": [{
  7. "type":"alicloud-ecs",
  8. "access_key":"{{user `access_key`}}",
  9. "secret_key":"{{user `secret_key`}}",
  10. "region":"cn-beijing",
  11. "image_name":"packer_basic",
  12. "source_image":"centos_7_02_64_20G_alibase_20170818.vhd",
  13. "ssh_username":"root",
  14. "instance_type":"ecs.n1.tiny",
  15. "internet_charge_type":"PayByTraffic",
  16. "io_optimized":"true"
  17. }],
  18. "provisioners": [{
  19. "type": "shell",
  20. "inline": [
  21. "sleep 30",
  22. "yum install redis.x86_64 -y"
  23. ]
  24. }]
  25. }

注意:您需要自定义以下参数的值。

参数 获取位置
access_key 您的 AccessKeyID。更多详情,参阅创建 Access Key
secret_key 您的 AccessKeySecret。更多详情,创建 Access Key
region 创建自定义镜像时使用临时资源的地域
image_name 自定义镜像的名称
source_image 基础镜像的名称,可以从阿里云公共镜像列表获得
instance_type 创建自定义镜像时生成的临时实例的类型
internet_charge_type 创建自定义镜像时临时实例的公网带宽付费类型
provisioners 创建自定义镜像时使用的 Packer 配置器 类型

3. 使用 Packer 创建自定义镜像

指定 Packer 模板文件生成自定义镜像:

  1. 执行命令 export ALICLOUD_ACCESS_KEY=您的 AccessKeyID 导入您的 AccessKeyID。
  2. 执行命令 export ALICLOUD_SECRET_KEY=您的 AccessKeySecret 导入您的 AccessKeySecret。
  3. 执行命令 packer build alicloud.json 创建自定义镜像。

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

  1. alicloud-ecs output will be in this color.
  2. ==> alicloud-ecs: Prevalidating alicloud image name...
  3. alicloud-ecs: Found image ID: centos_7_02_64_20G_alibase_20170818.vhd
  4. ==> alicloud-ecs: Start creating temporary keypair: packer_59e44f40-c8d6-0ee3-7fd8-b1ba08ea94b8
  5. ==> alicloud-ecs: Start creating alicloud vpc
  6. ---------------------------
  7. ==> alicloud-ecs: Provisioning with shell script: /var/folders/3q/w38xx_js6cl6k5mwkrqsnw7w0000gn/T/packer-shell257466182
  8. alicloud-ecs: Loaded plugins: fastestmirror
  9. ---------------------------
  10. alicloud-ecs: Total 1.3 MB/s | 650 kB 00:00
  11. alicloud-ecs: Running transaction check
  12. ---------------------------
  13. ==> alicloud-ecs: Deleting temporary keypair...
  14. Build 'alicloud-ecs' finished.
  15. ==> Builds finished. The artifacts of successful builds are:
  16. --> alicloud-ecs: Alicloud images were created:
  17. cn-beijing: m-2ze12578be1oa4ovs6r9

后续操作

您可以使用该自定义镜像创建 ECS 实例,具体步骤参阅文档使用自定义镜像创建实例

参考链接

本文导读目录