×

为 Red Hat 通用基础镜像创建镜像流标签

要在构建中安装 Red Hat Enterprise Linux (RHEL) 包,您可以创建一个镜像流标签来引用 Red Hat 通用基础镜像 (UBI)。

要使 UBI 在集群中的每个项目中可用,请将镜像流标签添加到 `openshift` 命名空间。否则,要使其在特定项目中可用,请将镜像流标签添加到该项目。

镜像流标签通过使用安装拉取密钥中存在的 `registry.redhat.io` 凭据来授予对 UBI 的访问权限,而无需向其他用户公开拉取密钥。此方法比要求每个开发人员在每个项目中安装具有 `registry.redhat.io` 凭据的拉取密钥更方便。

步骤
  • 要在单个项目中创建 `ImageStreamTag` 资源,请输入以下命令

    $ oc tag --source=docker registry.redhat.io/ubi9/ubi:latest ubi:latest

    或者,您可以应用以下 YAML 来在单个项目中创建 `ImageStreamTag` 资源

    apiVersion: image.openshift.io/v1
    kind: ImageStream
    metadata:
      name: ubi9
    spec:
      tags:
      - from:
          kind: DockerImage
          name: registry.redhat.io/ubi9/ubi:latest
        name: latest
        referencePolicy:
          type: Source

将订阅授权作为构建密钥添加

使用 Red Hat 订阅安装内容的构建必须包含授权密钥作为构建密钥。

先决条件
  • 您必须以具有 `cluster-admin` 角色的用户身份访问集群,或者您有权访问 `openshift-config-managed` 项目中的密钥。

步骤
  1. 通过输入以下命令,将授权密钥从 `openshift-config-managed` 命名空间复制到构建的命名空间

    $ cat << EOF > secret-template.txt
    kind: Secret
    apiVersion: v1
    metadata:
      name: etc-pki-entitlement
    type: Opaque
    data: {{ range \$key, \$value := .data }}
      {{ \$key }}: {{ \$value }} {{ end }}
    EOF
    $ oc get secret etc-pki-entitlement -n openshift-config-managed -o=go-template-file --template=secret-template.txt | oc apply -f -
  2. 在构建配置的 Docker 策略中将 etc-pki-entitlement 密钥添加为构建卷

    strategy:
      dockerStrategy:
        from:
          kind: ImageStreamTag
          name: ubi9:latest
        volumes:
        - name: etc-pki-entitlement
          mounts:
          - destinationPath: /etc/pki/entitlement
          source:
            type: Secret
            secret:
              secretName: etc-pki-entitlement

使用 Subscription Manager 运行构建

使用 Subscription Manager 进行 Docker 构建

Docker 策略构建可以使用 `yum` 或 `dnf` 安装其他 Red Hat Enterprise Linux (RHEL) 包。

先决条件
  • 授权密钥必须作为构建策略卷添加。

步骤
  • 使用以下示例 Dockerfile 来使用 Subscription Manager 安装内容

    FROM registry.redhat.io/ubi9/ubi:latest
    RUN rm -rf /etc/rhsm-host (1)
    RUN yum --enablerepo=codeready-builder-for-rhel-9-x86_64-rpms install \ (2)
        nss_wrapper \
        uid_wrapper -y && \
        yum clean all -y
    RUN ln -s /run/secrets/rhsm /etc/rhsm-host (3)
    1 在执行任何 `yum` 或 `dnf` 命令之前,您必须在 Dockerfile 中包含删除 `/etc/rhsm-host` 目录及其所有内容的命令。
    2 使用Red Hat 包浏览器查找已安装包的正确存储库。
    3 您必须恢复 `/etc/rhsm-host` 符号链接以保持您的镜像与其他 Red Hat 容器镜像兼容。

使用 Red Hat Satellite 订阅运行构建

将 Red Hat Satellite 配置添加到构建中

使用 Red Hat Satellite 安装内容的构建必须提供适当的配置才能从 Satellite 存储库获取内容。

先决条件
  • 您必须提供或创建一个与 `yum` 兼容的存储库配置文件,该文件从您的 Satellite 实例下载内容。

    示例存储库配置
    [test-<name>]
    name=test-<number>
    baseurl = https://satellite.../content/dist/rhel/server/7/7Server/x86_64/os
    enabled=1
    gpgcheck=0
    sslverify=0
    sslclientkey = /etc/pki/entitlement/...-key.pem
    sslclientcert = /etc/pki/entitlement/....pem
步骤
  1. 通过输入以下命令创建包含 Satellite 存储库配置文件的 `ConfigMap` 对象

    $ oc create configmap yum-repos-d --from-file /path/to/satellite.repo
  2. 将 Satellite 存储库配置和授权密钥添加为构建卷

    strategy:
      dockerStrategy:
        from:
          kind: ImageStreamTag
          name: ubi9:latest
        volumes:
        - name: yum-repos-d
          mounts:
          - destinationPath: /etc/yum.repos.d
          source:
            type: ConfigMap
            configMap:
              name: yum-repos-d
        - name: etc-pki-entitlement
          mounts:
          - destinationPath: /etc/pki/entitlement
          source:
            type: Secret
            secret:
              secretName: etc-pki-entitlement

使用 Red Hat Satellite 订阅进行 Docker 构建

Docker 策略构建可以使用 Red Hat Satellite 存储库安装订阅内容。

先决条件
  • 您已将授权密钥和 Satellite 存储库配置添加为构建卷。

步骤
  • 使用以下示例创建用于使用 Satellite 安装内容的 `Dockerfile`

    FROM registry.redhat.io/ubi9/ubi:latest
    RUN rm -rf /etc/rhsm-host (1)
    RUN yum --enablerepo=codeready-builder-for-rhel-9-x86_64-rpms install \ (2)
        nss_wrapper \
        uid_wrapper -y && \
        yum clean all -y
    RUN ln -s /run/secrets/rhsm /etc/rhsm-host (3)
    1 在执行任何 `yum` 或 `dnf` 命令之前,您必须在 Dockerfile 中包含删除 `/etc/rhsm-host` 目录及其所有内容的命令。
    2 请联系您的 Satellite 系统管理员以查找构建已安装包的正确存储库。
    3 您必须恢复 `/etc/rhsm-host` 符号链接以保持您的镜像与其他 Red Hat 容器镜像兼容。