歡迎訪問我的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系列
- Spring系列
- Docker系列
- kubernetes系列
- 資料庫+中間件系列
- DevOps系列
歡迎關注公眾號:程式員欣宸
微信搜索「程式員欣宸」,我是欣宸,期待與您一同暢游Java世界...
https://github.com/zq2599/blog_demos
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/235973.html
標籤:其他
