阿里云创建自定义镜像

阿里云自定义镜像它在用户创建阿里云服务器的时候选择添加,是实现阿里云服务器个性化定制的基础。本文介绍了自定义镜像的使用以及脚本示例。
 
一、阿里云自定义镜像使用场景
当您有如下需求时,可以考虑使用实例自定义镜像来配置弹性阿里云服务器:
需要通过脚本简化弹性阿里云服务器配置。
通过Shell脚本完成用户自定义的Linux系统初始化工作。
通过Cloud Config脚本完成用户自定义的Linux系统初始化工作。
其他可以使用脚本完成的功能。

二、阿里云自定义镜像使用限制
阿里云自定义镜像设置功能仅支持Linux阿里云服务器。
执行脚本内容需满足格式要求。
所有脚本或者上传的文件大小,不能超过16K。
如需ssh密码认证连接,需要在自定义镜像中打开,或者服务器启动后手动配置重启sshd服务。

三、阿里云自定义镜像运行频率
 
阿里云服务器初次启动时,系统首先以root权限运行实例自定义镜像,其次运行初始化信息。
执行自定义镜像后的阿里云服务器,是否会在下一次启动中重复执行该数据,取决于脚本的类型以及脚本的模块类型。例如:
如果您通过Shell脚本配置自定义镜像,阿里云服务器只会在初次启动时执行。
如果自定义镜像配置的是类似Cloud Config脚本的Set Passwords之类的模块,阿里云服务器只会在初次启动时执行。
如果自定义镜像配置的是类似Cloud Config脚本的bootcmd、update_etc_hosts和yum_add_repo之类的模块,阿里云服务器在每次启动时都会执行。
更多详情,请参见Cloud-init文档 Modules,并关注模块频率(Module Frequency)。
 
四、阿里云创建自定义镜像使用方法
 
1. 用户根据需求,设计Shell或者Cloud Config脚本。
 
2. 在创建阿里云服务器时,“启用”阿里云自定义镜像设置,选择用户数据类型,并将设计好的脚本粘贴到“脚本内容”文本框,或者选择“本地上传文件”按钮,直接将已保存的脚本文件上传。

阿里云自定义镜像设置支持“执行脚本”和“文本”两种形式的用户数据:
执行脚本:用户将脚本内容粘贴到文本框中或者将脚本内容保存成文件后再选择“本地上传文件”上传。
文本:用户将base64格式的文本粘贴到文本框中或者将内容保存成文件后再选择“本地上传文件”上传。

3. 完成创建和支付流程。
 
4. 阿里云服务器启动后自动执行Cloud-init组件,读取用户数据脚本。在阿里云服务器运行(running)后,用户自行检验自定义镜像是否生效。
 
五、阿里云创建自定义镜像脚本内容示例
 
Linux实例自定义镜像支持Shell、Cloud Config类型脚本。脚本采用开源的Cloud-init架构,作为数据来源,自动化配置Linux实例属性。以下是两种脚本的使用示例(示例中创建的阿里云服务器为CentOS7.2)。
 
 1. Shell
用户自定义镜像的Shell脚本,内容最大限制为16K,首行固定以#!加上指向要读取脚本的解释器路径(通常为/bin /bash)开头,示例如下:
 
示例一:DNS配置
 
某些情况下用户需要配置自己的DNS,可以用如下的脚本实现。
 
#!bin/bash
echo "nameserver 8.8.8.8" | tee /etc/resolv.conf
 
服务器启动完成后,cat /etc/resolv.conf查看DNS已经写入。
 
示例二:服务的安装启动
 
用户也可以利用实例自定义镜像预安装需要的服务,例如nginx的安装:

#!bin/bash
yum update -y
yum install nginx -y
systemctl start nginx
服务器启动后,查看nginx服务已处在running状态:
 
 2. Cloud Config
Cloud Config是实现实例自定义镜像最简单的方式,其交互方式非常友善。您可以使用Cloud Config预先配置实例的部分服务,如创建文件、导入SSH密钥、更新和配置软件源等。Cloud Config首行固定为 #cloud-config,内容最大限制为16K,需要以YAML文件的方式呈现。以下为Cloud Config脚本示例:
 
示例一:记录登录时间
#cloud-config
bootcmd:
- echo "Hello, the time is now $(date -R)" | tee /root/test.txt
 
服务器启动后,cat test.txt打开文件,查看到内容已写入:
 
示例二:SSH认证
 
用户可以通过实例自定义镜像做ssh认证,将本地已生成的ssh公共秘钥注入到阿里云服务器中,免密登陆在批量操作阿里云服务器时能够提供较高的便捷性。如:
#cloud-config:
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAGEA3FSyQwBI6Z+nCSjUUk8EEAnnkhXlukKoUPND/RRClWz2s5TCzIkd3Ou5+Cyz71X0XmazM3l5WgeErvtIwQMyT1KjNoMhoJMrJnWqQPOt5Q8zWd9qG7PBl9+eiH5qV7NZ mykey@host
 
服务器启动后,cat .ssh/authorized_keys查看到公钥已注入:
 
示例三:更新和配置软件源
 
这个场景也同样具有普适性,包括增加yum/apt的仓库,yum/apt源的更新和配置等。yum/apt源的更新通过cloud-config非常简单地完成。
#cloud-config
package_upgrade: true
yum_repos:
#仓库名称
epel-testing:
baseurl: http://download.fedoraproject.org/pub/epel/testing/5/$basearch
enabled: false
failovermethod: priority
gpgcheck: true
gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
name: Extra Packages for Enterprise Linux 5 – Testing
 
服务器启动后,查看yum源已经配置完成