写点什么

云原生打包工具:Buildpacks

用户头像
QiyihaoLabs
关注
发布于: 2021 年 07 月 06 日
云原生打包工具: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 会为我们处理好这些。

# clone the repogit clone https://github.com/buildpacks/samples
# go to the app directorycd samples/apps/java-maven
# build the apppack build myapp --builder cnbs/sample-builder:bionic
复制代码

Buildpacks 的主要组成部分

主要有两部分组成 builder 和 buildpack。builder 是执行构建的运行镜像, buildpack 是构建的工作单元。

1. builder

builder 包含了构建所需要的所有组件和运行环境的镜像。一般使用官方提供的 builder 就可以满足大部分编译场景,如果有特殊需要 builder 也可以自己生成。

通过编写 builder.toml 文件,配置 基础镜像(build image + run image)、build 执行周期(lifecycle)、 构建工作单元(buildpack) 可以构建一个 builder 镜像。



官方提供了几种可以直接使用的 builder:


Suggested builders:        Google:                gcr.io/buildpacks/builder:v1      Ubuntu 18 base image with buildpacks for .NET, Go, Java, Node.js, and Python                      Heroku:                heroku/buildpacks:18              heroku-18 base image with buildpacks for Ruby, Java, Node.js, Python, Golang, & PHP               Heroku:                heroku/buildpacks:20              heroku-20 base image with buildpacks for Ruby, Java, Node.js, Python, Golang, & PHP               Paketo Buildpacks:     paketobuildpacks/builder:base     Small base image with buildpacks for Java, Node.js, Golang, & .NET Core                           Paketo Buildpacks:     paketobuildpacks/builder:full     Larger base image with buildpacks for Java, Node.js, Golang, .NET Core, & PHP                     Paketo Buildpacks:     paketobuildpacks/builder:tiny     Tiny base image (bionic build image, distroless run image) with buildpacks for Golang
复制代码

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 多种生态。



发布于: 2021 年 07 月 06 日阅读数: 19
用户头像

QiyihaoLabs

关注

还未添加个人签名 2020.01.21 加入

还未添加个人简介

评论

发布
暂无评论
云原生打包工具:Buildpacks