3.5.2. 镜像流
镜像流及其关联标签提供了一个用于从 OpenShift Container Platform 中引用容器镜像的抽象 集。镜像流及其标签用于查看可用镜像,确保您使用所需的特定镜像,即使存储库中的镜像发生变化也是如此。
镜像流不含实际镜像数据,它提供了相关镜像的一个单独的虚拟视图,类似于镜像存储库。
您可以在添加新镜像时,配置构建和部署来监控镜像流的通知,并通过分别执行构建或部署来做出反应。
例如,如果部署正在使用某个镜像并且创建了该镜像的新版本,则会自动执行部署以获取镜像的新版本。
但是,如果没有更新 Deployment 或 Build 使用的镜像流标签,则即使更新了容器镜像 registry 中的容器镜像,构建或部署仍会继续使用之前的(已知良好)镜像。
源镜像可存储在以下任一位置:
- OpenShift Container Platform 集成的 registry
-
一个外部 registry,如
registry.redhat.io
或hub.docker.com
- OpenShift Container Platform 集群中的其他镜像流
当您定义引用镜像流标签(如构建或部署配置)的对象时,您指向镜像流标签,而不是 Docker 存储库。当您构建或部署应用程序时,OpenShift Container Platform 会使用镜像流标签查询 Docker 存储库,以查找与镜像关联的 ID,并使用正确的镜像。
镜像流元数据会与其他集群信息一起存储在 etcd 实例中。
以下镜像流包含两个标签:34
个指向 Python v3.4 镜像和 35
(指向 Python v3.5 镜像)的 34:
$ oc describe is python
输出示例
Name: python Namespace: imagestream Created: 25 hours ago Labels: app=python Annotations: openshift.io/generated-by=OpenShiftWebConsole openshift.io/image.dockerRepositoryCheck=2017-10-03T19:48:00Z Docker Pull Spec: docker-registry.default.svc:5000/imagestream/python Image Lookup: local=false Unique Images: 2 Tags: 2 34 tagged from centos/python-34-centos7 * centos/python-34-centos7@sha256:28178e2352d31f240de1af1370be855db33ae9782de737bb005247d8791a54d0 14 seconds ago 35 tagged from centos/python-35-centos7 * centos/python-35-centos7@sha256:2efb79ca3ac9c9145a63675fb0c09220ab3b8d4005d35e0644417ee552548b10 7 seconds ago
使用镜像流有以下几大优势:
- 您可以添加标签、回滚标签和快速处理镜像,而无需使用命令行重新执行 push 操作。
- 当一个新镜像被推送(push)到 registry 时,可触发构建和部署。另外,OpenShift Container Platform 还针对其他资源(如 Kubernetes 对象)具有通用触发器。
- 您可以为定期重新导入标记标签。如果源镜像已更改,则这个更改会被发现并反映在镜像流中,这会触发构建和/或部署流程,具体取决于构建或部署配置。
- 您可使用细粒度访问控制来共享镜像,快速向整个团队分发镜像。
- 如果源更改,镜像流标签仍将指向已知良好的镜像版本,以确保您的应用程序不会意外中断。
- 您可以通过 镜像流对象 的权限配置安全性,以了解谁可以查看和使用镜像。
- 在集群级别上缺少读取或列出镜像权限的用户仍可使用镜像流来检索项目中标记的镜像。
有关策展的镜像流集合,请参阅 OpenShift 镜像流和模板库。
使用镜像流时,务必要了解镜像流标签指向什么以及如何对标签和镜像的更改产生影响。例如:
-
如果您的镜像流标签指向容器镜像标签,则需要了解如何更新容器镜像标签。例如,容器镜像标签
docker.io/ruby:2.5
指向 v2.5 ruby 镜像,但容器镜像标签docker.io/ruby:latest
更改有主要版本。因此,镜像流标签所指向的容器镜像标签可以告诉您镜像流标签的稳定程度。 - 如果您的镜像流标签跟随另一个镜像流标签,而不是直接指向容器镜像标签,那么镜像流标签可能会更新,以便在以后遵循不同的镜像流标签。这个更改可能会导致获取不兼容的版本更改。
3.5.2.1. 重要术语
- Docker 软件仓库
相关容器镜像和标识它们的标签的集合。例如,OpenShift Jenkins 镜像位于 Docker 存储库中:
docker.io/openshift/jenkins-2-centos7
- 容器 registry
可以从 Docker 存储库存储和服务镜像的内容服务器。例如:
registry.redhat.io
- 容器镜像
- 可以作为容器运行的特定一组内容。通常与 Docker 存储库中的特定标签关联。
- 容器镜像标签
- 应用到存储库中容器镜像的标签,用于区分特定镜像。例如,这里 3.6.0 是一个标签:
docker.io/openshift/jenkins-2-centos7:3.6.0
可以更新容器镜像标签,以便可以随时指向新的容器镜像内容。
- 容器镜像 ID
- 可用于拉取镜像的 SHA(安全哈希算法)代码。例如:
docker.io/openshift/jenkins-2-centos7@sha256:ab312bda324
SHA 镜像 ID 不能更改。特定 SHA 标识符会始终引用完全相同的容器镜像内容。
- 镜像流
- 一个 OpenShift Container Platform 对象,其中包含指向由标签识别的任意数量的 Docker 格式容器镜像的指针。您可以将镜像流视为等同于 Docker 存储库。
- 镜像流标签
- 指向镜像流中镜像的命名指针。镜像流标签与容器镜像标签类似。请参阅以下镜像流标签。
- 镜像流镜像
- 允许您从标记了特定容器镜像的特定镜像流中检索该镜像。镜像流镜像是一个 API 资源对象,用于收集一些有关特定镜像 SHA 标识符的元数据。请参阅以下镜像流镜像。
- 镜像流触发器
- 当镜像流标签更改时引发特定操作的触发器。例如,导入可导致标签值变化。当有部署、构建或其他资源监听这些信息时,就会启动触发器。请参阅以下镜像流触发器。