第 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/Dockerfile5.1.3. 使用 Docker 环境变量
要将环境变量提供给 Docker 构建过程和生成的镜像使用,您可以在 BuildConfig 的 dockerStrategy 定义中添加环境变量。
这里定义的环境变量作为单个 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 中添加条目,它位于 BuildConfig 的 dockerStrategy 定义中。例如:
dockerStrategy:
...
buildArgs:
- name: "foo"
value: "bar"