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

本文涉及的产品
轻量应用服务器 2vCPU 4GiB,适用于搭建Web应用/小程序
轻量应用服务器 2vCPU 1GiB,适用于搭建电商独立站
轻量应用服务器 2vCPU 4GiB,适用于网站搭建
简介: 阿里云中的每个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
分享
相关文章
Harbor高可用集群设计及部署(基于离线安装方式一)
基于Harbor离线安装方式的高可用方案设计及部署。
644 0
5 分钟了解 Kubernetes Ingress 和 Gateway API
5 分钟了解 Kubernetes Ingress 和 Gateway API
1080 0
SLS机器学习最佳实战:根因分析(一)
通过算法,快速定位到某个宏观异常在微观粒度的具体表现形式,能够更好的帮助运营同学和运维同学分析大量异常,降低问题定位的时间。
13005 0
基础设施即代码(IaC):自动化基础设施管理的未来
基础设施即代码(IaC):自动化基础设施管理的未来
317 0
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
函数计算产品使用问题之如何将Gitee上的Vue项目部署到SF(Serverless Framework)上
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
107 0
vue项目引入阿里巴巴矢量图标库图标及其使用教程
vue项目引入阿里巴巴矢量图标库图标及其使用教程
2798 0

热门文章

最新文章

AI助理

你好,我是AI助理

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