SpringBoot-2.3映象方案為什麼要做多個layer
阿新 • • 發佈:2020-12-17
### 歡迎訪問我的GitHub
[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos)
內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;
### 背景
1. [《體驗SpringBoot(2.3)應用製作Docker映象(官方方案)》]()一文中,我們體驗了官方推薦的映象製作方案,執行docker history命令觀察映象內部,發現是由多個layer組成的,如下圖:
![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201217075129842-2113679791.png)
2. 問題來了:搞這麼多layer幹啥?接下來以圖文方式,您一起理解docker映象layer對java開發者的的作用;
### 宣告
本文的目標是通過圖文幫助java開發者理解docker映象的layer作用,內容和實際情況並未完全保持一致,例如基礎映象的layer沒有提到,而且java映象的layer可能不止業務映象、配置檔案、依賴庫這三層;
### 常見角色
使用docker時,有三個常見角色:
1. 映象製作者:本文中就是SpringBoot應用開發者,寫完程式碼把應用做成docker映象;
2. docker公共映象倉庫:映象製作者將映象推送到倉庫給大家使用;
3. 映象使用者:從映象倉庫將映象下載到本地使用;
接下來的故事圍繞上述三個角色展開;
### 從製作到使用的過程
1. 如下圖,SpringBoot應用開發者,寫完程式碼把應用做成docker映象,該映象的TAG是1.0,此時開發者將映象推送到公共倉庫時,一共要推送三個layer:
![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201217075131151-1122989543.png)
2. 接下來,使用者要下載映象,就從映象倉庫下載三個layer:
![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201217075132073-1261637252.png)
3. 此時,三個角色擁有的內容都是一樣,都是三個layer:
![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201217075133093-637014222.png)
4. 這時候SpringBoot開發者修改了業務程式碼,於是做了個新的映象(TAG是2.0),然後推送到映象倉庫;
5. 重點來了:因為只改了業務程式碼,因此只有業務class的layer是新的,只有這個layer會被推送到倉庫,如下圖:
![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201217075134493-2033748941.png)
6. 對映象使用者來說,如果之前下載過1.0的映象,此時要用2.0映象的話,只要從倉庫下載最新的業務class的layer即可:
![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201217075135193-455393040.png)
7. 最終結果如下,公共倉庫和映象使用者都已最小的代價得到了2.0映象:
![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201217075135795-1977062764.png)
可見,使用多個layer的映象,在映象的分發過程中,相比單一layer的映象會更加高效,尤其是使用hub.docker.com這樣的外網公有倉庫,以及頻繁釋出新版的場景下;
### 你不孤單,欣宸原創一路相伴
1. [Java系列](https://xinchen.blog.csdn.net/article/details/105068742)
2. [Spring系列](https://xinchen.blog.csdn.net/article/details/105086498)
3. [Docker系列](https://xinchen.blog.csdn.net/article/details/105086732)
4. [kubernetes系列](https://xinchen.blog.csdn.net/article/details/105086794)
5. [資料庫+中介軟體系列](https://xinchen.blog.csdn.net/article/details/105086850)
6. [DevOps系列](https://xinchen.blog.csdn.net/article/details/105086920)
### 歡迎關注公眾號:程式設計師欣宸
> 微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界...
[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blo