当前位置: 首页 > news >正文

Docker--镜像分层与镜像摘要

镜像分层

Docker 镜像由一些松耦合得只读镜像层组成,Docker Daemon 负责堆叠这些镜像层,并将他们管理为一个整体,对外表现出得是一个独立得对象。

docker pull 拉取镜像时,每个pull complete 行就代表下载了一个镜像层,比如:

无标题

无2标题

为什么分层

分层得优势有:

  1. 每个分层只读,对分层得修改都是以新分层得形式出现,不会破坏原分层内容
  2. 每个分层只记录变更内容,所以节省空间
  3. 不同镜像间实现资源共享,即不同镜像对相同下层镜像得复用。

docker pull 在拉取之前会先获取要拉取镜像的所有imageID,然后再本地查找这些分层。如果存在,不再拉取,而是共享本地的分层,节省了空间和网络带宽。提高了拉取效率。

镜像层构成

每个镜像层由两部分构成:镜像文件系统和镜像json文件。他们具有相同的imageID。

镜像文件系统:拥有镜像所有镜像层的数据内容。

镜像json文件:描述镜像相关属性的集合,通过docker inspect 【镜像】可以查看。

镜像FS构成

docker镜像文件系统FS 由多个只读的镜像层组成,每层都有特定的功能。

这些只读镜像层根据位置与功能不同可分为两类:基础镜像层和扩展镜像层

无标3题

基础镜像层

所有镜像的最下层都有一个看得到的基础镜像层Base Image,基础镜像层的文件系统称为根文件系统rootfs。

而rootfs 是建立在Linux中“看不到的”引导文件系统bootfs 之上。

扩展镜像层

在基础镜像层之上的镜像层称为扩展镜像层,是对基础镜像层功能的扩展。

在Dockerfile 中。每条指令都是用于完成特定功能,而每个指令都会生产一个扩展镜像层。

容器层

无标4题

镜像运行起来就成了容器,而容器也具有文件系统。

容器的文件系统在docker镜像最外层之上增加了一个可读写的容器层

对文件的任何更改只存在于容器层,因此不会影响镜像本身。

容器要修改某个文件,会从容器层开始向下一层层的查找,直到找到为止,对文件的操作都会记录在容器层。

比如:要修改某个文件,容器层会在镜像层找到文件并copy到容器层,然后再进行修改。删除文件也只会将容器层中的文件副本删除。

可以看出,Docker容器就是一个叠加后的文件系统,这个容器层称为Union FIle System 联合文件系统。

Linux OS 启动过程

无标5题

微内核架构分为内核(Server)和服务模块(Client)。

LInux 的bootfs 由两部分组成:bootloader 和kernel

各个容器中的rootfs 就是由宿主机的kernel驱动的。

无6标题

镜像摘要(digest)

每个镜像都有一个长度为64位的16禁止字符串作为其摘要digest。

#查看摘要 方式一
docker inspect zookeeper:latest
# 查看摘要方式二
docker images zookeeper --digest

摘要是什么

摘要(digest) 是镜像内容的一Hash值,即所谓的Content Hash,只要镜像内容发生变化,其内容散列值就会改变。

默认的Hash算法是sha256

摘要的作用

区分相同<repository>:<tag>的不同镜像。

比如:镜像xxx:2.8 在运行中发现bug,然后进行了修复,然后使用原标签将其push回仓库,原镜像被覆盖。

但是生产环境中海油运行中未修复的镜像容器。此时标签无法区分镜像是修复前还是修复后,这时就只能查看digest 。

分发散列值

在push或pull时,都会对镜像进行压缩以减少网络带宽。但压缩会改变镜像内容,导致传输后与digest不符合。

为了解决这个问题,Docker 为镜像配置了Distribution Hash(分发散列值)。在镜像压缩后计算分发散列值,然后随镜像一同发生。接受方拿到后,立即计算压缩后镜像的分发散列值,与携带的分发散列值对比。如果相同,则传输没问题。

多架构镜像

Multi-architecture Image 多架构镜像,是某个镜像针对不同操作系统/系统架构 的不同镜像实现。

即镜像的<repository>:<tag>是相同的,但是针对的操作系统/系统架构不同。

多架构镜像原理

无论用户使用的是什么操作系统,通过docker pull 拉去到的一定是针对该操作系统的镜像,用户无需考虑操作系统问题。

Docker Hub能根据pull请求自动选择对应的镜像。

无7标题

镜像的多架构信息保存在Mainifest 文件中。

拉取镜像时,pull命令将OS与架构信息一并提交给Docker Hub。

Docker Hub根据<repository>:<tag>查找Manifest。如果不存在,直接查找并返回镜像。

如果存在。会根据Manifest 中记录的地址找到该镜像的位置。

http://www.gsyq.cn/news/1400751.html

相关文章:

  • 深入Linux DMA:为什么你的`dma_map_sg`调用可能悄悄走了SWIOTLB?
  • 施工企业CIO紧急通告:Lovable V3.2.1强制升级窗口期仅剩72小时(含兼容性风险矩阵与回滚黄金预案)
  • 东营市黄金回收 白银回收 铂金回收 彩金回收全攻略:五家靠谱门店横向评测,附避坑要点 - 前途无量YY
  • listmonk批量导入性能优化技巧:分块与并行处理
  • DrBERT-7GB多版本对比分析:7GB、4GB和Large模型性能评测
  • Flutter状态管理GetX详解:轻量级解决方案
  • 别再只测连接了!一份超全的蓝牙设备测试清单(含车载/耳机/打印机等实战场景)
  • C51编译器公共代码块优化与volatile函数控制
  • Windows音频终极神器:Equalizer APO系统级均衡器完全指南
  • XMC4000看门狗复位后程序停止问题解析与解决方案
  • 嵌入式学习之路->stm32篇-->(9)I2C通讯(下)
  • 如何快速上手hf_mirrors/wuhaicc/mt5_large:零基础也能玩转的多语言翻译模型教程
  • C++类链接错误解析与解决方案
  • 亚马逊宣布对外开放旗下物流,美版京东物流要来了?
  • 福安市黄金回收 白银回收 铂金回收 彩金回收全攻略:五家靠谱门店横向评测,附避坑要点 - 前途无量YY
  • 别再手动算归一化了!Origin 9.1 内置函数与脚本全解析,效率提升200%
  • 【信息科学与工程学】计算机科学与自动化——第四十四篇 路由器04 路由器TCAM芯片(1)
  • Harrier-OSS-v1-0.6B的32K上下文长度:处理长文档的文本嵌入最佳实践
  • 2026年Vibe Coding实战指南:141+工具生态与高效开发工作流
  • 3分钟掌握AI视频字幕去除神器:免费开源工具让硬字幕彻底消失
  • QKeyMapper终极指南:免费开源Windows按键映射工具,游戏办公全能助手
  • 嵌入式系统软件复位实现与看门狗定时器应用
  • AI代理授权新范式:从用户委托到平台信任治理的演进
  • 别再找破解版了!手把手教你用文本编辑器‘净化’Typora for Mac的试用提示
  • 安宁市黄金回收 白银回收 铂金回收 彩金回收全攻略:五家靠谱门店横向评测,附避坑要点 - 前途无量YY
  • 视频文件片段太多怎么办?合并视频我用QQ影音播放器
  • 5分钟获取VMware Workstation Pro 17永久许可证:新手完整激活指南
  • 8088 INT1单步执行例程
  • SRE值班系统设计:用自动化与规则引擎降低运维压力
  • ncmdump终极指南:5分钟掌握网易云NCM音乐解密技巧,实现跨设备自由播放