×

以下部分概述了在使用容器镜像与AWS上的Red Hat OpenShift Service镜像流及其标签时,使用镜像标签的说明。

镜像标签

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

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

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

AWS上的Red Hat OpenShift Service提供了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并将其删除。否则,您可能会因为保留旧镜像而导致资源使用量增加。

向镜像流添加标签

AWS上的Red Hat OpenShift Service中的镜像流包含零个或多个由标签标识的容器镜像。

有不同类型的标签可用。默认行为使用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标志创建一个不会导入的镜像流标签。该标签永久指向源位置。

    如果您想指示AWS上的Red Hat OpenShift Service始终从集成注册表获取标记的镜像,请使用--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用于引用或检索给定外部注册表的镜像。它使用标准Docker pull specification作为其名称。

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

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