《OpenShift 4.x HOL教程汇总》

OpenShift 4 之 Image Registry、Image 和 ImageStream 概念和相关操作

  • 概念篇
    • 1. Container Image(容器镜像)
    • 2. ImageStream
    • 3. Internal Registry和External Registry
  • 操作篇
    • 根据ImageStream的Image元数据自动拉取容器镜像
    • 增加标签
    • 删除并恢复标签
    • 其它镜像操作

概念篇

1. Container Image(容器镜像)

不用再解释了,就是容器镜像。以前叫Docker Image,现在叫Container Image更准确些,因为有了OCI容器规范后,容器不再是Docker一家的了。

2. ImageStream

ImageStream是OpenShift独有的一种对象,在Kubernetes中没有对应的对象。它主要目标是简化容积镜像管理,机制就是通过使用标签实现镜像指针。ImageStream包括一系列”标签指针“指向实际的容器,例如下图有latest、8和7版本的容器指针,它们分别指向了不同位置和版本的容器镜像。ImageStream本身并不保存镜像,而是只保存容器元数据和”标签指针“。

ImageStream记录OpenShift使用的Container Image的元数据,这些元数据包括:

  • ImageStreamTag: 指向Container Image的标签。
  • ImageStreamImage: 是ImageStreamTag实际指向的Image。
  • ImageStreamTrigger: 当ImageStreamImage发生变化后,通过ImageStreamTrigger可获取该事件。通常使用ImageStreamTrigger触发依赖变化Image的上层Image进行自动镜像更新。

3. Internal Registry和External Registry

OpenShift内部自带Image Registry用来保存两类Container Image。

  1. 一种是Base Image:顾名思义,就是应用使用的基础镜像。Base Image里主要包括应用运行环境,一般不包括应用代码。例如Java应用的Base Image至少要包括JDK。
  2. 另一种是App Image:即将应用+Base Image打包的应用镜像。
    OpenShift内部自带Image Registry和外部Image Registry的关系如下图。Base Image可以由OpenShift自动从External Registry上拉到Internal Registry,另外OpenShift会将构建好的App Image推送到Internal Registry。

操作篇

以下子章节之间有依赖关系,请从开始进行操作

根据ImageStream的Image元数据自动拉取容器镜像

  1. 执行命令创建项目my-container-image。
$ oc new-project my-container-image
  1. 然后获取的容器元数据,并建立ImageStream。
#方法1:为dockerhub上的openshift/deployment-example:v1镜像打标签deployment-example:v1
$ oc tag docker.io/openshift/deployment-example:v1 deployment-example:v1#方法2:导入外部Image的元数据到OOpenShift
$ oc import-image docker.io/openshift/deployment-example:v1 --confirm
  1. 在对外部镜像打标签后,OpenShift会自动获取Image元数据,并在OpenShift中通过ImageStream(简写 IS)记录这些Image的元数据信息。执行命令查看ImageStream信息,下面是包括tag为v1版容器镜像的ImageStream。
$ oc describe is deployment-example
Namespace:      my-container-image
Created:        9 minutes ago
Labels:         <none>
Annotations:        openshift.io/image.dockerRepositoryCheck=2019-12-06T06:23:26Z
Image Repository:   default-route-openshift-image-registry.apps-crc.testing/my-container-image/deployment-example
Image Lookup:       local=false
Unique Images:      1
Tags:           1
v1tagged from docker.io/openshift/deployment-example:v1*docker.io/openshift/deployment-example@sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b
  1. 运行以下命令,查看ImageStream的tag列表。
$ oc get istag
NAME                    IMAGE REF                                                                                                        UPDATED
deployment-example:v1   docker.io/openshift/deployment-example@sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b   12 minutes ago
  1. 查看上面istag指向Image的详细信息,其中包括分层文件。
$ oc get istag
NAME                    IMAGE REF                                                                                                        UPDATED
deployment-example:v1   docker.io/openshift/deployment-example@sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b   12 minutes ago
[dawnsky@rhel76 crc]$ oc describe istag deployment-example:v1
Image Name: sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b
Docker Image:   docker.io/openshift/deployment-example@sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b
Name:       sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b
Created:    14 minutes ago
Annotations:    image.openshift.io/dockerLayersOrder=ascending
Image Size: 5.77MB in 6 layers
Layers:     0B  sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d45.77MB   sha256:50438f3701c47319ff1c8189ff19f5a8c779f2479aa2066979b930c7dbb3bde80B   sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d40B   sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d40B   sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d40B   sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
Image Created:  4 years ago
Author:     Clayton Coleman <ccoleman@redhat.com>
Arch:       amd64
Entrypoint: /deployment v1
Working Dir:    <none>
User:       <none>
Exposes Ports:  8080/tcp
Docker Labels:  <none>
Environment:    COLOR=#006e9c
  1. 基于ImageStream的v1指向的Image创建应用。最后访问应用,可以看到页面返回的v1版的应用。
$ oc new-app my-container-image/deployment-example:v1
$ oc expose svc deployment-example
$ curl $(oc get route deployment-example -o template --template '{{.spec.host}}') | grep h1
  1. 执行命令查看events事件,可以看到有3项,其中名为deployment-example的Image是在第一次部署应用的时候才从网上pulled到OpenShift本地的Internal Registry。
$ oc get events | grep Pull
15m         Normal   Pulled              pod/deployment-example-1-deploy              Container image "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:9ac5a8dceed67e3c3e1c018dc581bf5f03d77a20a2f1ca1bf00c32b5e75b19f6" already present on machine
14m         Normal   Pulling             pod/deployment-example-1-djw48               Pulling image "openshift/deployment-example@sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b"
14m         Normal   Pulled              pod/deployment-example-1-djw48               Successfully pulled image "openshift/deployment-example@sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b"

增加标签

  1. 在ImageStream中增加“latest”的标签,并让它指向v1版的Image。此时可以看到v1和latest指向的同一个Image。
$ oc tag docker.io/openshift/deployment-example:v1 deployment-example:latest
$ oc get istag
NAME                        IMAGE REF                                                                                                        UPDATED
deployment-example:latest   docker.io/openshift/deployment-example@sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b   8 seconds ago
deployment-example:v1       docker.io/openshift/deployment-example@sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b   19 minutes ago
  1. 设置ImageStream的latest标签指向v2版的Image。然后通过查看ImageStream信息,其中记录了每个tag指向的历史Image。可以看到当前latest指向v2的Image,不过以前指向的是v1的Image。
$ oc tag docker.io/openshift/deployment-example:v2 deployment-example:latest
$ oc describe is deployment-example
Name:           deployment-example
Namespace:      my-container-image
Created:        26 minutes ago
Labels:         <none>
Annotations:        openshift.io/image.dockerRepositoryCheck=2019-12-06T07:50:11Z
Image Repository:   default-route-openshift-image-registry.apps-crc.testing/my-container-image/deployment-example
Image Lookup:       local=false
Unique Images:      2
Tags:           2latesttagged from docker.io/openshift/deployment-example:v2* docker.io/openshift/deployment-example@sha256:1318f08b141aa6a4cdca8c09fe8754b6c9f7802f8fc24e4e39ebf93e9d58472b4 minutes agodocker.io/openshift/deployment-example@sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b7 minutes agov1tagged from docker.io/openshift/deployment-example:v1* docker.io/openshift/deployment-example@sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b26 minutes ago

删除并恢复标签

  1. 删除ImageStream中v1的tag。然后再查看ImageStream,确认已经没有单独的v1版tag的信息了。但是还可通过latest的历史查到v1版tag指向的ImageStreamImage。
$ oc tag -d deployment-example:v1
$ oc describe is deployment-example
Name:           deployment-example
Namespace:      my-container-image
Created:        45 minutes ago
Labels:         <none>
Annotations:        openshift.io/image.dockerRepositoryCheck=2019-12-06T07:50:11Z
Image Repository:   default-route-openshift-image-registry.apps-crc.testing/my-container-image/deployment-example
Image Lookup:       local=false
Unique Images:      2
Tags:           1
latesttagged from docker.io/openshift/deployment-example:v2* docker.io/openshift/deployment-example@sha256:1318f08b141aa6a4cdca8c09fe8754b6c9f7802f8fc24e4e39ebf93e9d58472b23 minutes agodocker.io/openshift/deployment-example@sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b25 minutes ago
  1. 从历史的ImageStreamImage恢复istag。
$ oc tag --source=docker openshift/deployment-example@sha256:c505b916f7e5143a356ff961f2c21aee40fbd2cd906c1e3feeb8d5e978da284b deployment-example:v1
$ oc get istag

其它镜像操作

  1. 参考《OpenShift 4 之通过直接访问内部的 Image Registry 操作容器镜像》,实现对Internal Registry的直接操作。
  2. 查看所有ImageStreamImage(即ImageStream包括的每个以版本的Image)的镜像大小。
$ oc adm top images
  1. 查看所有ImageStream的大小(包括了每个ImageStream中所有ImageStreamImage)。
oc adm top imagestreams

OpenShift 4 之 Image Registry、Image 和 ImageStream 概念和相关操作相关推荐

  1. OpenShift 之 Image Registry、Image 和 ImageStream 概念和相关操作

    概念篇 1. Container Image(容器镜像) 不用再解释了,就是容器镜像.以前叫Docker Image,现在叫Container Image更准确些,因为有了OCI容器规范后,容器不再是 ...

  2. Openshift创建Router和Registry

    Openshift创建Router和Registry: [root@DockerServer openshift]# oadm policy add-scc-to-user privileged sy ...

  3. OpenShift 4 - 部署Mirror Registry并复制Image

    <OpenShift 4.x HOL教程汇总> 文章目录 安装Mirror Registry运行环境 复制Image到Mirror Registry 准备登陆认证文件 生成远程Regist ...

  4. docker registry push 覆盖_docker容器和镜像操作 - 恋恋风辰

    基于本地模板导入镜像 假如本地有一个ubuntu系统模板压缩包, 可以通过import导入生成新的镜像 cat ubuntu-18.04.tar.gz | docker import - ubuntu ...

  5. OpenShift 4 - 用Pull Secret访问红帽官方或其他外部Registry的Image

    <OpenShift 4.x HOL教程汇总> 文章目录 OpenShift如何访问外部Registry的Image 全局ImageStream 本地ImageStream 通过opens ...

  6. OpenShift 4 - 向OpenShift内部Image Registry推送Image

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.6环境中验证 文章目录 了解OpenShift内部Image Registry 向内部Image R ...

  7. OpenShift 4 概念 - OpenShift是如何通过ImageStream访问Image的

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.6环境中验证 文章目录 ImageStream基本概念 Internal Image 和 Exter ...

  8. OpenShift 4 Hands-on Lab (4) - 用ImageStream操作Image

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 文章目录 什么是ImageStream 从Image生成ImageStream Ima ...

  9. OpenShift 4 之通过直接访问内部的 Image Registry 操作容器镜像

    <OpenShift 4.x HOL教程汇总> OpenShift 4 的运行环境开始使用CoreOS Linux作为支撑Container运行的操作系统.CoreOS Linux是一个非 ...

最新文章

  1. [BZOJ 3143][Hnoi2013]游走(高斯消元+期望)
  2. Mercurial入门学习
  3. Seata 新特性,APM 支持 SkyWalking
  4. 牛逼!Python的类和对象(长文系列第⑤篇)
  5. 你最擅长哪种数学思维?
  6. SteamVR导致场景相机不正常
  7. 图论 —— 生成树 —— 最小生成树 —— Prim
  8. linux -- su和sudo命令的区别
  9. php文件上传非法,ThinkPHP 3.2.3 版本上传文件出现“非法上传文件!”错误解决办法...
  10. 《正则表达式必知必会》读书笔记【语法整理】
  11. ssfn授权_Steam盗号木马窃取授权文件,360安全大脑强力拦截
  12. Kubernetes 在知乎上的应用
  13. 打印机的系统是linux吗,linux下打印机的配置和使用
  14. Navicat提示Access violation at address ... in module ‘navicat.exe‘.Write of address ...
  15. 2021年安全员-C证(陕西省)考试资料及安全员-C证(陕西省)新版试题
  16. 全面解读java虚拟机(面试考点大全)d
  17. Win7和Win10如何使文件的视图默认按详细信息显示
  18. gitee基本使用方法(Tortoisegit)
  19. github服务器在美国吗_GitHub上的政府布道者介绍美国开放技术
  20. 程序员:孤独的人是可耻的!

热门文章

  1. 京瓷 打印 打印机 账户_UV打印机买回来成废铁?不是选择不对,而是你想太多了……...
  2. C语言中定义整形可以连等吗,关于一道分解整数为N个连数整数的编程题
  3. html层重叠,HTML/CSS相关问题 z-Index层重叠顺序
  4. 浪潮网上测评没通过_快钱通过等保2.0认证 稳守用户资金信息安全
  5. common java socket,JAVA I/O(四)网络Socket和ServerSocket
  6. php嘲讽,PHP为何能够受到大家追捧,又为什么饱受嘲讽?
  7. 绘制自己组合的k线图_短线投资者必备的四种双K线组合抄底技巧,次次选中黑马股,精准率超高...
  8. 必备的中国风PNG免扣元素点缀,尽显国潮韵味
  9. 双11后,翘首盼快递物流素材模板,先来看看各快递公司的海报吧!
  10. UI设计素材资源|艺术感加分背景