第 5 章 使用构建策略


以下小节定义了受支持的主要构建策略,以及它们的使用方法。

5.1. Docker 构建

Red Hat OpenShift Service on AWS 使用 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"
    注意

    只支持 namevalue 字段。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 1
            mounts:
            - destinationPath: /opt/app-root/src/.ssh 2
            source:
              type: Secret 3
              secret:
                secretName: my-secret 4
          - name: settings-mvn 5
            mounts:
            - destinationPath: /opt/app-root/src/.m2  6
            source:
              type: ConfigMap 7
              configMap:
                name: my-config 8
    1 5
    必需。唯一的名称。
    2 6
    必需。挂载点的绝对路径。它不能包含 .. 或 : 且不与构建器生成的目的地路径冲突。/opt/app-root/src 是许多支持 Red Hat S2I 的镜像的默认主目录。
    3 7
    必需。源类型,ConfigMapSecretCSI
    4 8
    必需。源的名称。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.