第 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 构建过程和生成的镜像使用,您可以在 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"