第 5 章 使用构建策略

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

5.1. Docker 构建

Docker 构建策略调用 docker build 命令,它需要一个含有 Dockerfile 的存储库并且其中包含所有必要的工件,从而能生成可运行的镜像。

5.1.1. 替换 Dockerfile FROM 镜像

您可以将 Dockerfile 中的 FROM 指令替换为 BuildConfig 中的 from。如果 Dockerfile 使用多阶段构建,最后一个 FROM 指令中的镜像将被替换。

流程

Dockerfile 中的 FROM 指令替换为 BuildConfig 中的 from

strategy:
  dockerStrategy:
    from:
      kind: "ImageStreamTag"
      name: "debian:latest"

5.1.2. 使用 Dockerfile 路径

默认情况下,Docker 构建使用位于 BuildConfig.spec.source.contextDir 字段中指定的上下文的根目录的 Dockerfile(名为 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 构建过程和生成的镜像使用,您可以在 BuildConfigdockerStrategy 定义中添加环境变量。

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

流程

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

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

dockerStrategy:
...
  env:
    - name: "HTTP_PROXY"
      value: "http://myproxy.net:5187/"

集群管理员还可以使用 Ansible 配置全局构建设置。

您也可以使用 oc set env 命令管理 BuildConfig 中定义的环境变量。

5.1.4. 添加 Docker 构建参数

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

流程

要设置 Docker 构建参数,请在 BuildArgs 中添加条目,它位于 BuildConfigdockerStrategy 定义中。例如:

dockerStrategy:
...
  buildArgs:
    - name: "foo"
      value: "bar"