在介绍Packer之前,先来回顾一下未使用Packer时自定义虚拟机镜像的步骤。先在本地启动一个虚拟机,从安装系统开始,再进行自定义配置或应用安装,最后封装压缩成镜像,详细操作步骤可以参考我之前写的文档,制作Centos 7镜像:https://robin-2016.github.io/2019/04/08/制作openstack的centos7镜像/,制作Windows镜像:https://robin-2016.github.io/2019/04/23/制作openstack的windows-server-2016镜像/。还可以借助阿里云或华为云等公有云,可以直接运行一个虚拟机实例,再进行相关配置,最后导出镜像,使用公有云相比本地构建镜像节省了安装系统的时间,相关云配置也能减少,只需进行自定义相关配置。

不论在本地还是在云上构建虚拟机镜像,都需要很多手动操作步骤,而Packer就是为了构建镜像自动化,和Terraform一样都是HashiCorp公司出品,官网地址:https://www.packer.io/,在官网首页还提出了镜像即代码(Images as code)的概念,支持虚拟机和容器镜像构建,我体验了一下容器构建过程,相比dockerfile略显复杂难懂,推荐容器镜像还是写dockerfile,用Packer来构建虚拟机镜像,容器构建之前已经实现了自动化,虚拟机镜像构建还是手动操作,Packer能大大提高效率。下面进入实操演示。

Packer安装,参考官网:https://developer.hashicorp.com/packer/install,基本1-2条命令就能完成安装,示例配置文件代码仓库:https://github.com/robin-2016/terraform-demo,克隆后进行packer-demo目录下

先来看一下aws-demo.pkr.hcl配置文件内容结构,第一部分packer部分定义了使用的插件,这里使用的AWS云,AWS第一次注册使用有750小时免费使用计划(限定规格)。第二部分source部分定义了镜像来源,amazon-ebs标识是AWS的云硬盘,ami_name为最终生成的镜像名称,{{timestamp}}为时间戳变量,多次执行时镜像名称会因为执行时间不同而不同,不会名称冲突,instance_type为虚拟机实例规格,其实Packer底层原理还是创建了一个虚拟机实例,执行脚本命令,导出镜像,再删除虚拟机实例,Packer是把上面步骤自动化了,region为实例运行区域,ap-east-1是香港地区,source_ami为基础镜像ID,这里选择的公有Ubuntu Server 24镜像。第三部分build是定义构建过程,主要是shell部分,可以写脚本来安装配置应用程序,示例中是安装的redis程序。

packer {
required_plugins {
amazon = {
version = ">= 1.2.8"
source = "github.com/hashicorp/amazon"
}
}
} source "amazon-ebs" "ubuntu" {
ami_name = "aws-demo-ubuntu-{{timestamp}}"
instance_type = "t3.micro"
region = "ap-east-1"
source_ami = "ami-0ad7f83eab34d93a7"
ssh_username = "ubuntu"
} build {
name = "learn-packer"
sources = [
"source.amazon-ebs.ubuntu"
] provisioner "shell" {
environment_vars = [
"FOO=hello world",
]
inline = [
"echo Installing Redis",
"sleep 30",
"sudo apt-get update",
"sudo apt-get install -y redis-server",
"echo \"FOO is $FOO\" > example.txt",
]
}
}

在具体执行前先配置下面两个环境变量,AWS的AK和SK,Packer会读取环境变量就能有权限操作AWS了。

export AWS_ACCESS_KEY_ID="<YOUR_AWS_ACCESS_KEY_ID>"
export AWS_SECRET_ACCESS_KEY="<YOUR_AWS_SECRET_ACCESS_KEY>"

依次执行下面命令,就能完成镜像的构建了,先进行初始化,格式化和验证配置文件命令是可选的,最后进行镜像构建,操作看着和Terraform非常相似。

#初始化
packer init .
#格式化配置-可选
packer fmt .
#验证配置-可选
packer validate .
#构建镜像
packer build aws-demo.pkr.hcl

等待构建命令执行完成,镜像就构建完成了,可以登录进入到AWS的镜像服务,就能看到本次Packer构建的镜像了,演示完成后如不需要记得手动删除镜像。

本示例构建镜像过程耗时大约5分钟,相比之前手动操作效率提高不少,还可以把配置文件添加到代码仓库中,同代码一起进行版本管理,和Jenkins等工具结合,实现流水线构建镜像,AWS支持Windows镜像,需要使用Powershell脚本,参考官网文档:https://developer.hashicorp.com/packer/integrations/hashicorp/amazon/latest/components/builder/ebs#windows-2016-sysprep-commands-for-amazon-windows-amis-only

AWS支持并行构建多个镜像,参考官网文档:https://developer.hashicorp.com/packer/tutorials/aws-get-started/aws-get-started-parallel-builds

Packer官方供应商还支持阿里云、腾讯云和OpenStack,没有华为云,但在华为云自己的文档中有使用Packer构建镜像文档,参考链接:https://support.huaweicloud.com/bestpractice-ims/ims_bp_0031.html,在阿里云、腾讯云和华为云中没有看到对Windows镜像支持的文档,对比来看,还是AWS使用文档最详细。

Packer介绍和演示到此结束,如果对你有帮助,请点个关注,嘿嘿。

自动化构建镜像:Packer的更多相关文章

  1. docker学习笔记(2) 构建镜像

    一.手动构建一个简单镜像 我们以构建nginx的docker镜像为例:手动构建镜像 docker pull centos    安装基础镜像docker run --name mynginx -it ...

  2. SpringCloud+Docker+Jenkins+GitLab+Maven实现自动化构建与部署实战

    1.前言与初衷 本文章会涉及Docker常见命令基础知识点结合不同场景实操一起使用. 本文章会涉及结合工作过程中部署不同环境服务器的项目案例场景为初心进行实际细讲. 本文章主要讲述Docker.Jen ...

  3. 基于gulp 的前端自动化构建方案总结

    一,基础篇 先安装nodejs 使用淘宝镜像安装tnpm 安装 cnpm 插件:npm install -g cnpm --registry=https://registry.npm.taobao.o ...

  4. 前端自动化构建工具-yoman浅谈

    如今随着前端技术的飞速发展,前端项目也变得越来越复杂. 快速的搭建一个集成多种工具和框架的复杂前端项目也越来越成为一种需求. 当然如果你要自己从0开始完全自己diy,绝对可以,只不过需要耗费一些不少的 ...

  5. JavaScript自动化构建工具入门----grunt、gulp、webpack

    蛮荒时代的程序员: 做项目的时候,会有大量的js 大量的css   需要合并压缩,大量时间需要用到合并压缩 在前端开发中会出现很多重复性无意义的劳动  自动化时代的程序员: 希望一切都可以自动完成  ...

  6. 使用Docker搭建Jenkins+Docker持续集成环境(自动化构建发布部署)

    本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...

  7. 01_自动化构建工具之Maven

    目前技术中存在问题(为什么使用Maven): 一个项目就是一个工程: 缺陷:如果项目太过庞大,就不适合使用package来划分层次,最好是一个模块就是一个工程,利于分工协作. 解决:Maven可以将一 ...

  8. dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器

    # dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器 #环境centos 7.4 docker 18.03.0-ce # nuxus,创建maven本地源(可 ...

  9. 解放双手——Android的自动化构建及发布

    在一个App从开发到测试的过程中,我有很长一段时间都是这样做的:打包,上传到tower,在tower上编写本次更新说明,通知测试.一般情况下,打包及上传的过程大概也就2分钟.除此之外,由于项目代码有作 ...

  10. alfs学习笔记-自动化构建lfs系统

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一名linux爱好者,记录构建Linux From Scratch的过程 经博客园-骏马金龙前辈介绍,开始接触学习lfs,用博客 ...

随机推荐

  1. 6.2K star!推荐一款开源混沌工程测试平台:Chaos Mesh

    1.Chaos Mesh 介绍 Chaos Mesh是一个开源的混沌工程平台,旨在帮助用户在生产环境中测试.验证和优化其应用程序的可靠性和稳定性.通过引入故障注入和混沌工程原则,Chaos Mesh可 ...

  2. draw.io 输入数学公式

    首先我们要把数学排版功能打开: 然后输入数学公式: AsciiMath 公式由 ` 包裹,如:`a2+b2 = c^2` LaTeX 公式由 $$ 包裹,如:$$\sqrt{3×-1}+(1+x)^2 ...

  3. 解决使用filter: blur时图片四周泛白的问题

    发现问题 在使用filter: blur(15px)模糊背景图时,发现图片周围会泛白. 解决问题 查了好多办法: 1.使用StackBlur.js处理图片模糊. 2.改变background-size ...

  4. pyinstaller 打包成 exe

    生成 spec 和可执行文件: pyinstaller --onefile your_file.py 如果需要修改生成的spec文件,则后续可以这样运行: pyinstaller -F your_fi ...

  5. 全面掌握 Jest:从零开始的测试指南(上篇)

    随着JavaScript在前后端开发中的广泛应用,测试已成为保证代码质量的关键环节. 为什么需要单元测试 在我们的开发过程中,经常需要定义一些算法函数,例如将接口返回的数据转换成UI组件所需的格式.为 ...

  6. QT数据可视化框架编程实战之三维柱状图从入门到精通_补天云QT技术培训专家

    QT数据可视化框架编程实战之三维柱状图从入门到精通_补天云QT技术培训专家 简介 本文将介绍QT数据可视化框架(QT DataVisualization 模块)编程实战之三维柱状图(Q3DBars)的 ...

  7. 数据库周刊29│2020数据库研究报告;Oracle取消今年技术大会;腾讯云DBbridge发布支持一键迁库;饿了么迁至阿里云;PG数组查询;Oracle被比特币勒索;DM8 安全管理…

    摘要:墨天轮数据库周刊第29期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档.   热门资讯 1.快讯:2020年Oracle OOW大会因疫情取消 系近20年首度[摘要]Oracle ...

  8. 【首场重磅亮相】KaiwuDB 1.0 时序数据库线上发布会明日开启!邀您共同见证

    首场重磅亮相 KaiwuDB 是浪潮集团控股的数据库企业,以多模数据库为核心,面向工业物联网.数字能源.交通车联网.智慧城市.数字政务等多种场景,提供领先创新的数据服务软件. 新生代数据库,扬帆起航正 ...

  9. 32. vue框架的理解

    vue是创建用户界面的框架,是创建SPA应用的框架,采用了MVVM模型,是数据驱动视图 :使用了 业务逻辑和页面解构分离的开发思想 :使用 高效的diff算法渲染列表 :使用组件化开发,提高代码的复用 ...

  10. 使用Pydantic和SqlAlchemy实现树形列表数据(自引用表关系)的处理,以及递归方式处理数据差异

    在我的设计框架业务中,字典大类.部门机构.系统菜单等这些表,都存在id.pid的字段,主要是作为自引用关系,实现树形列表数据的处理的,因为这样可以实现无限层级的树形列表.在实际使用Pydantic和S ...