×

以下部分概述了在使用 OpenShift Container Platform 镜像流及其标签的容器镜像上下文中使用镜像标签的说明。

镜像标签

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

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

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

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

镜像标签约定

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

如果标签名称中嵌入的信息过多,例如v2.0.1-may-2019,则该标签仅指向镜像的一个版本,并且永远不会更新。使用默认的镜像修剪选项,此类镜像永远不会被删除。在非常大的集群中,为每个修订的镜像创建新标签的模式最终可能会用过时镜像的多余标签元数据填满 etcd 数据存储。

如果标签名为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 Container Platform 中的镜像流包含零个或多个由标签标识的容器镜像。

有多种类型的标签可用。默认行为使用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 Container Platform始终从集成注册表获取标记的镜像,请使用--reference-policy=local。注册表使用直通功能将镜像提供给客户端。默认情况下,镜像 Blob 会由注册表在本地镜像。因此,下次需要时可以更快地提取它们。只要镜像流具有不安全注释或标签具有不安全导入策略,该标志还允许从不安全的注册表中提取,而无需向容器运行时提供--insecure-registry

从镜像流中删除标签

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

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

    $ oc delete istag/ruby:latest

    $ oc tag -d ruby:latest

引用镜像流中的镜像

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

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

ImageStreamTag

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

ImageStreamImage

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

DockerImage

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

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

这是因为当您将镜像导入或标记到镜像流中时,ImageStreamImage对象会在OpenShift Container Platform中自动创建。您永远不必在用于创建镜像流的任何镜像流定义中显式定义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