6.3. 在 RHEL 容器工具中实现可重复生成的
RHEL 容器工具使用一组工具(如 Buildah、Podman 和 Skopeo)提供标准化的、无守护进程且可脚本化的工作流,以实现可重复性。这种方法可确保容器构建一次可在任何位置一致运行,解决与依赖项、环境和版本相关的潜在问题。
Buildah :
RHEL Buildah 通过对构建过程提供精细的控制来实现可重复生成的容器构建。它提供特定的选项来缓解非确定的inism 的源,如不稳定的标签、文件系统元数据和主机依赖的数据。用于可重复生成的构建的 Buildah 功能有:
修复了时间戳: Timestamps 导致主要不现性。默认情况下,文件创建和修改时间反映了当某人向容器层添加文件时,这绝不会有两次。Buildah 允许您将这些时间戳归零,或者将其设置为特定的固定值。
-
--rewrite-timestamp:此选项将层内容时间戳比-source-date-epoch晚于。另外,控制镜像创建的时间戳以及其层中文件的时间戳,主要用于实现确定性构建。 -
--source-date-epoch: 这个选项比 older-timestamp选项更灵活的选项,允许您为镜像层中的所有文件定义一个特定的、可重复生成的时间戳。它会影响镜像元数据中的创建和历史记录日期。您可以使用 CLI 标志、环境变量或 build-arg 来设置它。设置 标志后,环境中会公开声明的 ARG,用于RUN指令并获取静态主机名。另外,容器 ID 字段在提交的镜像中被清除。
-
Podman:
在面向用户的界面时,podman build 命令会将实际镜像创建委派给 Buildah 库。这意味着 Podman 通过使用与 Buildah 相同的核心功能实现可重复生成的容器构建,专注于控制构建过程中非确定的inism 的源。
Podman 命令还接受 --rewrite-timestamp 和- -source-date-epoch 选项。此外,--no-cache 选项指示 Podman 忽略其本地缓存并执行全新的构建。使用此选项有助于验证您的容器镜像可以从头开始可靠地删除。
skopeo:
Skopeo 通过引用不可变镜像摘要而不是可变标签来实现可重复生成的容器构建。Skopeo 主要传输和管理镜像,而 Buildah 等其他工具处理实际可重复生成的镜像创建。
使用 --source-date-epoch and --rewrite-timestamp 选项可以提高构建可重复性。但是,完全的可重复性无法保证。使用 COPY 指令的-- from 选项从其他镜像添加的内容,通过 RUN 指令的-- mount=from= 选项访问,或者使用 ADD 指令下载,如果您引用以后移动的镜像标签,或者如果指定 URL 中的内容发生了变化。