云原生打包工具:Buildpacks
Buildpacks 介绍
Buildpacks 起源
Buildpacks 项目最早是由 Heroku 在 2011 年发起, 被以 Cloud Foundry 为代表的 PaaS 平台广泛采用。Buildpacks 不足的是产出包是 Droplet 格式, 不能直接适配容器平台。
在 2018 年 1 月, Pivotal 和 Heroku 发起了一个项目 Cloud Native Buildpacks(简称, CNB) , 并在同年十月份加入 CNCF 。
什么是 Buildpacks
Buildpacks 的目标是实现统一的应用打包生态系统。支持广泛的编程语言,支持各种 cicd 工具,支持各种扩展插件。
Buildpacks 优点
不需要写 Dockerfile
打包成镜像只需要一行命令
支持多语言
可以把注意力集中再代码逻辑上
容器镜像的安全性由 builder 处理
Buildpacks 执行简单
要使用 buildpacks 需要安装[docker]与[pack 命令]
下面代码是个 java 的例子,在 shell 中执行以下命令可以构建一个简单的 java 程序镜像,程序的构建无需安装 JDK、运行 Maven 或其他构建环境。buildpacks 会为我们处理好这些。
Buildpacks 的主要组成部分
主要有两部分组成 builder 和 buildpack。builder 是执行构建的运行镜像, buildpack 是构建的工作单元。
1. builder
builder 包含了构建所需要的所有组件和运行环境的镜像。一般使用官方提供的 builder 就可以满足大部分编译场景,如果有特殊需要 builder 也可以自己生成。
通过编写 builder.toml 文件,配置 基础镜像(build image + run image)、build 执行周期(lifecycle)、 构建工作单元(buildpack) 可以构建一个 builder 镜像。
官方提供了几种可以直接使用的 builder:
2. buildpack
buildpack 包含了一系列构建步骤。一般包括 检查程序源代码、构建代码、生成镜像等。
例如官网建议的 builder:"heroku/buildpacks:18" 中提供了多达 9 种语言的 buildpack
标准的 buildpack 至少由三个文件组成:
buildpack.toml - 提供关于 buildpack 的元数据信息
bin/detect - 根据源代码按顺序检查多个 buildpack,找到适合的 buildpack。例如:java maven 项目会查找是否有 pom 文件,Go 项目会查找 go.mod 等其他 Go 源文件
bin/build - 打包构建逻辑,添加依赖,最终生成镜像。
Buildpacks 的基本操作
1. build
针对程序源代码,执行一个或多个 buildpack 生成可运行的镜像。
2. rebase
rebase 允许应用程序开发人员在 run image 发生更改时快速更新镜像。通过使用 rebase,此命令避免了完全重建程序。
$ pack rebase newer-run-image
buildpacks 与其他打包工具的对比
buildpacks 支持大部分功能,包括:缓存、源代码检测、插件化、支持 rebase、重用、cicd 多种生态。
版权声明: 本文为 InfoQ 作者【QiyihaoLabs】的原创文章。
原文链接:【http://xie.infoq.cn/article/8f254330bc5e1dd6555856f44】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论