×

以下部分概述了在容器镜像的上下文中使用镜像标签与 OpenShift Dedicated 镜像流及其标签协同工作的说明。

镜像标签

镜像标签是应用于存储库中容器镜像的标签,用于区分镜像流中特定镜像与其他镜像。通常,标签代表某种版本号。例如,这里:v3.11.59-2是标签

registry.access.redhat.com/openshift3/jenkins-2-rhel7:v3.11.59-2

您可以向镜像添加其他标签。例如,一个镜像可能被分配标签:v3.11.59-2:latest

OpenShift Dedicated 提供了oc tag命令,它类似于docker tag命令,但操作的是镜像流而不是直接操作镜像。

镜像标签约定

镜像会随着时间推移而演变,它们的标签也反映了这一点。通常,镜像标签始终指向构建的最新镜像。

如果标签名称中嵌入了太多信息,例如v2.0.1-may-2019,则该标签仅指向镜像的一个版本,并且不会更新。使用默认的镜像修剪选项,此类镜像永远不会被删除。

如果标签命名为v2.0,则镜像版本更有可能发生变化。这会导致更长的标签历史记录,因此,镜像清理程序更有可能删除旧的和未使用的镜像。

虽然标签命名约定由您决定,但以下是一些格式为<image_name>:<image_tag>的示例

表 1. 镜像标签命名约定
描述 示例

版本

myimage:v2.0.1

架构

myimage:v2.0-x86_64

基础镜像

myimage:v1.2-centos7

最新(可能不稳定)

myimage:latest

最新稳定版

myimage:stable

如果您需要在标签名称中使用日期,请定期检查旧的和不受支持的镜像和istags并将其删除。否则,您可能会因为保留旧镜像而导致资源使用量增加。

向镜像流添加标签

OpenShift Dedicated 中的镜像流包含由标签标识的零个或多个容器镜像。

有不同类型的标签可用。默认行为使用permanent标签,该标签指向特定时间的特定镜像。如果permanent标签正在使用并且源发生更改,则目标的标签不会更改。

tracking标签意味着在导入源标签期间会更新目标标签的元数据。

步骤
  • 您可以使用oc tag命令向镜像流添加标签

    $ oc tag <source> <destination>

    例如,要将ruby镜像流static-2.0标签配置为始终引用ruby镜像流2.0标签的当前镜像

    $ oc tag ruby:2.0 ruby:static-2.0

    这会在ruby镜像流中创建一个名为static-2.0的新镜像流标签。新标签直接引用oc tag运行时ruby:2.0镜像流标签指向的镜像 ID,并且它指向的镜像永远不会改变。

  • 要确保在源标签更改时更新目标标签,请使用--alias=true标志

    $ oc tag --alias=true <source> <destination>

使用跟踪标签创建永久别名,例如lateststable。该标签仅在单个镜像流中才能正常工作。尝试创建跨镜像流别名会产生错误。

  • 您还可以添加--scheduled=true标志,以便定期刷新或重新导入目标标签。该周期在系统级别全局配置。

  • --reference标志创建一个不会导入的镜像流标签。该标签永久指向源位置。

    如果您希望指示 OpenShift Dedicated 始终从集成注册表获取标记的镜像,请使用--reference-policy=local。注册表使用直通功能将镜像提供给客户端。默认情况下,镜像块会在本地由注册表镜像。因此,下次需要时可以更快地拉取它们。此标志还允许从不安全的注册表中拉取镜像,而无需向容器运行时提供--insecure-registry,只要镜像流具有不安全注释或标签具有不安全导入策略即可。

从镜像流中删除标签

您可以从镜像流中删除标签。

步骤
  • 要从镜像流中完全删除标签,请运行

    $ oc delete istag/ruby:latest

    $ oc tag -d ruby:latest

在镜像流中引用镜像

您可以使用标签来引用镜像流中的镜像,使用以下引用类型。

表 2. 镜像流引用类型
引用类型 描述

ImageStreamTag

ImageStreamTag 用于引用或检索给定镜像流和标签的镜像。

ImageStreamImage

ImageStreamImage 用于引用或检索给定镜像流和镜像sha ID 的镜像。

DockerImage

DockerImage 用于引用或检索给定外部注册表的镜像。它使用标准 Docker pull specification 作为其名称。

查看示例镜像流定义时,您可能会注意到它们包含ImageStreamTag的定义和对DockerImage的引用,但没有与ImageStreamImage相关的任何内容。

这是因为当您将镜像导入或标记到镜像流中时,ImageStreamImage 对象会在 OpenShift Dedicated 中自动创建。您永远不必在用于创建镜像流的任何镜像流定义中显式定义ImageStreamImage对象。

步骤
  • 要引用给定镜像流和标签的镜像,请使用ImageStreamTag

    <image_stream_name>:<tag>
  • 要引用给定镜像流和镜像sha ID 的镜像,请使用ImageStreamImage

    <image_stream_name>@<id>

    <id> 是特定镜像的不可变标识符,也称为摘要。

  • 要引用或检索给定外部注册表的镜像,请使用DockerImage

    openshift/ruby-20-centos7:2.0

    如果未指定标签,则假定使用latest标签。

    您还可以引用第三方注册表

    registry.redhat.io/rhel7:latest

    或带有摘要的镜像

    centos/ruby-22-centos7@sha256:3a335d7d8a452970c5b4054ad7118ff134b3a6b50a2bb6d0c07c746e8986b28e