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

本文涉及的产品
轻量应用服务器 2vCPU 4GiB,适用于网站搭建
轻量应用服务器 2vCPU 4GiB,适用于搭建Web应用/小程序
轻量应用服务器 2vCPU 1GiB,适用于搭建电商独立站
简介: 阿里云中的每个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
AI 代码解读

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"                                                                                                                                                                                                                                      
       ]                                                                                                                                                                                                                                                                    
     }]                                                                                                                                                                                                                                                                     
   } 
AI 代码解读

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
AI 代码解读

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

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
138
分享
相关文章
5 分钟了解 Kubernetes Ingress 和 Gateway API
5 分钟了解 Kubernetes Ingress 和 Gateway API
1043 0
国内独家|阿里云首发MongoDB 8.0,性能提升“快”人一步
阿里云作为MongoDB的最佳战略合作伙伴,在国内独家发布了8.0版本,支撑广大用户进一步提升业务效率。
基础设施即代码(IaC):自动化基础设施管理的未来
基础设施即代码(IaC):自动化基础设施管理的未来
300 0
【朱颜不曾改,芳菲万户香。AIGC人物图片创作---InsCode Stable Diffusion 美图活动一期】
【朱颜不曾改,芳菲万户香。AIGC人物图片创作---InsCode Stable Diffusion 美图活动一期】
821 2
一文掌握Redis集群实用运维工具redis-tool
redis-tool基于原生的redis-cli客户端工具来进行Redis集群的监控、配置、问题分析等运维管理,能够极大降低Redis cluster集群的运维成本。同时作为脚本化工具,下载即可用,即使对于Redis初学者,也能够快速掌握集群的运行状况,完成集群配置管理、性能问题排查,具备Redis集群的基本运维能力。
3105 0
一文掌握Redis集群实用运维工具redis-tool
vue项目引入阿里巴巴矢量图标库图标及其使用教程
vue项目引入阿里巴巴矢量图标库图标及其使用教程
2755 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问