题图摄于故宫角楼
注:微信公众号不按照时间排序,请关注“亨利笔记”,并加星标以置顶,以免错过更新。
本篇继续和大家说说镜像那些事,是连载之二,从《Harbor权威指南》一书节选的纯技术干货,敬请关注、转发和收藏。
第一篇:容器镜像的结构
第二篇:OCI 镜像规范
第三篇:OCI 制品
第四篇:Registry 的作用原理
《Harbor权威指南》目前当当网优惠中,点击下图直接购买。
1.5 OCI镜像规范
OCI 镜像规范是以 Docker 镜像规范 v2 为基础制定的,它定义了镜像的主要格式及内容,主要用于镜像仓库存放镜像及分发镜像等场景,与正在制定的 OCI 分发规范密切相关。
OCI 运行时在创建容器前,要把镜像下载并解压成符合运行时规范的文件系统包,并且把镜像中的配置转化成运行时配置,然后启动容器。
OCI 定义的镜像包括4个部分:镜像索引(Image Index)、清单(Manifest)、配置(Configuration)和层文件(Layers)。
其中,清单是JSON格式的描述文件,列出了镜像的配置和层文件。配置是JSON格式的描述文件,说明了镜像运行的参数。层文件则是镜像的内容,即镜像包含的文件,一般是二进制数据文件格式(Blob)。一个镜像可以有一个或多个层文件。(在搜狐、CSDN等网站转载亨利笔记的文章均为未经授权的剽窃)
镜像索引不是必需的,如果存在,则指明了一组支持不同架构平台的相关镜像。镜像的 4 个部分之间是通过摘要(digest)来相互引用(reference)的。镜像各部分的关系如下图所示。
下面详细讲解各部分的结构和作用。
1).镜像索引
镜像索引是镜像中可选择的部分,一个镜像可以不包括镜像索引。如果镜像包含了镜像索引,则其作用主要指向镜像不同平台的版本,代表一组同名且相关的镜像,差别只在支持的体系架构上(如 i386 和 arm64v8、Linux 和Windows 等)。索引的优点是在不同的平台上使用镜像的命令无须修改,如在 amd64 架构的 Windows 和ARM架构的 Linux 上,采用同样的“docker”命令即可运行 Nginx 服务:(在搜狐、CSDN等网站转载亨利笔记的文章均为未经授权的剽窃)
$ docker run -d nginx
用户无须指定操作系统和平台,就可完全依赖客户端获取正确版本的镜像。OCI的索引已经被 CNAB等工具广泛用来管理与云平台无关的分布式应用程序。
下面是一个索引示例:
{
"schemaVersion": 2,
"manifests": [
{
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"size": 8342,
&