Packer 创建自定义镜像

最近更新时间:2020-06-04 10:16:37

工具介绍

Packer 是一个跨平台的镜像定义工具,简单好用,您可以通过 Packer 快速制作本地镜像,并上传导入本地镜像到您的金山云账号成为自定义镜像。

背景信息

本文描述仅适用于运行 Linux 操作系统的服务器。

步骤一:安装Packer

1.登录到 Linux 服务器。

2.执行命令 cd /usr/local/bin 进入 /usr/local/bin 目录。

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

3.执行命令 获取Packer安装包。

4.执行命令 解压文件。

5.执行命令 packer -v 验证 Packer 安装状态。

若 Linux 服务器返回 Packer 版本号,表示您已正确安装 Packer。

若 Linux 服务器提示 command not found 表示 Packer 未正确安装。

步骤二:定义Packer模板

当您使用Packer创建自定义镜像时,需要先创建一个JSON格式的模板文件。在该模板文件中,您需要指定创建自定义镜像的生成器、配置器,后处理器。完成这些配置创建后,就可以使用此模板文件创建自定义镜像。

详情请参见 QEMU Builder(生成器)Provisioners(配置器)和 Post-Processors (后处理器)。

Packer目前已经支持多种配置器,可用于配置自定义镜像的生成方式,以下以常用的 Shell 配置器为例,定义 Packer 模板。

在Linux服务器中创建名为kscloud的json文件并粘贴以下内容。

{
  "variables": {
    "ks_path": "centos-6.10/anaconda-ks.cfg"
  },
  "builders":
  [
    {
      "type": "qemu",
      "qemu_binary": "/usr/bin/qemu-system-x86_64",
      "iso_url": "CentOS-6.10-x86_64-bin-DVD1.iso",
      "iso_checksum": "8ffcc065c3110e6fa0144cb85e4bb4bc",
      "iso_checksum_type": "md5",
      "vnc_bind_address": "0.0.0.0",
      "ssh_username": "root",
      "ssh_password": "kingsoft",
      "ssh_timeout": "8m",
      "output_directory": "output_image",
      "vm_name": "centos_6.10_x86_64.img.org",
      "disk_size": "20480",
      "format": "qcow2",
      "accelerator": "kvm",
      "http_directory": "http",
      "boot_wait": "10s",
      "boot_command": [
        "<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `ks_path`}}<enter><wait>"
      ],
      "net_device": "virtio-net",
      "qemuargs": [
        ["-m", "8192"],
        ["-smp", "8"]
      ]
    }
  ],
  "provisioners": [{
    "type": "shell",
    "inline": [
      "sleep 30",
      "chkconfig httpd on"
    ]
   }],
  "post-processors":[
    {
      "type": "kscloud-import",
      "access_key": "xxxxxx",
      "secret_key": "xxxxx",
      "ks3_region": "BEIJING",
      "ks3_endpoint": "ks3-cn-beijing.ksyun.com",
      "ks3_bucket_name": "helloworld-test-ks3sdk-liu",
      "ks3_key_name": "hello_test_image",
      "upload_file_path": "output_image/centos_6.10_x86_64.img.org",
      "kec_region": "cn-beijing-6",
      "image_name": "sdk-test-import-image-liu",
      "image_architecture": "x86_64",
      "image_platform": "centos-6",
      "image_format": "qcow2"
    }
  ]
}

步骤三:使用Packer创建自定义镜像

运行命令 packer build kscloud.json 创建自定义镜像。

示例运行结果如下,以下示例将创建可以开机自启动 httpd 服务的自定义镜像:

qemu output will be in this color.
==> qemu: Retrieving ISO
==> qemu: Trying CentOS-6.10-x86_64-bin-DVD1.iso
.................
==> qemu: Converting hard drive...
==> qemu: Running post-processor: kscloud-import
==> qemu (kscloud-import): Image file output_image/centos_6.10_x86_64.img.org has been uploaded to KS3
==> qemu (kscloud-import): Create kec image success
==> qemu (kscloud-import): Region: cn-beijing-6, ImageId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
==> qemu (kscloud-import): KEC RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
Build 'qemu' finished.

金山云,开启您的云计算之旅

免费注册