推包出现Mounted from 问题

前言

  • 多个服务在同一台机器上打镜像包,推送镜像到harbor过程中,可以看到打包日志中出现Mounted from ***的字眼,开发同学看到会很疑惑,这打包正常吗?代码跟这个***没有关联的,为什么会出现这个呢?
  • 比如下面虽然a,b,c,d,e,f,g服务在同一台机器打包镜像,但是他们直接没有联系的,为什么会出现 Mounted from harbor/service-b 呢?
### 部分jenkins打包日志
09:54:25 [开始推送镜像...]
09:54:25 + docker push harbor.com/harbor/service-a:77eb678f7147737a10141ef61c1de16b4955190c
09:54:25 The push refers to a repository [harbor.com/harbor/service-a]
09:54:25 3d8557da29c3: Preparing
09:54:25 3c0f64681754: Preparing
09:54:25 84b15712ff85: Preparing
09:54:25 3638c4b9c60d: Preparing
09:54:25 e7cc650e5dce: Preparing
09:54:25 9e18425967c4: Preparing
09:54:25 3fc9cda50b8a: Preparing
09:54:25 4826cdadf1ef: Preparing
09:54:25 3fc9cda50b8a: Waiting
09:54:25 e7cc650e5dce: Waiting
09:54:25 9e18425967c4: Waiting
09:54:25 4826cdadf1ef: Waiting
09:54:25 3638c4b9c60d: Mounted from harbor/service-b
09:54:26 84b15712ff85: Mounted from harbor/service-c
09:54:26 e7cc650e5dce: Mounted from harbor/service-d
09:54:26 9e18425967c4: Mounted from harbor/service-e
09:54:26 3fc9cda50b8a: Mounted from harbor/service-f
09:54:26 3c0f64681754: Pushed
09:54:26 4826cdadf1ef: Mounted from harbor/service-g
09:54:39 3d8557da29c3: Pushed
09:54:41 77eb678f7147737a10141ef61c1de16b4955190c: digest: sha256:ca041c91a091f2c543855eb8fe608722a3fa953e6781189e2b77b1fe98c66051 size: 2004

通俗解释

  1. 我们知道镜像打包都是分层次打包的,服务第一次打包会去下载Dockerfile中定义的基础镜像,比如jdk:1.8.13,如果内容大的话耗时会比较长。

  2. 当其他服务也用到的是jdk:1.8.13这个镜像作为基础镜像时,docker会检查本地存不存在,如已存在了就不会再下载了,这是docker定义好的策略,既节省空间又节省时间

  3. 虽然各服务间没有联系,但是各服务用到依赖可能是一样的,比如java服务,就可能用的是同一个依赖jar包,所以服务a打包完了,去推包时docker也会检查harbor是否已存在依赖jar包。

  4. 所以同样的策略也存在于仓库harbor,当发现仓库已经存在了相同的“层”(比如依赖jar包),我们执行docker push时将会跳过上传此层的过程,反之docker告诉我们该层harbor已经存在了,并且返回给你存在的信息,也就是3fc9cda50b8a: Mounted from harbor/service-f,‘3fc9cda50b8a’代表该层的hash值,‘harbor/service-f’ 代码目录位置

明白了吗?同样的策略既节省了harbor空间又节省推包的时间。

官方解释

image

posted @ 2022-05-06 11:03  大切切  阅读(2346)  评论(1编辑  收藏  举报