第 5 章 使用构建策略
以下小节定义了受支持的主要构建策略,以及它们的使用方法。
5.1. Docker 构建 复制链接链接已复制到粘贴板!
OpenShift Container Platform 使用 Buildah 从 Dockerfile 构建容器镜像。有关使用 Dockerfile 构建容器镜像的更多信息,请参阅 Dockerfile 参考文档。
如果使用 buildArgs
数组设置 Docker 构建参数,请参阅 Dockerfile 参考文档中了解 ARG 和 FROM 如何交互。
5.1.1. 替换 Dockerfile FROM 镜像 复制链接链接已复制到粘贴板!
您可以将 Dockerfile 的 FROM
指令替换为 BuildConfig
对象的 from
参数。如果 Dockerfile 使用多阶段构建,最后一个 FROM
指令中的镜像将被替换。
流程
要将 Dockerfile 的
FROM
指令替换为BuildConfig
对象的from
参数,请在BuildConfig
对象中添加以下设置:strategy: dockerStrategy: from: kind: "ImageStreamTag" name: "debian:latest"
strategy: dockerStrategy: from: kind: "ImageStreamTag" name: "debian:latest"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.2. 使用 Dockerfile 路径 复制链接链接已复制到粘贴板!
默认情况下,docker 构建使用位于 BuildConfig.spec.source.contextDir
字段中指定的上下文的根目录下的 Dockerfile。
dockerfilePath
字段允许构建使用不同的路径来定位 Dockerfile,该路径相对于 BuildConfig.spec.source.contextDir
字段。它可以是不同于默认 Dockerfile 的其他文件名,如 MyDockerfile
,也可以是子目录中 Dockerfile 的路径,如 dockerfiles/app1/Dockerfile
。
流程
设置构建的
dockerfilePath
字段,以使用不同的路径来定位 Dockerfile:strategy: dockerStrategy: dockerfilePath: dockerfiles/app1/Dockerfile
strategy: dockerStrategy: dockerfilePath: dockerfiles/app1/Dockerfile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.3. 使用 Docker 环境变量 复制链接链接已复制到粘贴板!
要将环境变量提供给 docker 构建过程和生成的镜像使用,您可以在构建配置的 dockerStrategy
定义中添加环境变量。
这里定义的环境变量作为单个 ENV
Dockerfile 指令直接插入到 FROM
指令后,以便稍后可在 Dockerfile 内引用该变量。
变量在构建期间定义并保留在输出镜像中,因此它们也会出现在运行该镜像的任何容器中。
例如,定义要在构建和运行时使用的自定义 HTTP 代理:
dockerStrategy: ... env: - name: "HTTP_PROXY" value: "http://myproxy.net:5187/"
dockerStrategy:
...
env:
- name: "HTTP_PROXY"
value: "http://myproxy.net:5187/"
您还可以使用 oc set env
命令管理构建配置中定义的环境变量。
5.1.4. 添加 Docker 构建参数 复制链接链接已复制到粘贴板!
您可以使用 buildArgs
数组来设置 Docker 构建参数。构建参数将在构建启动时传递给 Docker。
请参阅 Dockerfile 参考文档中的 ARG 和 FROM 如何交互。
流程
要设置 Docker 构建参数,请在
buildArgs
中添加条目,它位于BuildConfig
对象的dockerStrategy
定义中。例如:dockerStrategy: ... buildArgs: - name: "version" value: "latest"
dockerStrategy: ... buildArgs: - name: "version" value: "latest"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意只支持
name
和value
字段。valueFrom
字段上的任何设置都会被忽略。
5.1.5. 使用 docker 构建的 Squash 层 复制链接链接已复制到粘贴板!
通常,Docker 构建会为 Dockerfile 中的每条指令都创建一个层。将 imageOptimizationPolicy
设置为 SkipLayers
,可将所有指令合并到基础镜像顶部的单个层中。
流程
将
imageOptimizationPolicy
设置为SkipLayers
:strategy: dockerStrategy: imageOptimizationPolicy: SkipLayers
strategy: dockerStrategy: imageOptimizationPolicy: SkipLayers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.6. 使用构建卷 复制链接链接已复制到粘贴板!
您可以挂载构建卷,为运行的构建授予您不想在输出容器镜像中保留的信息的访问权限。
构建卷提供仅在构建时需要的敏感信息,如存储库凭据。构建卷与构建输入不同,后者的数据可以保留在输出容器镜像中。
构建卷的挂载点(运行中的构建从中读取数据)在功能上与 pod 卷挂载 类似。
先决条件
- 您已将输入 secret、配置映射或两者添加到 BuildConfig 对象中。
流程
在
BuildConfig
对象的dockerStrategy
定义中,将任何构建卷添加到volumes
数组中。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
name
- 指定一个唯一名称。
destinationPath
-
指定挂载点的绝对路径。它不能包含
.
. 或:
且不与构建器生成的目的地路径冲突。/opt/app-root/src
是许多支持 Red Hat S2I 的镜像的默认主目录。 type
-
指定源类型,
ConfigMap
、Secret
或CSI
。 secretName
- 指定源的名称。
driver
- 指定提供临时 CSI 卷的驱动程序。
readOnly
-
指定提供只读卷。这个值必须设为
true
。 volumeAttributes
- (可选)指定临时 CSI 卷的卷属性。如需支持的属性键和值,请参阅 CSI 驱动程序的文档。