如何使用Packer创建阿里云自定义镜像

简介: 阿里云中的每个ECS实例都由包含不同操作系统分发和版本的镜像创建。 镜像可包括预安装的应用程序和配置。 阿里云市场为最常见的操作系统和应用程序环境提供许多第一和第三方镜像,或者也可创建满足自身需求的自定义镜像。
+关注继续查看

阿里云中的每个ECS实例都由包含不同操作系统分发和版本的镜像创建。 镜像可包括预安装的应用程序和配置。 阿里云市场为最常见的操作系统和应用程序环境提供许多第一和第三方镜像,或者也可创建满足自身需求的自定义镜像。 本文详细介绍了如何使用开源工具 Packer 在阿里云中定义和生成自定义镜像。

1. 安装Packer

安装

从Packer官方站点的下载页面选择与你操作系统对应的版本,下载后解压缩到任何目录,安装就完成了,为了方便你在命令行使用,你可以将packer命令移动到位于环境变量PATH中定义的目录下或者将packer命令所在的目录添加到系统PATH变量中。

验证

为了验证你的Packer安装正确,在你的系统中运行"packer -v"(注:windows请运行"packer.exe -v") 你应该可以看到如下示例的帮助信息。如果输出的错误信息是找不到Packer命令,请确保packer程序位于你的PATH环境变量指定的路径下。

$ packer -v
0.12.1

2. 获取阿里云Access Key

  1. 登陆 阿里云官方网站
  2. 进入页面上方菜单【管理控制台】
  3. 进入页面上方级菜单【Access Key】
  4. 页面所显示的Access Key ID和Access Key Secret则为所需ID和Key

3. 定义 Packer 模板

生成镜像,需创建一个JSON格式的模板文件。 在模板中,定义执行实际生成过程的生成器配置器。 Packer 具有多种配置器,可用于自定义镜像的内容生成方式,在下面的示例中使用最常用的Shell类型。

创建名为 alicloud.json 的文件并粘贴以下内容。 为以下内容输入自己的值:

参数 获取位置
access_key 从上一步中获取的 Access Key ID
secret_key 从上一步中获取的 Access Key Secret
region 创建镜像使用临时资源的区域
image_name 创建的镜像名称
source_image 基础镜像的名称,可以从阿里云公有镜像列表获得
instance_type 创建镜像时生成的临时实例的类似
internet_charge_type 创建镜像时临时实例的网络付费类型
provisioners 创建镜像时配置器类型
  {                                                                                                                                                                                                                                                                        
     "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"                                                                                                                                                                                                                                      
       ]                                                                                                                                                                                                                                                                    
     }]                                                                                                                                                                                                                                                                     
   } 

4. 生成 Packer 映像

如果尚未在本地计算机上安装 Packer,请按照第一步安装或者 Packer 安装说明进行安装。

通过指定 Packer 模板文件生成镜像,如下所示:

$ export ALICLOUD_ACCESS_KEY=在第2步获得的Access Key ID
$ export ALICLOUD_SECRET_KEY=在第2步得的Access Key Secret
$ 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: Start creating vswitch...
==> alicloud-ecs: Start creating security groups...
==> alicloud-ecs: Start creating alicloud instance
==> alicloud-ecs: Start allocated alicloud eip
==> alicloud-ecs: Allocated alicloud eip 39.106.47.173
==> alicloud-ecs: Alcoud instance starting
    alicloud-ecs: Attach keypair packer_59e44f40-c8d6-0ee3-7fd8-b1ba08ea94b8 to instance: i-2zefhslbbsg76l3g5bf9
==> alicloud-ecs: Waiting for SSH to become available...
==> alicloud-ecs: Connected to SSH!
==> alicloud-ecs: Provisioning with shell script: /var/folders/3q/w38xx_js6cl6k5mwkrqsnw7w0000gn/T/packer-shell257466182
    alicloud-ecs: Loaded plugins: fastestmirror
    alicloud-ecs: Determining fastest mirrors
    alicloud-ecs: Resolving Dependencies
    alicloud-ecs: --> Running transaction check
    alicloud-ecs: ---> Package redis.x86_64 0:3.2.10-2.el7 will be installed
    alicloud-ecs: --> Processing Dependency: libjemalloc.so.1()(64bit) for package: redis-3.2.10-2.el7.x86_64
    alicloud-ecs: --> Running transaction check
    alicloud-ecs: ---> Package jemalloc.x86_64 0:3.6.0-1.el7 will be installed
    alicloud-ecs: --> Finished Dependency Resolution
    alicloud-ecs:
    alicloud-ecs: Dependencies Resolved
    alicloud-ecs:
    alicloud-ecs: ================================================================================
    alicloud-ecs: Package           Arch            Version                  Repository     Size
    alicloud-ecs: ================================================================================
    alicloud-ecs: Installing:
    alicloud-ecs: redis             x86_64          3.2.10-2.el7             epel          545 k
    alicloud-ecs: Installing for dependencies:
    alicloud-ecs: jemalloc          x86_64          3.6.0-1.el7              epel          105 k
    alicloud-ecs:
    alicloud-ecs: Transaction Summary
    alicloud-ecs: ================================================================================
    alicloud-ecs: Install  1 Package (+1 Dependent package)
    alicloud-ecs:
    alicloud-ecs: Total download size: 650 k
    alicloud-ecs: Installed size: 1.7 M
    alicloud-ecs: Downloading packages:
    alicloud-ecs: --------------------------------------------------------------------------------
    alicloud-ecs: Total                                              1.3 MB/s | 650 kB  00:00
    alicloud-ecs: Running transaction check
    alicloud-ecs: Running transaction test
    alicloud-ecs: Transaction test succeeded
    alicloud-ecs: Running transaction
    alicloud-ecs: Installing : jemalloc-3.6.0-1.el7.x86_64                                  1/2
    alicloud-ecs: Installing : redis-3.2.10-2.el7.x86_64                                    2/2
    alicloud-ecs: Verifying  : redis-3.2.10-2.el7.x86_64                                    1/2
    alicloud-ecs: Verifying  : jemalloc-3.6.0-1.el7.x86_64                                  2/2
    alicloud-ecs:
    alicloud-ecs: Installed:
    alicloud-ecs: redis.x86_64 0:3.2.10-2.el7
    alicloud-ecs:
    alicloud-ecs: Dependency Installed:
    alicloud-ecs: jemalloc.x86_64 0:3.6.0-1.el7
    alicloud-ecs:
    alicloud-ecs: Complete!
==> alicloud-ecs: Start delete alicloud image snapshots
==> alicloud-ecs: Creating alicloud images: packer_basic
    alicloud-ecs: Detach keypair packer_59e44f40-c8d6-0ee3-7fd8-b1ba08ea94b8 from instance: i-2zefhslbbsg76l3g5bf9
==> alicloud-ecs: Clean the created EIP
==> alicloud-ecs: Clean the created instance
==> alicloud-ecs: Clean the created security group
==> alicloud-ecs: Clean the created vSwitch
==> alicloud-ecs: Clean the created VPC
==> 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

执行完成后,就可以在自定义镜像列表中刚才创建的包含了安装好redis的自定义镜像了。基于这个镜像就可以创建包含redis应用的ECS实例。更多的参考可以访问阿里云官方插件仓库和 Packer 官方文档

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
16天前
|
Java Maven
IDEA Maven 源修改为国内阿里云镜像的正确方式, 2023 年更新,亲测可用
IDEA Maven 源修改为国内阿里云镜像的正确方式, 2023 年更新,亲测可用
|
2月前
|
弹性计算 固态存储 大数据
阿里云Alibaba Cloud Linux镜像操作系统介绍及常见问题解答FAQ,附2023阿里云服务器价格表
阿里云服务器操作系统Alibaba Cloud Linux镜像怎么样?可以代替CentOS吗?Alibaba Cloud Linux兼容性如何?有人维护吗?漏洞可以修复吗?Alibaba Cloud Linux完全兼容CentOS,并由阿里云官方免费提供长期维护。
|
2月前
|
弹性计算 固态存储 数据可视化
阿里云镜像是什么?镜像怎么选择合适?附2023年阿里云服务器价格表
阿里云服务器镜像就是云服务器的装机盘,镜像是为云服务器安装操作系统的。阿里云镜像分为类型分为公共镜像、自定义镜像、共享镜像、云市场镜像和社区镜像,如下图:阿里云服务器网来详细说下什么是镜像以及镜像种类说明:
|
2月前
|
弹性计算 安全 云计算
个人关于阿里云ECS镜像的使用体验分享
众所周知,阿里云ECS镜像被广泛应用于云计算领域,为亿万用户提供了快捷、高效的云端服务。在使用过程中,我不仅享受到了诸如高速、安全、免费等等优势,也遇到了一些问题。那么接下来本文就来简单的分享一下个人的体验分享,从吐槽、建议、鼓励三个方面简单谈一下个人对阿里云ECS镜像的使用感受和看法。
102 1
个人关于阿里云ECS镜像的使用体验分享
|
2月前
|
机器学习/深度学习 人工智能 Cloud Native
阿里云 ACR 制品中心 7 月上新镜像推荐榜
阿里云 ACR 制品中心 7 月上新镜像推荐榜
|
3月前
|
Java Maven
Idea配置Maven阿里云镜像加速
如果没有安装过maven,是用的idea自带的maven,那就是idea的安装目录下 /plugins/maven/lib/maven3这个目录。
512 0
|
3月前
|
Docker 容器
windows10 docker配置阿里云镜像服务加速
首先需要进入阿里云,搜容器镜像服务即可找到如下页面,前题先注册登录。
96 0
|
3月前
|
应用服务中间件 Linux Docker
Docker安装Tomcat 外网访问Tomact 阿里云镜像仓库
Docker安装Tomcat 外网访问Tomact 阿里云镜像仓库
112 0
|
3月前
|
安全 数据安全/隐私保护 Docker
docker<应用分享> 发布镜像到阿里云、从阿里云拉取镜像
之前博文讲过了如何把docker的镜像上传到dockerhub,以及从dockerhub下载镜像操作
|
4月前
|
Docker 容器
使用阿里云 docker 镜像加速
1.创建docker daemon.json 2.添加docker镜像加速地址 3.重启守护进程
489 1
相关产品
云服务器 ECS
轻量应用服务器
弹性容器实例
推荐文章
更多