Packer 入门:自动化镜像构建工具

文章目录

Packer 是 HashiCorp 开源的自动化镜像构建工具,GitHub 星标超过 1.1 万。它能从一个配置文件自动在各个平台构建虚拟机镜像、容器镜像,一次配置多处能用,一致性有保证,现在做基础设施即代码经常和 Terraform 搭配用。

我用 Packer 打过 AWS AMI 镜像,确实比自己手动装软件拍快照靠谱,一模一样的配置每次打出来都一样,不会这次漏装依赖下次又错。今天聊聊它好用在哪。

Packer 解决了什么问题

以前做虚拟机镜像,你启动个虚拟机,手动装软件配环境,然后拍个快照当镜像,这过程太麻烦,下次更个新软件还得重来一遍。多平台还要给 AWS、Azure、GCP 各做一个,手动做三遍,出来镜像容易不一样,出问题都找不到。

Packer 用配置文件描述你要装什么软件怎么配,一条命令自动在各个平台帮你把镜像做好,全程不用手动点,一致性保证。镜像每次都是从零构建,不会留历史垃圾,干净得很。和 Terraform 配合,Packer 打镜像,Terraform 开机器,基础设施全代码化。

基础例子看一下

安装 Packer,下载二进制就能用:

bash 复制代码
wget https://releases.hashicorp.com/packer/1.9.0/packer_1.9.0_linux_amd64.zip
unzip packer_1.9.0_linux_amd64.zip
mv packer /usr/local/bin/

写个简单配置,构建一个 AWS AMI 镜像,装个 Nginx:

hcl 复制代码
source "amazon-ebs" "nginx" {
  ami_name      = "nginx-{{timestamp}}"
  instance_type = "t2.micro"
  region        = "us-east-1"
  source_ami_filter {
    most_recent = true
    owners      = ["amazon"]
    filter {
      name   = "name"
      values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
    }
  }
}

build {
  sources = ["source.amazon-ebs.nginx"]

  provisioner "shell" {
    inline = [
      "apt-get update",
      "apt-get install -y nginx",
    ]
  }
}

格式化配置:

bash 复制代码
packer fmt .

验证配置:

bash 复制代码
packer validate .

开始构建:

bash 复制代码
packer build .

等一会,Packer 自动启动实例、装 Nginx、做成 AMI 就好了,整个过程不用你管。做好之后直接用这个 AMI 开实例,Nginx 已经装好了。

核心特性

多平台支持

AWS、Azure、GCP、阿里云、Docker、VMware、Qemu 全都支持,一份配置同时打多个平台的镜像,不用每个平台各做一遍。

基础设施即代码

镜像配置写代码,存在 Git 里,版本管理,改了什么一目了然,谁改的什么时候改的,全知道。

预制软件

镜像里提前装好软件和依赖,实例启动就能用,不用启动再拉代码装依赖,启动快,部署时间短。

可重复一致

每次构建都是从零开始,按配置一步步来,保证每次出来的镜像一模一样,不会有差异,再也不会说"我这跑没问题啊"。

多种部署方式

shell、ansible、chef、puppet 都支持,你已经有配置脚本了直接用,不用重新写。

哪些场景用 Packer

提前做应用镜像,实例启动就带应用代码和依赖,启动快,适合弹性伸缩秒级扩缩容。多平台镜像构建,一份配置同时做 AWS、Azure、Docker 镜像,保证各个平台一致。

黄金镜像实践,公司内部做一个标准基础镜像,所有人都用这个,安全补丁提前打好,统一环境,减少差异。配合 Terraform,Packer 打镜像,Terraform 部署,全流程代码化。

Packer 有哪些优缺点

优点就是自动化,配置写好一次构建成功,后面一直用,省好多手动操作时间,一致性有保证。多平台支持好,主流平台全覆盖,不用换工具。HashiCorp 产品,和 Vagrant、Terraform 这些搭配无缝,生态好。文档清楚,跟着例子走一遍就能用。

缺点呢,第一次写配置得熟悉各个平台的参数,错了构建失败得重来,不过也不难。大镜像构建时间长,这也正常,毕竟从零开始装,反正是自动跑,不用你盯着。如果只是打个小容器镜像,直接 Dockerfile 够了,Packer 更适合虚拟机镜像。

现在 Packer 发展得怎么样

一直是 HashiCorp 维护,版本更新稳定,用户群体也稳定,现在做基础设施即代码的团队基本都会配着 Terraform 用,功能没啥大问题,一直慢慢更新。

现在学 Packer 值得吗

做运维做云原生开发,肯定值得学,你用 Terraform 做基础设施,用 Packer 做镜像刚好,全流程代码化,比手动做靠谱多了。

学起来不难,配置语法和 Terraform 一样都是 HCL,会 Terraform 看一眼就会写,常用功能半天就能摸清楚。打镜像这种事一次配置好之后一直用,投入一次省你无数时间,绝对值得学。

项目地址:https://github.com/hashicorp/packer

一样都是 HCL,会 Terraform 看一眼就会写,常用功能半天就能摸清楚。打镜像这种事一次配置好之后一直用,投入一次省你无数时间,绝对值得学。

项目地址:https://github.com/hashicorp/packer

相关推荐
苦逼大学生被编程薄纱1 小时前
Ext 文件系统基础:Linux 存储基石入门(下)
linux·运维·服务器
Lumos_7771 小时前
Linux -- 进程
linux·运维·服务器
李白你好2 小时前
RedTeam-Agent无需手动操作,AI 接管所有渗透工具,让安全测试真正自动化
运维·人工智能·自动化
小此方2 小时前
Re:Linux系统篇(五)指令篇 ·四:shell外壳程序及其工作原理
linux·运维·服务器
其实防守也摸鱼3 小时前
sqlmap下载和安装保姆级教程(附安装包)
linux·运维·服务器·测试工具·渗透测试·攻防·护网行动
jingyu飞鸟3 小时前
Linux系统发送邮件,解决信誉等级低问题 docker compose修改启动一键使用
linux·运维·docker
Lumos_7773 小时前
Linux -- exec 进程替换
linux·运维·chrome
李白客3 小时前
国产数据库选型指南:从技术路线到实战要点
运维·数据库·数据库架构·迁移学习
Gerardisite3 小时前
企微机器人开发指南
java·python·机器人·自动化·企业微信