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

相关推荐
乘云数字DATABUFF11 小时前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--2 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森2 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜3 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB4 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode5 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220706 天前
如何搭建本地yum源(上)
运维
大树889 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠9 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质9 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务