客户端(本地)docker镜像存储结构

这篇具有很好参考价值的文章主要介绍了客户端(本地)docker镜像存储结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考自:

Docker学习:Image的本地存储结构_weixin_34054866的博客-CSDN博客

                docker中各ID之间的关系和计算(二)-layerID-diffID-chainID-cacheID的计算_Penguinbupt的博客-CSDN博客

本地下载的docker镜像存储在/var/lib/docker/image/overlay2/目录下。

在一上目录下有distribution 、 imagedb 、 layerdb 三个目录和 repositories.json文件。

客户端(本地)docker镜像存储结构

repositories.json中存储的是本地所有镜像列表,如下

客户端(本地)docker镜像存储结构

repositories.json存储格式为:

{"Repositories":

        {"reponame":

                {"reponame:tag":"sha256:digest1",

                 "reponame@sha256:digest2":sha256:digest1,.......

                },

                .......

        }

}

digest1和digest2不同,digest1应该是镜像内容的摘要,digest2的话.......?同一个镜像一个用tag标识,一个用sha256,即digest2标识

在imagedb目录下有content 和 metadata两个目录

metadata目录中存储每个镜像的parent镜像的ID以及当前镜像的最后更新时间,没有parent镜像的目录为空

客户端(本地)docker镜像存储结构

parent里面的内容:

客户端(本地)docker镜像存储结构

 content目录存储镜像的json格式的描述信息:

  • config: 未来根据这个image启动container时,config里面的配置就是运行container时的默认参数。
  • container: 此处为一个容器ID,一般我们执行docker build构建镜像时,可以看见是不断地生成新的container,然后提交为新的image,此处的容器ID即生成该镜像时临时容器的ID,后面通过docker build构建镜像会进一步验证。
  • container_config:上述临时容器的配置,可以对比containner_configconfig的内容,字段完全一致,验证了config的作用。
  • history:构建该镜像的所有历史命令
  • rootfs:该镜像包含的layer层的diff id

 layerdb目录:

layerdb目录下有mounts 、 sha256 、 tmp三个子目录

最重要的为sha256目录,其内为每个layer解压后的内容计算的sha256摘要为名字的目录,即layer的diffID

客户端(本地)docker镜像存储结构

再里面就是:

  • diff:layer 的diff ID

客户端(本地)docker镜像存储结构

  •  size:layer的大小(字节)。当计算为MB时是这里面的数值除以1000000,而不是除以(1024*1024)

客户端(本地)docker镜像存储结构

  • tar-split.json.gz:layer层数据tar压缩包的split文件。该文件生成需要依赖tar-split,通过这个文件可以还原layer的tar包。
  • cache-id:内容为一个uuid,指向Layer本地的真正存储位置

客户端(本地)docker镜像存储结构

那么Layer本地真正的存储位置又在何处呢?便是上面提到的/var/lib/docker/overlay2目录下:

客户端(本地)docker镜像存储结构

 需要注意,layerdb目录下除了diff、size、cache_id和tar-split.json.gz文件,还应该包括一个parent文件,文件存储了当前Layer层的父层chain_id,因为当前alpine镜像只有一层,所以也就没有parent。

客户端(本地)docker镜像存储结构

 一个layer的chain-id为当前layer的id和所有parent layer的id的相加得出

distribution目录

该目录包含了Layer层diif id和digest之间的对应关系。里面是diffid-by-digest 、 v2metadata-by-diffid两个目录。

  • 其中diffid-by-digest保存了digest(layerID)->diffID的映射关系,即distribution hashes和Content hashes的映射关系。也即是正向查询

  • v2metadata-by-diffid保存了diffid -> (digest,repository)的映射关系,这可以方便查找layer的digest及其所属的repository。也即是反向查询,可以从diffID->layerID(其实就是digest)。

客户端(本地)docker镜像存储结构

 文章来源地址https://www.toymoban.com/news/detail-421315.html

到了这里,关于客户端(本地)docker镜像存储结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 服务器端使用django websocket,客户端使用uniapp 请问服务端和客户端群组互发消息的代码怎么写的参考笔记

    2023/8/29 19:21:11 服务器端使用django websocket,客户端使用uniapp 请问服务端和客户端群组互发消息的代码怎么写 2023/8/29 19:22:25 在服务器端使用Django WebSocket和客户端使用Uniapp的情况下,以下是代码示例来实现服务器端和客户端之间的群组互发消息。 服务器端代码 (使用Django Chann

    2024年02月11日
    浏览(34)
  • Docker客户端命令

    使用  podman  模拟  Docker CLI  的功能,并创建  /etc/containers/nodocker  文件以静默消息。管理 pods、容器和镜像。 用法: podman [选项] [命令] 命令 : attach 附加到一个正在运行的容器 auto-update 根据容器的自动更新策略自动更新容器 build 使用 Containerfiles 中的指令构建镜像 commi

    2024年04月14日
    浏览(31)
  • 开源对象存储系统minio部署配置与SpringBoot客户端整合访问

    官方介绍: MinIO 提供高性能、与S3 兼容的对象存储系统,让你自己能够构建自己的私有云储存服务。在 GNU AGPL v3 下是 100% 开源的。 部署简单,只有一个minio可执行文件。 高性能,在 32 个 NVMe 驱动器节点和 100Gbe 网络上发布的 GET/PUT 结果超过 325 GiB/秒和 165 GiB/秒。 Kubernetes原

    2024年02月09日
    浏览(34)
  • 如何将本地websocket服务端从本地暴露至公网实现客户端远程连接

    1. Java 服务端demo环境 jdk1.8 框架:springboot+maven 工具IDEA 2. 在pom文件引入第三包封装的netty框架maven坐标 注意:pom文件里需注释掉springbootweb启动器,web启动器默认是tomcat服务启动,会和netty服务冲突 3. 创建服务端,以接口模式调用,方便外部调用 4. 启动服务,出现以下信息表示启动成功

    2024年04月10日
    浏览(36)
  • 当在本地,向服务器发送信息时,服务器接受信息返回给客户端,此时采用多行读取时,客户端接收不到Server的信息

        此时的服务器还在等待输入,客户端也在等待服务器的应答,产生死锁,僵持不下。 经过一番尝试后发现, 当使用单行读取的时候,使用 bufferedWriter.newLine(); 此时就不用关闭socket的输出流 , 即socket.shutdownOutput();可以省略,当然写上去也没错。 当使用多行读取的时候,

    2024年02月07日
    浏览(35)
  • 本地运行eureka客户端,Actuator查看ip显示为2.0.0.1

    由于开发共用一套开发环境,每个开发人员运行项目时,都会在eureka注册中心生成一个应用实例,便形成了集群模式。为了方便开发,本地启动了一个基础服务模块,提供给其他开发者调用,但是调用时出现异常,主要异常信息如下: 从异常中可以看出,访问的时2.0.0.1这个

    2024年02月09日
    浏览(25)
  • rocketmq客户端本地日志文件过大调整配置(导致pod缓存cache过高)

            在使用rocketmq时,发现本地项目中文件越来越大,查找发现在/home/root/logs/rocketmqlog目录下存在大量rocketmq_client.log日志文件。 开启slf4j日志模式,在项目启动项中增加-Drocketmq.client.logUseSlf4j=true 因为配置使用的是System.getProperty获取,所以只能使用系统环境配置。 调整日

    2024年02月15日
    浏览(30)
  • client-go源码结构及客户端对象

    G  Goup 资源组,包含一组资源操作的集合 V Version 资源版本,用于区分不同API的稳定程度及兼容性 R Resource 资源信息,用于区分不同的资源API K Kind 资源对象类型,每个资源对象都需要Kind来区分它自身代表的资源类型 (1)通过 GVR 可以构造 REST Api  进行接口调用,而 GVK 可以

    2024年04月26日
    浏览(27)
  • Docker部署Nginx,无法获取客户端真实ip地址

    在部署docker版本nginx进行请求转发,意外发现nginx打印日志中的客户端ip并非为客户端的真实ip(221.237.xxx.xxx),而是docker虚拟网卡的ip(172.17.0.1) 开始猜测是nginx配置问题,对比其他环境,发现配置相同,但其他环境未出现此情况 通过查询资料,推测是docker网桥和linux防火墙存在

    2023年04月21日
    浏览(26)
  • 了解多人游戏下的客户端与服务器体系结构

    直连模式下,选择一个玩家充当服务器(房主)。如果游戏出现不同步,那么均按房主的世界来,玩家1可以作弊修改其游戏来影响其他玩家的世界 针对两个玩家来说,直连连接质量更好,延迟小 如果玩家数量很多,不同玩家间的通信则需要靠房主为中介,那通信质量与房主

    2024年02月12日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包