1. 程式人生 > >SpringBoot-2.3映象方案為什麼要做多個layer

SpringBoot-2.3映象方案為什麼要做多個layer

### 歡迎訪問我的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