典名科技本文主要介绍阿里云服务器ECS自定义镜像,创建自定义镜像,使用快照创建自定义镜像,使用实例创建自定义镜像,使用Packer创建自定义镜像,使用Packer创建并导入本地镜像。希望对您有所帮助。
自定义镜像是您使用实例或快照创建的镜像,或是您从本地导入的镜像。通过对已经部署好应用的实例创建自定义镜像,您可以以此来快速创建更多包含相同配置的实例,免除重复配置。
当您成功创建或成功导入自定义镜像后,镜像的状态为可用。此时,您可以使用该镜像创建实例,可以将其共享给其他阿里云账号使用,或复制该镜像到其他地域使用,或导出该镜像到OSS存储空间(OSS Bucket)。不再需要该镜像时,您可以将其删除。
通过创建自定义镜像,您可以将一台ECS实例的操作系统、数据制作成环境副本,再通过自定义镜像创建多台ECS实例,快速复制系统环境。
创建实例后,您可以根据业务需要自定义实例(如安装软件、部署应用环境等),并为更新后的实例创建自定义镜像。使用该镜像创建的新实例,会包含您已配置的自定义项,省去您重复自定义实例的时间。
已将实例中的敏感数据删除,避免数据安全隐患。
创建自定义镜像前,请仔细阅读以下注意事项:
使用Linux实例创建自定义镜像时,还需要注意以下情况:
Packer是一款轻量级的镜像定义工具,能够运行在常用的主流操作系统(如Windows、Linux和macOS)上。参见本文安装并使用Packer,轻松创建自定义镜像。
使用Packer创建自定义镜像时,需要创建一个JSON格式的模板文件。在该模板文件中,您需要指定创建自定义镜像的生成器和配置器。详情请参见Alicloud Image Builder(生成器)和Provisioners(配置器)。Packer具有多种配置器,可用于配置自定义镜像的内容生成方式,以下以常用的Shell配置器为例,定义Packer模板。
{
"variables": {
"access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
"secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
},
"builders": [{
"type":"alicloud-ecs",
"access_key":"{{user `access_key`}}",
"secret_key":"{{user `secret_key`}}",
"region":"cn-beijing",
"image_name":"packer_basic",
"source_image":"centos_7_02_64_20G_alibase_20170818.vhd",
"ssh_username":"root",
"instance_type":"ecs.n1.tiny",
"internet_charge_type":"PayByTraffic",
"io_optimized":"true"
}],
"provisioners": [{
"type": "shell",
"inline": [
"sleep 30",
"yum install redis.x86_64 -y"
]
}]
}
参数 | 描述 |
---|---|
access_key | 您的AccessKeyID。更多详情,请参见创建AccessKey。 说明 由于AccessKey权限过大,为防止错误操作,建议您创建RAM用户,并使用RAM子账号创建AccessKey。具体步骤,请参见创建RAM用户和创建AccessKey。 |
secret_key | 您的AccessKeySecret。更多详情,请参见创建AccessKey。 |
region | 创建自定义镜像时使用临时资源的地域。 |
image_name | 自定义镜像的名称。 |
source_image | 基础镜像的名称,可以从阿里云公共镜像列表获得。 |
instance_type | 创建自定义镜像时生成的临时实例的类型。 |
internet_charge_type | 创建自定义镜像时临时实例的公网带宽付费类型。 |
provisioners | 创建自定义镜像时使用的Packer配置器类型。详情请参见Packer配置器。 |
指定Packer模板文件生成自定义镜像的操作步骤如下:
export ALICLOUD_ACCESS_KEY=<您的accesskeyid>
导入您的AccessKeyID。export ALICLOUD_SECRET_KEY=<您的accesskeysecret>
导入您的AccessKeySecret。packer build alicloud.json
创建自定义镜像。alicloud-ecs output will be in this color.
==> alicloud-ecs: Prevalidating alicloud image name...
alicloud-ecs: Found image ID: centos_7_02_64_20G_alibase_20170818.vhd
==> alicloud-ecs: Start creating temporary keypair: packer_59e44f40-c8d6-0ee3-7fd8-b1ba08ea94b8
==> alicloud-ecs: Start creating alicloud vpc
---------------------------
==> alicloud-ecs: Provisioning with shell script: /var/folders/3q/w38xx_js6cl6k5mwkrqsnw7w0000gn/T/packer-shell257466182
alicloud-ecs: Loaded plugins: fastestmirror
---------------------------
alicloud-ecs: Total 1.3 MB/s | 650 kB 00:00
alicloud-ecs: Running transaction check
---------------------------
==> alicloud-ecs: Deleting temporary keypair...
Build 'alicloud-ecs' finished.
==> Builds finished. The artifacts of successful builds are:
--> alicloud-ecs: Alicloud images were created:
cn-beijing: m-2ze12578be1oa4ovs6r9
Packer是一款轻量级的镜像定义工具,能够运行在主流操作系统(如Windows、Linux和MacOS)上。本文示范了如何为CentOS 6.9制作本地镜像并上传至阿里云平台。您可根据需要自定义Packer模板为其他操作系统制作镜像。
您可以参见以下使用示例基于CentOS 6.9系统创建本地镜像:
{"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": [
" text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `ks_path`}}"
],
"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"
}
]
}
必需参数 | 类型 | 描述 |
---|---|---|
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时,将启动一个没有控制台的虚拟机。 |
必需参数 | 类型 | 描述 |
---|---|---|
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实例。