使用云原生Buildpacks构建Docker镜像

Buildpacks简介

与Dockerfile相比,Buildpacks为构建应用程序提供了更高层次的抽象。具体来说,Buildpacks:

  • 提供一个平衡的控制,减少开发人员的操作负担,并支持企业运营商在规模上管理应用程序。
  • 确保应用程序满足安全性和法规遵从性要求,而无需开发人员干预。
  • 提供操作系统级和应用程序级依赖项升级的自动交付,有效地处理第二天的应用程序操作,这些操作通常很难用Dockerfile进行管理。
  • 依赖兼容性保证安全地应用补丁,而不必重建工件,也不必意外地更改应用程序行为。

Buildpacks是可插入的、模块化的工具,通过提供比Dockerfile更高级别的抽象,将源代码转换为容器就绪的构件。通过这样做,他们提供了一种控制的平衡,最小化了最初的生产时间,减少了开发者的操作负担,并支持大规模管理应用程序的企业运营商。

Cloud Native Buildpacks
2018年10月云原生Buildpacks项目加入CNCF沙箱

CNB流程分为四个步骤,每个步骤都有各自的重要目标,最终产出就是 OCI 镜像。CNB让开发和运维人员能够把创建各种软件的过程中所需的构建、补丁和重新打包的工作自动化成适合机器执行的重复任务。
使用云原生Buildpacks构建Docker镜像
检测:对源码以及其它内容进行检测,查找与其匹配的可用 Buildpacks。假设提供一套Go源文件,就会检测到Go Buildpack适用于这一输入。
分析:CNB 会在应用的生命周期中运行多次,在这一步骤里会对前一次的打包内容进行分析,分析过程会对文件的变更进行优化,从而减少构建时间和文件传输。这里会使用多个镜像层来对内容进行组织。
构建:如果镜像层或者目录需要进行替换,构建过程就会生成新的层。这里会提供缓存来加速构建过程。
导出:这个步骤中会生成最终镜像并推送到镜像仓库之中。传输、磁盘使用和更新时间都会用镜像层的更新操作来完成。另外 CVE 补丁也可以同时应用到多个镜像之中。

所以还等什么?现在开始使用Buildpacks尝尝鲜吧。

应用程序从源代码到镜像的短暂之旅

构建Go Web应用Docker镜像

使用pack和buildpacks从源代码创建可运行的应用程序镜像。这意味着需要确保安装了pack程序包,注意:pack只是Cloud Native Buildpacks平台规范的一个实现。

先决条件:
安装Docker
安装pack

构建一个app

将应用程序从源代码转换为可运行镜像的基础知识。
1.选择builder
2.构建app
3.运行app

环境变量
环境变量是在构建时配置各种构建包的常用方法。

指定构建包
指定构建过程中使用的构建包。

在我们开始之前,您需要了解buildpacks的基本知识以及它们是如何工作的。

buildpack的工作是收集应用程序构建和运行所需的所有信息,它通常会快速而安静地完成这项工作。

当平台针对您的应用程序的源代码依次测试buildpacks组时,就会发生自动检测。第一个认为自己适合您的源代码的组将成为应用程序选定的buildpacks。
检测标准对每个buildpack是特定的 -例如,一个Go buildpack可能会寻找Go的源文件。

创建buildpack

这是一个使用简单bash脚本创建云原生构建包的逐步教程。
设置本地环境

构建云原生Buildpack的块

检测应用程序:
下一步,您将需要实际检测您正在构建的应用程序是一个GO应用程序。为了做到这一点,你需要检查一个go.mod文件。

构建应用程序
使应用程序可运行

通过缓存提高性能:
我们可以通过缓存构建之间的依赖关系来提高性能,只在必要时重新下载。

使您的构建包可配置

打包buildpack

了解如何使用标准的OCI注册表打包buildpack以进行发布。
0.获取样本代码仓
1.创建package.toml:
我们需要创造一个package.toml文件,以便告诉pack在何处查找要打包的buildpack的依赖项。
2.指定您的构建包:
让我们从指定要打包的buildpack的位置开始。
3.指定依赖的构建包
4.打包您的构建包

什么是builder?

builder是一个镜像,它打包了有关如何构建应用程序的所有bits和信息,例如buildpacks和build-time镜像,
并针对应用程序源代码执行buildpacks。

构建Go应用程序

在shell中运行以下命令来克隆和构建一个简单的Go应用程序。

相关文章: