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

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 阿里云中的每个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
目录
相关文章
|
1月前
|
弹性计算 数据安全/隐私保护
【阿里云服务器镜像】雾锁王国(Enshrouded)自动部署教程
本文将为您提供极简部署雾锁王国服务器的指引,「仅需轻点三次鼠标,即可完成开服」,和自己的朋友一起畅玩雾锁王国。雾锁王国(Enshrouded)作为一款热门多人在线游戏,为了给玩家提供稳定、流畅的联机体验,阿里云提供了高效便捷的快速部署解决方案,本文将为大家分享阿里云一键部署雾锁王国联机服务器详细教程。
 【阿里云服务器镜像】雾锁王国(Enshrouded)自动部署教程
|
1月前
|
搜索推荐 机器人 开发工具
5 天学会阿里云 RPA:自定义组件
机器人流程自动化(RPA)技术在各个行业都取得了显著的成就,阿里云 RPA 作为其中的佼佼者,为用户提供了一种高效、灵活的自动化解决方案。除了内置的组件和功能,阿里云 RPA 还支持自定义组件的开发,使得用户能够根据自己的需求和业务流程进行个性化的定制。
|
2月前
|
JSON 安全 Serverless
在使用阿里云函数计算(FC)服务时,您可以通过自定义域名来访问部署好的云函数
在使用阿里云函数计算(FC)服务时,您可以通过自定义域名来访问部署好的云函数【1月更文挑战第23天】【1月更文挑战第112篇】
212 7
|
1月前
|
Kubernetes 持续交付 容器
云效代码仓库问题之链接获取如何解决
云效镜像是指存储在阿里云效服务中的容器镜像,它们可以用于持续集成和持续部署(CI/CD)流程中;本合集将介绍如何在云效平台上管理和使用镜像资源,以及常见的镜像问题和解决办法。
75 0
云效代码仓库问题之链接获取如何解决
|
22天前
|
存储 弹性计算 Linux
阿里云ECS(CentOS镜像)安装docker
阿里云ECS(CentOS镜像)安装docker
306 0
|
1月前
|
弹性计算 Linux 数据中心
阿里云服务器镜像是什么?如何选择镜像?
阿里云服务器镜像是什么?如何选择镜像?阿里云服务器镜像是云服务器的装机盘,镜像是为云服务器安装操作系统的。云服务器镜像系统怎么选择?云服务器操作系统镜像分为Linux和Windows两大类,Linux可以选择Alibaba Cloud Linux,Windows可以选择Windows Server 2022数据中心版64位中文版。阿里云百科分享什么是镜像以及云服务器镜像系统的选择方法
|
1月前
|
弹性计算 运维 安全
阿里云服务器linux和windows镜像有啥区别?
阿里云服务器linux和windows镜像有啥区别?阿里云服务器镜像Windows和Linux操作系统有什么区别?性能有差异吗?有,同配置下Linux性能要优于Windows,但这与阿里云无关,仅仅是linux和windows之间的区别。另外,阿里云提供的windows和linux操作系统均为正版授权,用户不需要额外支付许可费用,如何选择?看用户自己的应用程序情况
|
1月前
|
弹性计算 运维 安全
阿里云服务器镜像怎么选?Linux和Windows有啥区别?
阿里云服务器镜像怎么选?Linux和Windows有啥区别?阿里云服务器镜像Windows和Linux操作系统有什么区别?性能有差异吗?有,同配置下Linux性能要优于Windows,但这与阿里云无关,仅仅是linux和windows之间的区别。另外,阿里云提供的windows和linux操作系统均为正版授权,用户不需要额外支付许可费用,如何选择?看用户自己的应用程序情况
49 0
|
2月前
|
人工智能 大数据 Anolis
龙蜥多款镜像登陆阿里云 ACR 制品中心 AI /大数据镜像专场推荐榜
龙蜥社区作为 ACR 制品中心的重要合作伙伴,持续贡献丰富、安全、便捷、稳定的容器镜像,所贡献的镜像连续上榜 ACR 制品中心!
|
2月前
|
消息中间件 SQL Java
阿里云Flink-自定义kafka sink partitioner实践及相关踩坑记录
阿里云Flink-自定义kafka sink partitioner实践及相关踩坑记录

相关产品

  • 云服务器 ECS
  • 轻量应用服务器
  • 弹性容器实例