第 5 章 使用构建策略
以下小节定义了受支持的主要构建策略,以及它们的使用方法。
5.1. Docker 构建 复制链接链接已复制到粘贴板!
OpenShift Dedicated 使用 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"
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
5.1.3. 使用 Docker 环境变量 复制链接链接已复制到粘贴板!
要将环境变量提供给 docker 构建过程和生成的镜像使用,您可以在构建配置的 dockerStrategy 定义中添加环境变量。
这里定义的环境变量作为单个 ENV Dockerfile 指令直接插入到 FROM 指令后,以便稍后可在 Dockerfile 内引用该变量。
变量在构建期间定义并保留在输出镜像中,因此它们也会出现在运行该镜像的任何容器中。
例如,定义要在构建和运行时使用的自定义 HTTP 代理:
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"注意只支持
name和value字段。valueFrom字段上的任何设置都会被忽略。
5.1.5. 使用 docker 构建的 Squash 层 复制链接链接已复制到粘贴板!
通常,Docker 构建会为 Dockerfile 中的每条指令都创建一个层。将 imageOptimizationPolicy 设置为 SkipLayers,可将所有指令合并到基础镜像顶部的单个层中。
流程
将
imageOptimizationPolicy设置为SkipLayers:strategy: dockerStrategy: imageOptimizationPolicy: SkipLayers
5.1.6. 使用构建卷 复制链接链接已复制到粘贴板!
您可以挂载构建卷,为运行的构建授予您不想在输出容器镜像中保留的信息的访问权限。
构建卷提供仅在构建时需要的敏感信息,如存储库凭据。构建卷与构建输入不同,后者的数据可以保留在输出容器镜像中。
构建卷的挂载点(运行中的构建从中读取数据)在功能上与 pod 卷挂载 类似。
先决条件
- 您已将输入 secret、配置映射或两者添加到 BuildConfig 对象中。
流程
在
BuildConfig对象的dockerStrategy定义中,将任何构建卷添加到volumes数组中。例如:spec: dockerStrategy: volumes: - name: secret-mvn mounts: - destinationPath: /opt/app-root/src/.ssh source: type: Secret secret: secretName: my-secret - name: settings-mvn mounts: - destinationPath: /opt/app-root/src/.m2 source: type: ConfigMap configMap: name: my-config其中:
name- 指定一个唯一名称。
destinationPath-
指定挂载点的绝对路径。它不能包含
.. 或:且不与构建器生成的目的地路径冲突。/opt/app-root/src是许多支持 Red Hat S2I 的镜像的默认主目录。 type-
指定源类型,
ConfigMap、Secret或CSI。 secretName- 指定源的名称。