阿里云服务器ECS    
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新 [咨询更多]
阿里云存储OSS
简单易用、多重冗余、数据备份高可靠、多层次安全防护安全性更强、低成本 [咨询更多]
阿里云数据库RDS
稳定可靠、可弹性伸缩、更拥有容灾、备份、恢复、监控、迁移等方面的全套解决方案 [咨询更多]
阿里云安全产品
DDoS高防IP、web应用防火墙、安骑士、sll证书、态势感知众多阿里云安全产品热销中 [咨询更多]
阿里云折扣优惠    
云服务器ECS、数据库、负载均衡等产品新购、续费、升级联系客服获取更多专属折扣 [咨询更多]
自定义镜像创建阿里云服务器ECS
2020-11-8    点击量:

  典名科技本文主要介绍阿里云服务器ECS自定义镜像,创建自定义镜像,使用快照创建自定义镜像,使用实例创建自定义镜像,使用Packer创建自定义镜像,使用Packer创建并导入本地镜像。希望对您有所帮助。

自定义镜像是您使用实例或快照创建的镜像,或是您从本地导入的镜像。通过对已经部署好应用的实例创建自定义镜像,您可以以此来快速创建更多包含相同配置的实例,免除重复配置。

自定义镜像生命周期

当您成功创建或成功导入自定义镜像后,镜像的状态为可用。此时,您可以使用该镜像创建实例,可以将其共享给其他阿里云账号使用,或复制该镜像到其他地域使用,或导出该镜像到OSS存储空间(OSS Bucket)。不再需要该镜像时,您可以将其删除。

说明 只有自定义镜像的创建者可以使用、共享、复制和删除该镜像。
自定义镜像的生命周期如下图所示。自定义镜像生命周期

相关操作

自定义镜像支持的相关功能操作如下表所示。


  使用快照创建自定义镜像

通过创建自定义镜像,您可以将一台ECS实例的操作系统、数据制作成环境副本,再通过自定义镜像创建多台ECS实例,快速复制系统环境。

前提条件

您已经创建了一份系统盘快照。

背景信息

demo
使用快照创建自定义镜像前,请仔细阅读下列注意事项:
  • 用来创建自定义镜像的快照:
    • 必须包含一份系统盘快照创建自定义镜像。仅包含数据盘快照无法创建自定义镜像。
    • 加密快照和非加密快照均可用于创建自定义镜像。
    • 创建快照的源ECS实例到期或释放后,使用该快照创建的自定义镜像不受影响,使用该镜像创建的ECS实例也不受影响。
  • 自定义镜像:
    • 通过本文步骤创建的自定义镜像不能跨地域使用。如需跨地域使用,请参见复制镜像
    • 自定义镜像与ECS实例的计费方式相互独立。例如,使用包年包月ECS实例创建的自定义镜像,可用于创建按量付费ECS实例。
  • 使用自定义镜像创建的ECS实例:
    • 支持升级vCPU、内存、带宽、云盘等。
    • 支持更换操作系统,更换后,原来的自定义镜像仍可继续使用。详情请参见更换系统盘(非公共镜像)
    • 部分VPC网络Linux系统可能出现网络无法连通的异常情况,主要与/etc/sysconfig/network的配置相关。详情请参见使用自定义镜像创建VPC网络实例后网络出现异常
  • 数据安全建议:
    • 如何提高自定义镜像的安全性,请参见阿里云自定义镜像安全建议
    • 请提前删除快照中的敏感数据,避免数据安全隐患。

操作步骤

  1. 登录ECS管理控制台
  2. 选择以下任意一种方法,找到需要创建自定义镜像的系统盘快照。
    • 通过实例页面:
      1. 在左侧导航栏,选择实例与镜像 > 实例
      2. 在顶部菜单栏处,选择地域。
      3. 找到目标实例,单击实例ID,或在操作列,单击管理instance_manage
      4. 在左侧导航栏,单击本实例快照。找到磁盘属性系统盘的目标快照。在操作列,单击创建自定义镜像snapshot_manage
    • 通过快照页面:
      1. 在左侧导航栏,选择存储与快照 > 快照
      2. 在顶部菜单栏处,选择地域。
      3. 选择一个磁盘属性系统盘的快照,单击创建自定义镜像snapshot_systemdisk
  3. 在弹出的创建自定义镜像对话框中,完成以下配置:
    配置项说明相关文档
    系统快照ID必须是系统盘快照。不涉及
    名称与描述按页面提示填写。不涉及
    资源组(可选)选择相应的资源组,从用途、权限等角度管理创建的自定义镜像。资源组
    添加数据盘快照(可选)选中添加数据盘快照,并单击增加后,选择数据盘快照ID。
    • 如果不选择数据盘快照ID,则该数据盘会创建为空盘,默认容量为5GiB。
    • 如果选择了数据盘快照ID,则云盘容量为快照的容量。
    快照概述
    标签选择相应的标签。
    • 可选:大多数场景为可选项。
    • 必选:当您使用的RAM账号被赋予了强制绑定标签的相关RAM策略时,为必选项,否则会报错权限不足。
    创建带特定标签的资源
    使用快照创建自定义镜像gif
  4. 单击创建

后续步骤

创建自定义镜像后,您可以:
  • 使用自定义镜像创建实例
  • 更换系统盘(非公共镜像)

  使用实例创建自定义镜像

创建实例后,您可以根据业务需要自定义实例(如安装软件、部署应用环境等),并为更新后的实例创建自定义镜像。使用该镜像创建的新实例,会包含您已配置的自定义项,省去您重复自定义实例的时间。

前提条件

已将实例中的敏感数据删除,避免数据安全隐患。

Linux实例创建自定义镜像前,请做下列检查:
  • 检查实例的网络配置。请根据您的Linux系统版本并参见CentOS示例进行操作。
  • 检查系统盘使用剩余空间,确保系统盘没有被写满。

背景信息

创建自定义镜像的过程中,ECS会为实例的每块磁盘自动创建一个快照,这些快照组合起来构成一个自定义镜像,如下图所示。custom_image

创建自定义镜像前,请仔细阅读以下注意事项:

  • 无需停止实例即可创建镜像。
  • 镜像创建过程中,不能改变实例的状态。例如,不要停止、启动或者重启实例,避免创建失败。
  • 包年包月实例已到期时,无法直接为其创建镜像。您可以为实例的系统盘创建快照,再使用快照创建自定义镜像。
  • 实例释放后,无法为其创建镜像。若您为实例保存了系统盘快照,可以通过该快照创建自定义镜像。
  • 实例及其创建的镜像属于同一个地域。例如,实例地域为华东1,则其创建的镜像也在华东1地域。跨地域使用镜像,请参见复制镜像
  • 创建镜像所需时间,取决于实例磁盘的大小。

使用Linux实例创建自定义镜像时,还需要注意以下情况:

  • 不要在/etc/fstab文件中加载数据盘信息,否则使用该镜像创建的实例无法启动。
  • 请勿随意升级内核或操作系统版本。
  • 请勿调整系统盘分区。系统盘目前只支持单个根分区。
  • 请勿修改关键系统文件,如/sbin/bin/lib目录等。
  • 请勿修改默认登录用户名root。

操作步骤

  1. 登录ECS管理控制台
  2. 在左侧导航栏,单击实例与镜像 > 实例
  3. 在顶部菜单栏左上角处,选择地域。
  4. 找到目标实例。在操作列中,单击更多 > 磁盘和镜像 > 创建自定义镜像
  5. 输入镜像名称和描述信息。
  6. 单击创建
    说明 所有磁盘的快照全部创建结束后,镜像才能使用。请耐心等待。
    以下示例演示了如何使用实例创建自定义镜像。使用实例创建自定义镜像

后续步骤

成功创建自定义镜像后,您可以:
  • 使用自定义镜像创建实例
  • 共享镜像给其他阿里云账号
  • 导出镜像到OSS存储桶或本地

  使用Packer创建自定义镜像

Packer是一款轻量级的镜像定义工具,能够运行在常用的主流操作系统(如Windows、Linux和macOS)上。参见本文安装并使用Packer,轻松创建自定义镜像。

背景信息

本文描述以Linux系统的服务器为例,Windows系统的操作请参见Packer官方文档

步骤一:安装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未正确安装。

步骤二:定义Packer模板

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

在Linux服务器中创建名为alicloud的json文件并粘贴以下内容。
{
     "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创建自定义镜像

指定Packer模板文件生成自定义镜像的操作步骤如下:

  1. 运行命令export ALICLOUD_ACCESS_KEY=<您的accesskeyid>导入您的AccessKeyID。
  2. 运行命令export ALICLOUD_SECRET_KEY=<您的accesskeysecret>导入您的AccessKeySecret。
  3. 运行命令packer build alicloud.json创建自定义镜像。
示例运行结果如下,以下示例将创建含Redis的自定义镜像。
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创建并导入本地镜像

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系统创建本地镜像:

  1. 运行egrep "(svm|vmx)" /proc/cpuinfo命令,查看您的源服务器或虚拟机是否支持KVM。
    返回如下信息时,表示支持KVM。
    pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
    flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
  2. 若您的源服务器或者虚拟机支持KVM,依次运行以下命令安装KVM。
    1. sudo apt-get install qemu-kvm qemu virt-manager virt-viewer  libvirt-bin bridge-utils  #安装KVM及相关控件
    2. sudo virt-manager  #开启virt-manager
    如果可以通过GUI创建虚拟机,表示您已经成功安装KVM。
  3. 安装Packer。
    详细步骤,请参见安装Packer
  4. 依次运行以下命令定义Packer模板。
    说明 以下示例命令基于CentOS 6.9系统。如果您需要为其他操作系统制作镜像,请根据需要自定义Packer模板配置文件centos.json,详情请参见自定义Packer模板
    1. cd /usr/local  #切换所在目录
    2. wget https://raw.githubusercontent.com/alibaba/packer-provider/master/examples/alicloud/local/centos.json  #下载阿里云官方发行的centos.json配置文件
    3. wget https://raw.githubusercontent.com/alibaba/packer-provider/master/examples/alicloud/local/http/centos-6.9/ks.cfg  #下载阿里云官方发行的ks.cfg配置文件
    4. mkdir -p http/centos-6.9  #创建目录
    5. mv ks.cfg http/centos-6.9/  #移动文件ks.cfg到目录http/centos-6.9中
  5. 依次运行以下命令创建并导入本地镜像。
    1. export ALICLOUD_ACCESS_KEY=<您的accesskeyid>      #导入您的AccessKeyID
    2. export ALICLOUD_SECRET_KEY=<您的accesskeysecret>  #导入您的AccessKeySecret
    3. packer build centos.json                          #创建本地镜像并导入到阿里云平台
    运行的示例结果如下:
    qemu output will be in this color.
     ==> qemu: Downloading or copying ISO
         qemu: Downloading or copying: http://mirrors.aliyun.com/centos/6.9/isos/x86_64/CentOS-6.9-x86_64-minimal.iso
     ................................................
     ==> qemu: Running post-processor: alicloud-import
         qemu (alicloud-import): Deleting import source https://oss-cn-beijing.aliyuncs.com/packer/centos_x86_64
     Build 'qemu' finished.
     ==> Builds finished. The artifacts of successful builds are:
     --> qemu: Alicloud images were created:
     cn-beijing: XXXXXXXX
  6. 等待一段时间后,在对应地域的ECS控制台镜像详情页查看上传结果,如示例中的华北二。

自定义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": [
            " 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"
        }
      ]
}
使用示例中使用的生成器为QEMU Builder,该生成器用于创建虚拟机镜像。Packer生成器的必需参数说明,如下表所示。其余可选参数,请参见PackerQEMU Builder页面。
表 1. Packer生成器参数说明
必需参数类型描述
iso_checksumstring操作系统的ISO文件的校验和。Packer在启动挂载了ISO的虚拟机之前检查该参数。至少指定iso_checksum或者iso_checksum_url参数;当您指定了参数iso_checksum时,参数iso_checksum_url的值被自动忽略。
iso_checksum_typestring已指定的操作系统的ISO文件的校验和类型。取值范围:
  • none:忽略校验和过程。不推荐指定该值
  • md5
  • sha1
  • sha256
  • sha512
iso_checksum_urlstring一个包含了操作系统ISO文件校验和的文件链接(URL),样式为GNU或者BSD。您需要至少指定iso_checksum或者iso_checksum_url参数;当您指定了参数iso_checksum时,参数iso_checksum_url的值被自动忽略。
iso_urlstring一个指向ISO并包含安装镜像的URL。这个URL可以是一个HTTP链接,也可以是一个文件路径:
  • 如果是HTTP链接,Packer从HTTP链接下载文件并缓存运行。
  • 如果是IMG或者QCOW2文件链接,QEMU直接使用文件创建自定义镜像。当您指定了文件路径时,请将参数disk_image置为true
headlessbooleanPacker默认通过启动图形化虚拟机界面构建QEMU虚拟机。当您将headless置为True时,将启动一个没有控制台的虚拟机。
使用示例中使用的配置器中包含了Post-Processor模块,该模块实现自动化上传本地镜像到ECS云平台。Post-Processor模块的必需参数如下表所示。其余可选参数,请参见PackerAlicloud Post-Processor页面。
表 2. Packer配置器部分参数说明
必需参数类型描述
access_keystring您的AccessKeyID。
secret_keystring您的AccessKeySecret。
regionstring本地镜像上传的阿里云地域ID,如本示例中的cn-beijing。更多地域信息,请参见地域和可用区
image_namestring您的本地镜像的名称。
  • 由 [2, 128] 位英文或中文字符组成。
  • 必须以大小写字母或中文字符开始。
  • 可以包含数字、下划线(_)或者连字符(-)。
  • 不能以http://或https://开头。
oss_bucket_namestring您的OSS Bucket名称。若您指定了一个不存在的Bucket名称,Packer上传镜像时自动创建一个同名Bucket。
image_os_typestring镜像类型,取值范围:
  • linux
  • windows
image_platformstring镜像发行版本。例如,本示例中的CentOS。
image_architecturestring镜像发行版本的架构平台,取值范围:
  • i386
  • x86_64
formatstring镜像的格式,取值范围:
  • RAW
  • VHD

后续步骤

您可以使用上传至阿里云平台的自定义镜像创建ECS实例。

  如果您还有什么需要的话,可以联系我们。
联系客服免费领取更多阿里云产品新购、续费升级折扣,叠加官网活动折上折更优惠