乐趣区

关于云计算:SpringBoot23镜像方案为什么要做多个layer

欢送拜访我的 GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,波及 Java、Docker、Kubernetes、DevOPS 等;

背景

  1. [《体验 SpringBoot(2.3)利用制作 Docker 镜像 (官网计划)》]() 一文中,咱们体验了官网举荐的镜像制作计划,执行 docker history 命令观察镜像外部,发现是由多个 layer 组成的,如下图:

  1. 问题来了:搞这么多 layer 干啥?接下来以图文形式,您一起了解 docker 镜像 layer 对 java 开发者的的作用;

申明

本文的指标是通过图文帮忙 java 开发者了解 docker 镜像的 layer 作用,内容和理论状况并未齐全保持一致,例如根底镜像的 layer 没有提到,而且 java 镜像的 layer 可能不止业务镜像、配置文件、依赖库这三层;

常见角色

应用 docker 时,有三个常见角色:

  1. 镜像制作者:本文中就是 SpringBoot 利用开发者,写完代码把利用做成 docker 镜像;
  2. docker 公共镜像仓库:镜像制作者将镜像推送到仓库给大家应用;
  3. 镜像使用者:从镜像仓库将镜像下载到本地应用;

接下来的故事围绕上述三个角色开展;

从制作到应用的过程

  1. 如下图,SpringBoot 利用开发者,写完代码把利用做成 docker 镜像,该镜像的 TAG 是 1.0,此时开发者将镜像推送到公共仓库时,一共要推送三个 layer:

  1. 接下来,使用者要下载镜像,就从镜像仓库下载三个 layer:

  1. 此时,三个角色领有的内容都是一样,都是三个 layer:

  1. 这时候 SpringBoot 开发者批改了业务代码,于是做了个新的镜像(TAG 是 2.0),而后推送到镜像仓库;
  2. <font color=”red”> 重点来了 </font>:因为只改了业务代码,因而只有业务 class 的 layer 是新的,只有这个 layer 会被推送到仓库,如下图:

  1. 对镜像使用者来说,如果之前下载过 1.0 的镜像,此时要用 2.0 镜像的话,只有从仓库下载最新的业务 class 的 layer 即可:

  1. 最终后果如下,公共仓库和镜像使用者都已最小的代价失去了 2.0 镜像:


可见,应用多个 layer 的镜像,在镜像的散发过程中,相比繁多 layer 的镜像会更加高效,尤其是应用 hub.docker.com 这样的外网私有仓库,以及频繁公布新版的场景下;

你不孤独,欣宸原创一路相伴

  1. Java 系列
  2. Spring 系列
  3. Docker 系列
  4. kubernetes 系列
  5. 数据库 + 中间件系列
  6. DevOps 系列

欢送关注公众号:程序员欣宸

微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游 Java 世界 …
https://github.com/zq2599/blog_demos

退出移动版