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

程式設計師欣宸發表於2020-12-17

歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;

背景

  1. 《體驗SpringBoot(2.3)應用製作Docker映象(官方方案)》一文中,我們體驗了官方推薦的映象製作方案,執行docker history命令觀察映象內部,發現是由多個layer組成的,如下圖:
    在這裡插入圖片描述
  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:
    在這裡插入圖片描述
  2. 接下來,使用者要下載映象,就從映象倉庫下載三個layer:
    在這裡插入圖片描述
  3. 此時,三個角色擁有的內容都是一樣,都是三個layer:
    在這裡插入圖片描述
  4. 這時候SpringBoot開發者修改了業務程式碼,於是做了個新的映象(TAG是2.0),然後推送到映象倉庫;
  5. 重點來了:因為只改了業務程式碼,因此只有業務class的layer是新的,只有這個layer會被推送到倉庫,如下圖:
    在這裡插入圖片描述
  6. 對映象使用者來說,如果之前下載過1.0的映象,此時要用2.0映象的話,只要從倉庫下載最新的業務class的layer即可:
    在這裡插入圖片描述
  7. 最終結果如下,公共倉庫和映象使用者都已最小的代價得到了2.0映象:
    在這裡插入圖片描述
    可見,使用多個layer的映象,在映象的分發過程中,相比單一layer的映象會更加高效,尤其是使用hub.docker.com這樣的外網公有倉庫,以及頻繁釋出新版的場景下;

你不孤單,欣宸原創一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 資料庫+中介軟體系列
  6. DevOps系列

歡迎關注公眾號:程式設計師欣宸

微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界...
https://github.com/zq2599/blog_demos

相關文章