第 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
参数,请在BuildConfig
对象中添加以下设置:strategy: dockerStrategy: from: kind: "ImageStreamTag" name: "debian:latest"
strategy: dockerStrategy: from: kind: "ImageStreamTag" name: "debian:latest"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
strategy: dockerStrategy: dockerfilePath: dockerfiles/app1/Dockerfile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.3. 使用 Docker 环境变量 复制链接链接已复制到粘贴板!
要将环境变量提供给 docker 构建过程和生成的镜像使用,您可以在构建配置的 dockerStrategy
定义中添加环境变量。
这里定义的环境变量作为单个 ENV
Dockerfile 指令直接插入到 FROM
指令后,以便稍后可在 Dockerfile 内引用该变量。
变量在构建期间定义并保留在输出镜像中,因此它们也会出现在运行该镜像的任何容器中。
例如,定义要在构建和运行时使用的自定义 HTTP 代理:
dockerStrategy: ... env: - name: "HTTP_PROXY" value: "http://myproxy.net:5187/"
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"
dockerStrategy: ... buildArgs: - name: "version" value: "latest"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意只支持
name
和value
字段。valueFrom
字段上的任何设置都会被忽略。
5.1.5. 使用 docker 构建的 Squash 层 复制链接链接已复制到粘贴板!
通常,Docker 构建会为 Dockerfile 中的每条指令都创建一个层。将 imageOptimizationPolicy
设置为 SkipLayers
,可将所有指令合并到基础镜像顶部的单个层中。
流程
将
imageOptimizationPolicy
设置为SkipLayers
:strategy: dockerStrategy: imageOptimizationPolicy: SkipLayers
strategy: dockerStrategy: imageOptimizationPolicy: SkipLayers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.6. 使用构建卷 复制链接链接已复制到粘贴板!
您可以挂载构建卷,为运行的构建授予您不想在输出容器镜像中保留的信息的访问权限。
构建卷提供仅在构建时需要的敏感信息,如存储库凭据。构建卷与构建输入不同,后者的数据可以保留在输出容器镜像中。
构建卷的挂载点(运行中的构建从中读取数据)在功能上与 pod 卷挂载 类似。
先决条件
- 您已将输入 secret、配置映射或两者添加到 BuildConfig 对象中。
流程
在
BuildConfig
对象的dockerStrategy
定义中,将任何构建卷添加到volumes
数组中。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要共享资源 CSI 驱动程序只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
共享资源 CSI 驱动程序只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。