第 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"
    Copy to Clipboard Toggle word wrap

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
    Copy to Clipboard Toggle word wrap

5.1.3. 使用 Docker 环境变量

要将环境变量提供给 docker 构建过程和生成的镜像使用,您可以在构建配置的 dockerStrategy 定义中添加环境变量。

这里定义的环境变量作为单个 ENV Dockerfile 指令直接插入到 FROM 指令后,以便稍后可在 Dockerfile 内引用该变量。

变量在构建期间定义并保留在输出镜像中,因此它们也会出现在运行该镜像的任何容器中。

例如,定义要在构建和运行时使用的自定义 HTTP 代理:

dockerStrategy:
...
  env:
    - name: "HTTP_PROXY"
      value: "http://myproxy.net:5187/"
Copy to Clipboard Toggle word wrap

您还可以使用 oc set env 命令管理构建配置中定义的环境变量。

5.1.4. 添加 Docker 构建参数

您可以使用 buildArgs 数组来设置 Docker 构建参数。构建参数将在构建启动时传递给 Docker。

提示

请参阅 Dockerfile 参考文档中的 ARG 和 FROM 如何交互

流程

  • 要设置 Docker 构建参数,请在 buildArgs 中添加条目,它位于 BuildConfig 对象的 dockerStrategy 定义中。例如:

    dockerStrategy:
    ...
      buildArgs:
        - name: "version"
          value: "latest"
    Copy to Clipboard Toggle word wrap
    注意

    只支持 namevalue 字段。valueFrom 字段上的任何设置都会被忽略。

5.1.5. 使用 docker 构建的 Squash 层

通常,Docker 构建会为 Dockerfile 中的每条指令都创建一个层。将 imageOptimizationPolicy 设置为 SkipLayers,可将所有指令合并到基础镜像顶部的单个层中。

流程

  • imageOptimizationPolicy 设置为 SkipLayers

    strategy:
      dockerStrategy:
        imageOptimizationPolicy: SkipLayers
    Copy to Clipboard Toggle word wrap

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: my-csi-volume
            mounts:
            - destinationPath: /opt/app-root/src/some_path
            source:
              type: CSI
              csi:
                driver: csi.sharedresource.openshift.io
                readOnly: true
                volumeAttributes:
                  attribute: value
    Copy to Clipboard Toggle word wrap

    其中:

    name
    指定一个唯一名称。
    destinationPath
    指定挂载点的绝对路径。它不能包含 .. 或 : 且不与构建器生成的目的地路径冲突。/opt/app-root/src 是许多支持 Red Hat S2I 的镜像的默认主目录。
    type
    指定源类型,ConfigMapSecretCSI
    secretName
    指定源的名称。
    driver
    指定提供临时 CSI 卷的驱动程序。
    readOnly
    指定提供只读卷。这个值必须设为 true
    volumeAttributes
    (可选)指定临时 CSI 卷的卷属性。如需支持的属性键和值,请参阅 CSI 驱动程序的文档。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat