 OpenShift Container Platform 4.4 构建(build)构建(BUILD) 第 第 2 章 章 了解 了解构 构建配置 建配置 2.1. BUILDCONFIG 第 第 3 章 章 创 创建 建构 构建 建输 输入 入 3.1. 构建输入 3.2. DOCKERFILE 源 3.3. 镜像源 3.4. GIT 源 3.5. 二进制(本地)来源 3.6. 输入 SECRET 和配置映射 3.7. 外部工件 (ARTIFACT) 3.8. 将 DOCKER 此外,也可利用 Pipeline 构建策略来实现复杂的工作流: 持续集成 持续部署 1.1.1. Docker 构建 Docker 构建策略调用 docker build 命令,它需要一个含有 Dockerfile 的存储库并且其中包含所有必要的 工件,从而能生成可运行的镜像。 1.1.2. Source-to-Image (S2I) 构建 Source-to-Image (S2I) 是一种用于构建可重复生成的 可修补性 如果基础镜像因为安全问题而需要补丁,则 S2I 允许基于新的基础镜像重新构建应用程序。 操作效率 通过限制构建操作而不许随意进行 Dockerfile 允许的操作,PaaS 运维人员可以避免意外或故 意滥用构建系统。 操作安全性 构建任意 Dockerfile 会将主机系统暴露于 root 特权提升。因为整个 Docker 构建过程都通过具 备 Docker 特权的用户运行,这可能被恶意用户利用。S2I0 码力 | 101 页 | 1.12 MB | 1 年前3 OpenShift Container Platform 4.4 构建(build)构建(BUILD) 第 第 2 章 章 了解 了解构 构建配置 建配置 2.1. BUILDCONFIG 第 第 3 章 章 创 创建 建构 构建 建输 输入 入 3.1. 构建输入 3.2. DOCKERFILE 源 3.3. 镜像源 3.4. GIT 源 3.5. 二进制(本地)来源 3.6. 输入 SECRET 和配置映射 3.7. 外部工件 (ARTIFACT) 3.8. 将 DOCKER 此外,也可利用 Pipeline 构建策略来实现复杂的工作流: 持续集成 持续部署 1.1.1. Docker 构建 Docker 构建策略调用 docker build 命令,它需要一个含有 Dockerfile 的存储库并且其中包含所有必要的 工件,从而能生成可运行的镜像。 1.1.2. Source-to-Image (S2I) 构建 Source-to-Image (S2I) 是一种用于构建可重复生成的 可修补性 如果基础镜像因为安全问题而需要补丁,则 S2I 允许基于新的基础镜像重新构建应用程序。 操作效率 通过限制构建操作而不许随意进行 Dockerfile 允许的操作,PaaS 运维人员可以避免意外或故 意滥用构建系统。 操作安全性 构建任意 Dockerfile 会将主机系统暴露于 root 特权提升。因为整个 Docker 构建过程都通过具 备 Docker 特权的用户运行,这可能被恶意用户利用。S2I0 码力 | 101 页 | 1.12 MB | 1 年前3
 OpenShift Container Platform 4.13 CI/CDOpenShift Container Platform 使用 Buildah 从 Dockerfile 构建容器镜像。有关使用 Dockerfile 构建容器 镜像的更多信息,请参阅 Dockerfile 参考文档。 提示 提示 如果使用 buildArgs 数组设置 Docker 构建参数,请参阅 Dockerfile 参考文档中了解 ARG 和 FROM 如何 交互。 2.1.1.2. Source-to-image Serial,即新构建将按顺序运 行,而不是同时运行。 您可以指定导致创建新构建的触发器的列表。 source 部分定义构建的来源。源类型决定主要的输入源,可以是 Git(指向代码库存储位 置)、Dockerfile(从内联 Dockerfile 构建)或 Binary(接受二进制有效负载)。可以同时拥有多 个源。详情请参阅每种源类型的文档。 strategy 部分描述用于执行构建的构建策略。您可以在此处指定 Source、Docker secret。 2.3.1. 构建输入 构建输入提供构建操作的源内容。您可以使用以下构建输入在 OpenShift Container Platform 中提供源, 它们按优先顺序列出: 内联 Dockerfile 定义 从现有镜像中提取内容 Git 存储库 - type: "Generic" generic: secret: "secret101" -0 码力 | 129 页 | 1.37 MB | 1 年前3 OpenShift Container Platform 4.13 CI/CDOpenShift Container Platform 使用 Buildah 从 Dockerfile 构建容器镜像。有关使用 Dockerfile 构建容器 镜像的更多信息,请参阅 Dockerfile 参考文档。 提示 提示 如果使用 buildArgs 数组设置 Docker 构建参数,请参阅 Dockerfile 参考文档中了解 ARG 和 FROM 如何 交互。 2.1.1.2. Source-to-image Serial,即新构建将按顺序运 行,而不是同时运行。 您可以指定导致创建新构建的触发器的列表。 source 部分定义构建的来源。源类型决定主要的输入源,可以是 Git(指向代码库存储位 置)、Dockerfile(从内联 Dockerfile 构建)或 Binary(接受二进制有效负载)。可以同时拥有多 个源。详情请参阅每种源类型的文档。 strategy 部分描述用于执行构建的构建策略。您可以在此处指定 Source、Docker secret。 2.3.1. 构建输入 构建输入提供构建操作的源内容。您可以使用以下构建输入在 OpenShift Container Platform 中提供源, 它们按优先顺序列出: 内联 Dockerfile 定义 从现有镜像中提取内容 Git 存储库 - type: "Generic" generic: secret: "secret101" -0 码力 | 129 页 | 1.37 MB | 1 年前3
 OpenShift Container Platform 4.13 CLI 工具new-build https://github.com/openshift/ruby-hello-world#beta2 # Create a build config using a Dockerfile specified as an argument oc new-build -D $'FROM centos:7\nRUN yum install -y httpd' # Create 描述 描述 dockerfile 为声明性配置索引生成 Dockerfile。 表 表 6.3. generate 标记 标记 标记 标记 描述 描述 -h,--help 生成帮助信息。 6.2.1.1. dockerfile 为声明性配置索引生成 Dockerfile。 重要 重要 此命令在与 OpenShift Container Platform 4.13 CLI 工具new-build https://github.com/openshift/ruby-hello-world#beta2 # Create a build config using a Dockerfile specified as an argument oc new-build -D $'FROM centos:7\nRUN yum install -y httpd' # Create 描述 描述 dockerfile 为声明性配置索引生成 Dockerfile。 表 表 6.3. generate 标记 标记 标记 标记 描述 描述 -h,--help 生成帮助信息。 6.2.1.1. dockerfile 为声明性配置索引生成 Dockerfile。 重要 重要 此命令在与- (名为 - .Dockerfile)相同的目录中创建 Dockerfile)相同的目录中创建 Dockerfile,用于构建索引。如果存在具有相同名称的 Dockerfile,这个命令会失败。 当指定额外标签时,如果存在重复的键,则只有每个重复键的最后值都会添加到生成的 Dockerfile 中。 命令 命令语 语法 法 表 表 6.4. generate dockerfile 标记 标记 标记 标记 描述 描述 -i, --binary-image (字符串) 要构建目录的镜像。默认值为 0 码力 | 128 页 | 1.11 MB | 1 年前3
 OpenShift Container Platform 4.14 Operator自动重新构建和重新发布目录镜像。 opm alpha generate dockerfile "$name" indexImage=$(yq eval '.repo + ":" + .tag' catalog.yaml) docker build -t "$indexImage" -f "$name.Dockerfile" . docker push "$indexImage" OpenShift generate dockerfile 命令生成可构建目录镜像的 Dockerfile: 使用 -i 标志指定官方红帽基础镜像,否则 Dockerfile 使用默认的上游镜像。 Dockerfile 必须与您在上一步中创建的目录目录位于相同的父目录中: 目 目录结构示例 示例 父目录 Catalog 目录 opm generate dockerfile 命令生成的 Dockerfile c. 运行 命令向目录添加捆绑包: $ opm generate dockerfile OpenShift Container Platform 4.14 Operator自动重新构建和重新发布目录镜像。 opm alpha generate dockerfile "$name" indexImage=$(yq eval '.repo + ":" + .tag' catalog.yaml) docker build -t "$indexImage" -f "$name.Dockerfile" . docker push "$indexImage" OpenShift generate dockerfile 命令生成可构建目录镜像的 Dockerfile: 使用 -i 标志指定官方红帽基础镜像,否则 Dockerfile 使用默认的上游镜像。 Dockerfile 必须与您在上一步中创建的目录目录位于相同的父目录中: 目 目录结构示例 示例 父目录 Catalog 目录 opm generate dockerfile 命令生成的 Dockerfile c. 运行 命令向目录添加捆绑包: $ opm generate dockerfile- \ -i registry.redhat.io/openshift4/ose-operator-registry:v4.14 1 . 1 ├── - 2 └── - .Dockerfile 3 $ opm init 0 码力 | 423 页 | 4.26 MB | 1 年前3
 OpenShift Container Platform 4.12 专用硬件和驱动程序启用Container Platform 版本的相关的正确 driver toolki 镜 像替换 "DRIVER_TOOLKIT_IMAGE" 部分。 3. 使用创建镜像流和构建配置 dockerfile: | ARG DTK FROM ${DTK} as builder ARG KVER WORKDIR /build/ RUN 对于任何其他内核,使用 my-kmod ConfigMap 中的 Dockerfile 构建镜像。 可选。 可选: some-kubernetes-secret 的值可以从位于 /run/secrets/some-kubernetes-secret 的构建环 境中获取。 可选:避免使用此参数。如果设置为 true,则允许构建使用普通 HTTP 在 Dockerfile FROM 指令中 拉取镜像。 dockerfileConfigMap: 12 name: OpenShift Container Platform 4.12 专用硬件和驱动程序启用Container Platform 版本的相关的正确 driver toolki 镜 像替换 "DRIVER_TOOLKIT_IMAGE" 部分。 3. 使用创建镜像流和构建配置 dockerfile: | ARG DTK FROM ${DTK} as builder ARG KVER WORKDIR /build/ RUN 对于任何其他内核,使用 my-kmod ConfigMap 中的 Dockerfile 构建镜像。 可选。 可选: some-kubernetes-secret 的值可以从位于 /run/secrets/some-kubernetes-secret 的构建环 境中获取。 可选:避免使用此参数。如果设置为 true,则允许构建使用普通 HTTP 在 Dockerfile FROM 指令中 拉取镜像。 dockerfileConfigMap: 12 name:- dockerfile> sign: certSecret: name: - 13 keySecret: name: 0 码力 | 54 页 | 591.48 KB | 1 年前3
 OpenShift Container Platform 4.10 CLI 工具new-build https://github.com/openshift/ruby-hello-world#beta2 # Create a build config using a Dockerfile specified as an argument 第 第 2 章 章 OPENSHIFT CLI (OC) 51 2.5.1.88. oc new-project 请求新项目 用法示例 要添加到的上一个索引。 --generate 如果启用,则仅创建 Dockerfile 并将其保存到本地磁盘。 --mode (字符串) 图形更新模式,用来定义通频道图形如何被更新: replaces(默认 值)、semver 或 semver-skippatch -d,--out-dockerfile (字 符串) 可选:如果生成 Dockerfile,请指定一个文件名。 --permissive 允许 或 podman。 -f,--from-index (字符 串) 到修剪的索引。 --generate 如果启用,则仅创建 Dockerfile 并将其保存到本地磁盘。 -d,--out-dockerfile (字 符串) 可选:如果生成 Dockerfile,请指定一个文件名。 -p、--packages (字 符串) 要保留的软件包用逗号隔开。 --permissive 允许 registry0 码力 | 120 页 | 1.04 MB | 1 年前3 OpenShift Container Platform 4.10 CLI 工具new-build https://github.com/openshift/ruby-hello-world#beta2 # Create a build config using a Dockerfile specified as an argument 第 第 2 章 章 OPENSHIFT CLI (OC) 51 2.5.1.88. oc new-project 请求新项目 用法示例 要添加到的上一个索引。 --generate 如果启用,则仅创建 Dockerfile 并将其保存到本地磁盘。 --mode (字符串) 图形更新模式,用来定义通频道图形如何被更新: replaces(默认 值)、semver 或 semver-skippatch -d,--out-dockerfile (字 符串) 可选:如果生成 Dockerfile,请指定一个文件名。 --permissive 允许 或 podman。 -f,--from-index (字符 串) 到修剪的索引。 --generate 如果启用,则仅创建 Dockerfile 并将其保存到本地磁盘。 -d,--out-dockerfile (字 符串) 可选:如果生成 Dockerfile,请指定一个文件名。 -p、--packages (字 符串) 要保留的软件包用逗号隔开。 --permissive 允许 registry0 码力 | 120 页 | 1.04 MB | 1 年前3
 OpenShift Container Platform 4.2 镜像按正确顺 顺序放置指令 序放置指令 容器构建程序读取 Dockerfile,并自上而下运行指令。成功执行的每个指令都会创建一个层,可在下次构 建该镜像或其他镜像时重复使用。务必要将极少变化的指令放置在 Dockerfile 的顶部。这样做可确保下 次构建相同镜像会非常迅速,因为缓存不会因为上层变化而失效。 例如:如果您正在使用 Dockerfile,它包含一个用于安装正在迭代的文件的 ADD 命令,以及一个用于 这样,您每次编辑 myfile 和重新运行 podman build 或 docker build 时,系统都可重复利用 yum 命令 的缓存层,仅为 ADD 操作生成新层。 如果您将 Dockerfile 改写为: FROM foo ADD myfile /test/myfile RUN yum -y install mypackage && yum clean all -y 则您每次更改 yum 操作也必须要重新运行。 标记 标记重要端口 重要端口 EXPOSE 指令使主机系统和其它容器可使用容器中的端口。尽管可以指定应当通过 podman run 调用来 公开端口,但在 Dockerfile 中使用 EXPOSE 指令可显式声明您的软件需要运行的端口,让用户和软件更 易于使用您的镜像: OpenShift Container Platform 4.2 镜 镜像 像 20 公开端口将显示在0 码力 | 92 页 | 971.35 KB | 1 年前3 OpenShift Container Platform 4.2 镜像按正确顺 顺序放置指令 序放置指令 容器构建程序读取 Dockerfile,并自上而下运行指令。成功执行的每个指令都会创建一个层,可在下次构 建该镜像或其他镜像时重复使用。务必要将极少变化的指令放置在 Dockerfile 的顶部。这样做可确保下 次构建相同镜像会非常迅速,因为缓存不会因为上层变化而失效。 例如:如果您正在使用 Dockerfile,它包含一个用于安装正在迭代的文件的 ADD 命令,以及一个用于 这样,您每次编辑 myfile 和重新运行 podman build 或 docker build 时,系统都可重复利用 yum 命令 的缓存层,仅为 ADD 操作生成新层。 如果您将 Dockerfile 改写为: FROM foo ADD myfile /test/myfile RUN yum -y install mypackage && yum clean all -y 则您每次更改 yum 操作也必须要重新运行。 标记 标记重要端口 重要端口 EXPOSE 指令使主机系统和其它容器可使用容器中的端口。尽管可以指定应当通过 podman run 调用来 公开端口,但在 Dockerfile 中使用 EXPOSE 指令可显式声明您的软件需要运行的端口,让用户和软件更 易于使用您的镜像: OpenShift Container Platform 4.2 镜 镜像 像 20 公开端口将显示在0 码力 | 92 页 | 971.35 KB | 1 年前3
 OpenShift Container Platform 4.7 镜像取时间。 按正确顺序放置指令 容器构建程序读取 Dockerfile,并自上而下运行指令。成功执行的每个指令都会创建一个层,可在下次构 建该镜像或其他镜像时重复使用。务必要将很少更改的指令放置在 Dockerfile 的顶部。这样做可确保下 次构建相同镜像会非常迅速,因为缓存不会因为上层变化而失效。 例如:如果您正在使用 Dockerfile,它包含一个用于安装正在迭代的文件的 ADD 命令,以及一个用于 如果您将 Dockerfile 改写为: 则您每次更改 myfile 和重新运行 podman build 或 docker build 时,ADD 操作都会导致 RUN 层缓存无 效,因此 yum 操作也必须要重新运行。 标记重要端口 EXPOSE 指令使主机系统和其它容器可使用容器中的端口。尽管可以指定应当通过 podman run 调用来 公开端口,但在 Dockerfile 中使用 EXPOSE 像 27 当将一个容器链接到另一容器时,公开端口也会链接到一起 设置环境变量 设置环境变量的最佳做法是使用 ENV 指令设置环境变量。一个例子是设置项目版本。这让人可以无需通 过查看 Dockerfile 便可轻松找到版本。另一示例是在系统上公告可供其他进程使用的路径,如 JAVA_HOME。 避免默认密码 避免设置默认密码。许多人扩展镜像时会忘记删除或更改默认密码。如果在生产环境中的用户被分配了众0 码力 | 123 页 | 1.20 MB | 1 年前3 OpenShift Container Platform 4.7 镜像取时间。 按正确顺序放置指令 容器构建程序读取 Dockerfile,并自上而下运行指令。成功执行的每个指令都会创建一个层,可在下次构 建该镜像或其他镜像时重复使用。务必要将很少更改的指令放置在 Dockerfile 的顶部。这样做可确保下 次构建相同镜像会非常迅速,因为缓存不会因为上层变化而失效。 例如:如果您正在使用 Dockerfile,它包含一个用于安装正在迭代的文件的 ADD 命令,以及一个用于 如果您将 Dockerfile 改写为: 则您每次更改 myfile 和重新运行 podman build 或 docker build 时,ADD 操作都会导致 RUN 层缓存无 效,因此 yum 操作也必须要重新运行。 标记重要端口 EXPOSE 指令使主机系统和其它容器可使用容器中的端口。尽管可以指定应当通过 podman run 调用来 公开端口,但在 Dockerfile 中使用 EXPOSE 像 27 当将一个容器链接到另一容器时,公开端口也会链接到一起 设置环境变量 设置环境变量的最佳做法是使用 ENV 指令设置环境变量。一个例子是设置项目版本。这让人可以无需通 过查看 Dockerfile 便可轻松找到版本。另一示例是在系统上公告可供其他进程使用的路径,如 JAVA_HOME。 避免默认密码 避免设置默认密码。许多人扩展镜像时会忘记删除或更改默认密码。如果在生产环境中的用户被分配了众0 码力 | 123 页 | 1.20 MB | 1 年前3
 OpenShift Container Platform 4.8 CLI 工具new-build https://github.com/openshift/ruby-hello-world#beta2 # Create a build config using a Dockerfile specified as an argument oc new-build -D $'FROM centos:7\nRUN yum install -y httpd' # Create 3.5.1. odo build-images odo 可根据 Dockerfile 构建容器镜像,并将这些镜像推送到 registry。 在运行 odo build-images 命令时,odo 会使用 镜 镜像 像 类型搜索 devfile.yaml 中的所有组件,例如: uri 字段指示要使用的 Dockerfile 的相对路径,相对于包含 devfile.yaml 的目录。devfile buildContext 指示用作构建上下文的目录。默认值为 ${PROJECTS_ROOT}。 对于每个镜像组件,odo 执行 podman 或 docker (按此顺序找到的第一个),以使用指定的 Dockerfile、构建上下文和参数构建镜像。 如果将 --push 标志传递给命令,则镜像会在构建后推送到其 registry。 3.5.2. odo catalog odo 使用不同的目录来部署组件和服务。0 码力 | 152 页 | 1.24 MB | 1 年前3 OpenShift Container Platform 4.8 CLI 工具new-build https://github.com/openshift/ruby-hello-world#beta2 # Create a build config using a Dockerfile specified as an argument oc new-build -D $'FROM centos:7\nRUN yum install -y httpd' # Create 3.5.1. odo build-images odo 可根据 Dockerfile 构建容器镜像,并将这些镜像推送到 registry。 在运行 odo build-images 命令时,odo 会使用 镜 镜像 像 类型搜索 devfile.yaml 中的所有组件,例如: uri 字段指示要使用的 Dockerfile 的相对路径,相对于包含 devfile.yaml 的目录。devfile buildContext 指示用作构建上下文的目录。默认值为 ${PROJECTS_ROOT}。 对于每个镜像组件,odo 执行 podman 或 docker (按此顺序找到的第一个),以使用指定的 Dockerfile、构建上下文和参数构建镜像。 如果将 --push 标志传递给命令,则镜像会在构建后推送到其 registry。 3.5.2. odo catalog odo 使用不同的目录来部署组件和服务。0 码力 | 152 页 | 1.24 MB | 1 年前3
 OpenShift Container Platform 4.14 镜像按正确顺 顺序放置指令 序放置指令 容器构建程序读取 Dockerfile,并自上而下运行指令。成功执行的每个指令都会创建一个层,可在下次构 建该镜像或其他镜像时重复使用。务必要将很少更改的指令放置在 Dockerfile 的顶部。这样做可确保下 次构建相同镜像会非常迅速,因为缓存不会因为上层变化而失效。 例如:如果您正在使用 Dockerfile,它包含一个用于安装正在迭代的文件的 ADD 命令,以及一个用于 这样,您每次编辑 myfile 和重新运行 podman build 或 docker build 时,系统都可重复利用 yum 命令 的缓存层,仅为 ADD 操作生成新层。 如果您将 Dockerfile 改写为: 则您每次更改 myfile 和重新运行 podman build 或 docker build 时,ADD 操作都会导致 RUN 层缓存无 效,因此 yum 操作也必须要重新运行。 操作也必须要重新运行。 标记 标记重要端口 重要端口 EXPOSE 指令使主机系统和其它容器可使用容器中的端口。尽管可以指定应当通过 podman run 调用来 公开端口,但在 Dockerfile 中使用 EXPOSE 指令可显式声明您的软件需要运行的端口,让用户和软件更 易于使用您的镜像: 公开端口显示在 podman ps 下,与从您的镜像创建的容器关联。 公开端口存在于 podman inspect0 码力 | 118 页 | 1.13 MB | 1 年前3 OpenShift Container Platform 4.14 镜像按正确顺 顺序放置指令 序放置指令 容器构建程序读取 Dockerfile,并自上而下运行指令。成功执行的每个指令都会创建一个层,可在下次构 建该镜像或其他镜像时重复使用。务必要将很少更改的指令放置在 Dockerfile 的顶部。这样做可确保下 次构建相同镜像会非常迅速,因为缓存不会因为上层变化而失效。 例如:如果您正在使用 Dockerfile,它包含一个用于安装正在迭代的文件的 ADD 命令,以及一个用于 这样,您每次编辑 myfile 和重新运行 podman build 或 docker build 时,系统都可重复利用 yum 命令 的缓存层,仅为 ADD 操作生成新层。 如果您将 Dockerfile 改写为: 则您每次更改 myfile 和重新运行 podman build 或 docker build 时,ADD 操作都会导致 RUN 层缓存无 效,因此 yum 操作也必须要重新运行。 操作也必须要重新运行。 标记 标记重要端口 重要端口 EXPOSE 指令使主机系统和其它容器可使用容器中的端口。尽管可以指定应当通过 podman run 调用来 公开端口,但在 Dockerfile 中使用 EXPOSE 指令可显式声明您的软件需要运行的端口,让用户和软件更 易于使用您的镜像: 公开端口显示在 podman ps 下,与从您的镜像创建的容器关联。 公开端口存在于 podman inspect0 码力 | 118 页 | 1.13 MB | 1 年前3
共 36 条
- 1
- 2
- 3
- 4













