歡迎訪問我的GitHub
https://github.com/zq2599/blog_demos
內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;
背景
- 《體驗SpringBoot(2.3)應用製作Docker映象(官方方案)》一文中,我們體驗了官方推薦的映象製作方案,執行docker history命令觀察映象內部,發現是由多個layer組成的,如下圖:
- 問題來了:搞這麼多layer幹啥?接下來以圖文方式,您一起理解docker映象layer對java開發者的的作用;
宣告
本文的目標是通過圖文幫助java開發者理解docker映象的layer作用,內容和實際情況並未完全保持一致,例如基礎映象的layer沒有提到,而且java映象的layer可能不止業務映象、配置檔案、依賴庫這三層;
常見角色
使用docker時,有三個常見角色:
- 映象製作者:本文中就是SpringBoot應用開發者,寫完程式碼把應用做成docker映象;
- docker公共映象倉庫:映象製作者將映象推送到倉庫給大家使用;
- 映象使用者:從映象倉庫將映象下載到本地使用;
接下來的故事圍繞上述三個角色展開;
從製作到使用的過程
- 如下圖,SpringBoot應用開發者,寫完程式碼把應用做成docker映象,該映象的TAG是1.0,此時開發者將映象推送到公共倉庫時,一共要推送三個layer:
- 接下來,使用者要下載映象,就從映象倉庫下載三個layer:
- 此時,三個角色擁有的內容都是一樣,都是三個layer:
- 這時候SpringBoot開發者修改了業務程式碼,於是做了個新的映象(TAG是2.0),然後推送到映象倉庫;
- 重點來了:因為只改了業務程式碼,因此只有業務class的layer是新的,只有這個layer會被推送到倉庫,如下圖:
- 對映象使用者來說,如果之前下載過1.0的映象,此時要用2.0映象的話,只要從倉庫下載最新的業務class的layer即可:
- 最終結果如下,公共倉庫和映象使用者都已最小的代價得到了2.0映象:
可見,使用多個layer的映象,在映象的分發過程中,相比單一layer的映象會更加高效,尤其是使用hub.docker.com這樣的外網公有倉庫,以及頻繁釋出新版的場景下;
你不孤單,欣宸原創一路相伴
歡迎關注公眾號:程式設計師欣宸
微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界...
https://github.com/zq2599/blog_demos