歡迎訪問個人GitHub
https://github.com/zq2599/blog_demosjava
內容:全部原創文章分類彙總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;git
背景
- 《體驗SpringBoot(2.3)應用製做Docker鏡像(官方方案)》一文中,咱們體驗了官方推薦的鏡像製做方案,執行docker history命令觀察鏡像內部,發現是由多個layer組成的,以下圖:
![在這裏插入圖片描述](http://static.javashuo.com/static/loading.gif)
- 問題來了:搞這麼多layer幹啥?接下來以圖文方式,您一塊兒理解docker鏡像layer對java開發者的的做用;
聲明
本文的目標是經過圖文幫助java開發者理解docker鏡像的layer做用,內容和實際狀況並未徹底保持一致,例如基礎鏡像的layer沒有提到,並且java鏡像的layer可能不止業務鏡像、配置文件、依賴庫這三層;程序員
常見角色
使用docker時,有三個常見角色:github
- 鏡像製做者:本文中就是SpringBoot應用開發者,寫完代碼把應用作成docker鏡像;
- docker公共鏡像倉庫:鏡像製做者將鏡像推送到倉庫給你們使用;
- 鏡像使用者:從鏡像倉庫將鏡像下載到本地使用;
接下來的故事圍繞上述三個角色展開;docker
從製做到使用的過程
- 以下圖,SpringBoot應用開發者,寫完代碼把應用作成docker鏡像,該鏡像的TAG是1.0,此時開發者將鏡像推送到公共倉庫時,一共要推送三個layer:
![在這裏插入圖片描述](http://static.javashuo.com/static/loading.gif)
- 接下來,使用者要下載鏡像,就從鏡像倉庫下載三個layer:
![在這裏插入圖片描述](http://static.javashuo.com/static/loading.gif)
- 此時,三個角色擁有的內容都是同樣,都是三個layer:
![在這裏插入圖片描述](http://static.javashuo.com/static/loading.gif)
- 這時候SpringBoot開發者修改了業務代碼,因而作了個新的鏡像(TAG是2.0),而後推送到鏡像倉庫;
- 重點來了:由於只改了業務代碼,所以只有業務class的layer是新的,只有這個layer會被推送到倉庫,以下圖:
![在這裏插入圖片描述](http://static.javashuo.com/static/loading.gif)
- 對鏡像使用者來講,若是以前下載過1.0的鏡像,此時要用2.0鏡像的話,只要從倉庫下載最新的業務class的layer便可:
![在這裏插入圖片描述](http://static.javashuo.com/static/loading.gif)
- 最終結果以下,公共倉庫和鏡像使用者都已最小的代價獲得了2.0鏡像:
![在這裏插入圖片描述](http://static.javashuo.com/static/loading.gif)
可見,使用多個layer的鏡像,在鏡像的分發過程當中,相比單一layer的鏡像會更加高效,尤爲是使用hub.docker.com這樣的外網公有倉庫,以及頻繁發佈新版的場景下;
你不孤單,欣宸原創一路相伴
- Java系列
- Spring系列
- Docker系列
- kubernetes系列
- 數據庫+中間件系列
- DevOps系列
歡迎關注公衆號:程序員欣宸
微信搜索「程序員欣宸」,我是欣宸,期待與您一同暢遊Java世界...
https://github.com/zq2599/blog_demos數據庫