Packer是一款轻量级的镜像定义工具,能够运行在主流操作系统(如Windows、Linux和macOS)上。本文示范了如何为CentOS 6.9制作本地镜像并上传至阿里云平台。您可根据需要自定义Packer模板为其他操作系统制作镜像。
前提条件
- 已创建AccessKey。详细步骤,请参见创建AccessKey。
说明 由于AccessKey权限过大,为防止数据泄露,建议您先创建RAM用户,再使用RAM用户创建AccessKey。创建RAM用户的具体操作请参见 创建RAM用户。
- 已开通OSS服务。详细步骤,请参见开通OSS服务。
背景信息
本文示例步骤使用了如下版本软件。操作时,请以您的实际软件版本为准。
- 服务器操作系统:Ubuntu 16.04
- 待制作镜像的操作系统:CentOS 6.9
使用示例
您可以参见以下使用示例基于CentOS 6.9系统创建本地镜像:
自定义Packer模板
基于CentOS 6.9系统创建本地镜像的示例,请参见
使用示例。如果您需要为其他操作系统创建本地镜像,可参见CentOS 6.9的JSON文件(如下所示),自定义Packer模板。
{"variables": { "box_basename": "centos-6.9", "build_timestamp": "{{isotime \"20060102150405\"}}", "cpus": "1", "disk_size": "4096", "git_revision": "__unknown_git_revision__", "headless": "", "http_proxy": "{{env `http_proxy`}}", "https_proxy": "{{env `https_proxy`}}", "iso_checksum_type": "md5", "iso_checksum": "af4axxxxxxxxxxxxxxxxx192a2", "iso_name": "CentOS-6.9-x86_64-minimal.iso", "ks_path": "centos-6.9/ks.cfg", "memory": "512", "metadata": "floppy/dummy_metadata.json", "mirror": "http://mirrors.aliyun.com/centos", "mirror_directory": "6.9/isos/x86_64", "name": "centos-6.9", "no_proxy": "{{env `no_proxy`}}", "template": "centos-6.9-x86_64", "version": "2.1.TIMESTAMP" }, "builders":[ { "boot_command": [ "<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `ks_path`}}<enter><wait>" ], "boot_wait": "10s", "disk_size": "{{user `disk_size`}}", "headless": "{{ user `headless` }}", "http_directory": "http", "iso_checksum": "{{user `iso_checksum`}}", "iso_checksum_type": "{{user `iso_checksum_type`}}", "iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}", "output_directory": "packer-{{user `template`}}-qemu", "shutdown_command": "echo 'vagrant'|sudo -S /sbin/halt -h -p", "ssh_password": "vagrant", "ssh_port": 22, "ssh_username": "root", "ssh_wait_timeout": "10000s", "type": "qemu", "vm_name": "{{ user `template` }}.raw", "net_device": "virtio-net", "disk_interface": "virtio", "format": "raw" } ], "provisioners": [{ "type": "shell", "inline": [ "sleep 30", "yum install cloud-util cloud-init -y" ] }], "post-processors":[ { "type":"alicloud-import", "oss_bucket_name": "packer", "image_name": "packer_import", "image_os_type": "linux", "image_platform": "CentOS", "image_architecture": "x86_64", "image_system_size": "40", "region":"cn-beijing" } ] }
使用示例中使用的生成器为QEMU Builder,该生成器用于创建虚拟机镜像。Packer生成器的必需参数说明,如下表所示。其余可选参数,请参见Packer
QEMU Builder页面。
必需参数 | 类型 | 描述 |
---|---|---|
iso_checksum | string | 操作系统的ISO文件的校验和。Packer在启动挂载了ISO的虚拟机之前检查该参数。至少指定iso_checksum或者iso_checksum_url参数;当您指定了参数iso_checksum时,参数iso_checksum_url的值被自动忽略。 |
iso_checksum_type | string | 已指定的操作系统的ISO文件的校验和类型。取值范围:
|
iso_checksum_url | string | 一个包含了操作系统ISO文件校验和的文件链接(URL),样式为GNU或者BSD。您需要至少指定iso_checksum或者iso_checksum_url参数;当您指定了参数iso_checksum时,参数iso_checksum_url的值被自动忽略。 |
iso_url | string | 一个指向ISO并包含安装镜像的URL。这个URL可以是一个HTTP链接,也可以是一个文件路径:
|
headless | boolean | Packer默认通过启动图形化虚拟机界面构建QEMU虚拟机。当您将headless置为True时,将启动一个没有控制台的虚拟机。 |
使用示例中使用的配置器中包含了Post-Processor模块,该模块实现自动化上传本地镜像到ECS云平台。Post-Processor模块的必需参数如下表所示。其余可选参数,请参见Packer
Alicloud Post-Processor页面。
必需参数 | 类型 | 描述 |
---|---|---|
access_key | string | 您的AccessKeyID。 |
secret_key | string | 您的AccessKeySecret。 |
region | string | 本地镜像上传的阿里云地域ID,如本示例中的cn-beijing 。更多地域信息,请参见地域和可用区。 |
image_name | string | 您的本地镜像的名称。
|
oss_bucket_name | string | 您的OSS Bucket名称。若您指定了一个不存在的Bucket名称,Packer上传镜像时自动创建一个同名Bucket。 |
image_os_type | string | 镜像类型,取值范围:
|
image_platform | string | 镜像发行版本。例如,本示例中的CentOS。 |
image_architecture | string | 镜像发行版本的架构平台,取值范围:
|
format | string | 镜像的格式,取值范围:
|
后续步骤
您可以使用上传至阿里云平台的自定义镜像创建ECS实例,请参见使用自定义镜像创建实例。