第 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
。
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 build 参数。构建参数将在构建启动时传递给 docker。
请参阅 Dockerfile 参考文档中的 ARG 和 FROM 如何交互。
流程
要设置 docker 构建参数,请在 buildArgs
中添加条目,它位于 BuildConfig
对象的 dockerStrategy
定义中。例如:
dockerStrategy: ... buildArgs: - name: "foo" value: "bar"
只支持 name
和 value
字段。valueFrom
字段上的任何设置都会被忽略。
5.1.5. 使用 docker 构建的 Squash 层
通常,Docker 构建会为 Dockerfile 中的每条指令都创建一个层。将 imageOptimizationPolicy
设置为 SkipLayers
,可将所有指令合并到基础镜像顶部的单个层中。
流程
将
imageOptimizationPolicy
设置为SkipLayers
:strategy: dockerStrategy: imageOptimizationPolicy: SkipLayers
5.1.6. 使用构建卷
您可以挂载构建卷,为运行的构建授予您不想在输出容器镜像中保留的信息的访问权限。
构建卷提供仅在构建时需要的敏感信息,如存储库凭据。构建卷与构建输入不同,后者的数据可以保留在输出容器镜像中。
构建卷的挂载点(运行中的构建从中读取数据)在功能上与 pod 卷挂载 类似。
流程
在
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 - name: my-csi-volume 9 mounts: - destinationPath: /opt/app-root/src/some_path 10 source: type: CSI 11 csi: driver: csi.sharedresource.openshift.io 12 readOnly: true 13 volumeAttributes: 14 attribute: value
共享资源 CSI 驱动程序作为技术预览提供。