5.2. 标记镜像
以下章节提供在容器镜像上下文中使用镜像标签(tag)的概述和说明,以便使用 OpenShift Container Platform 镜像流及其标签。
5.2.1. 镜像标签
镜像标签(tag)是应用于存储库中容器镜像的标签,用于将特定镜像与镜像流中的其他镜像区分开来。标签通常代表某种版本号。例如,这里的 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
命令,但是在镜像流上运行,而非直接在镜像上运行。
5.2.2. 镜像标签惯例
镜像随时间不断发展,其标签反应了这一点。一般来说,镜像标签会始终指向最新镜像构建。
如果标签名称中嵌入太多信息,如 v2.0.1- May-2019
,则标签仅指向镜像的一个版本,不会更新。使用默认镜像修剪选项,此类镜像不会被删除。在庞大集群中,为每个修改后的镜像创建新标签这种模式最终可能会使用早已过期的镜像的多余标签元数据来填充 etcd 数据存储。
如果标签命名为 v2.0
,则镜像修改的可能性更大。这会导致标签历史记录更长,镜像修剪器 (pruner) 也更有可能删除旧的和未使用的镜像。
您可自行决定标签命名惯例,下面提供了一些 <image_name>:<image_tag>
格式的示例:
描述 | 示例 |
---|---|
修订 |
|
架构 |
|
基础镜像 |
|
最新(可能不稳定) |
|
最新稳定 |
|
如果标签名称中需要日期,请定期检查旧的和不受支持的镜像以及 istags
,并予以删除。否则,您可能遇到保留的旧镜像导致资源使用量增加的情况。
5.2.3. 向镜像流中添加标签
OpenShift Container Platform 中的镜像流包含 0 个或更多由标签标识的容器镜像。
有各种不同类型的标签可用。默认行为使用持久性标签,指向一段时间内的特定镜像。如果正在使用 _permanent_tag 并且源更改,则目的地的标签不会更改。
跟踪标签表示,在导入源标签期间对目的地标签的元数据进行了更新。
流程
您可使用
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
的新 imagestreamtag。运行oc tag
时,新标签会直接引用ruby:2.0
imagestreamtag 所指向的镜像 id,而所指向的镜像不会改变。为确保目标标签在源标签更改时进行更新,请使用
--alias=true
标志:$ oc tag --alias=true <source> <destination>
使用跟踪标签创建持久性别名,例如:latest
或 stable
。该标签只在单一镜像流中正常工作。试图创建跨镜像流别名会出错。
-
您还可添加
--scheduled=true
标志来定期刷新或重新导入目的地标签。周期在系统级别进行全局配置。 --reference
标志会创建一个非导入的 imagestreamtag。该标签持久指向源位置。如果您希望指示 OpenShift 始终从集成的 registry 中获取标记的镜像,则请使用
--reference-policy=local
。registry 使用 pull-through 功能为客户端提供镜像。默认情况下,镜像 Blob 由 registry 在本地进行镜像。因此,下次需要时便可更快拉取(pull)。只要镜像流具有不安全的注解,或者标签具有不安全的导入策略,该标志也允许从不安全的 registry 拉取(pull),无需向容器运行时提供--insecure-registry
。
5.2.4. 从镜像流中删除标签
您可以从镜像流中删除标签。
流程
要从镜像流运行中完全删除标签:
$ oc delete istag/ruby:latest
或者:
$ oc tag -d ruby:latest
5.2.5. 引用镜像流中的镜像
您可通过以下引用类型,使用标签来引用镜像流中的镜像。
引用类型 | 描述 |
---|---|
|
|
|
|
|
|
查看镜像流定义示例时,您可能会发现它们包含 ImageStreamTag
的定义以及对 DockerImage
的引用,但与 ImageStreamImage
无关。
这是因为当您将镜像导入或标记到镜像流时,OpenShift Container Platform 中会自动创建 ImageStreamImage
对象。您不必在用于创建镜像流的任何镜像流定义中显式定义 ImageStreamImage
对象。
流程
要引用给定镜像流和标签的镜像,请使用
ImageStreamTag
:<image_stream_name>:<tag>
要引用给定镜像流的镜像和镜像
sha
ID,请使用ImageStreamImage
:<image_stream_name>@<id>
<id>
是针对特定镜像的不可变标识符,也称摘要。要引用或检索给定外部 registry 的镜像,请使用
DockerImage
:openshift/ruby-20-centos7:2.0
注意如果未指定标签,则会假定使用 latest标签。
此外,您还可引用第三方 registry:
registry.redhat.io/rhel7:latest
或者带有摘要的镜像:
centos/ruby-22-centos7@sha256:3a335d7d8a452970c5b4054ad7118ff134b3a6b50a2bb6d0c07c746e8986b28e
5.2.6. 其他信息
- CentOS 镜像流的镜像流定义示例。