第 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"
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
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/"
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"
dockerStrategy:
...
  buildArgs:
    - name: "foo"
      value: "bar"
						只支持 name 和 value 字段。valueFrom 字段上的任何设置都会被忽略。
					
5.1.5. 使用 docker 构建的 Squash 层 复制链接链接已复制到粘贴板!
					通常,Docker 构建会为 Dockerfile 中的每条指令都创建一个层。将 imageOptimizationPolicy 设置为 SkipLayers,可将所有指令合并到基础镜像顶部的单个层中。
				
流程
将
imageOptimizationPolicy设置为SkipLayers:strategy: dockerStrategy: imageOptimizationPolicy: SkipLayersstrategy: dockerStrategy: imageOptimizationPolicy: SkipLayersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
5.1.6. 使用构建卷 复制链接链接已复制到粘贴板!
您可以挂载构建卷,为运行的构建授予您不想在输出容器镜像中保留的信息的访问权限。
构建卷提供仅在构建时需要的敏感信息,如存储库凭据。构建卷与构建输入不同,后者的数据可以保留在输出容器镜像中。
构建卷的挂载点(运行中的构建从中读取数据)在功能上与 pod 卷挂载 类似。
流程
在
BuildConfig对象的dockerStrategy定义中,将任何构建卷添加到volumes数组中。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
共享资源 CSI 驱动程序作为技术预览提供。