SpringBoot-2.3鏡像方案爲何要作多個layer

歡迎訪問個人GitHub

https://github.com/zq2599/blog_demosjava

內容:全部原創文章分類彙總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;git

背景

  1. 《體驗SpringBoot(2.3)應用製做Docker鏡像(官方方案)》一文中,咱們體驗了官方推薦的鏡像製做方案,執行docker history命令觀察鏡像內部,發現是由多個layer組成的,以下圖:
    在這裏插入圖片描述
  2. 問題來了:搞這麼多layer幹啥?接下來以圖文方式,您一塊兒理解docker鏡像layer對java開發者的的做用;

聲明

本文的目標是經過圖文幫助java開發者理解docker鏡像的layer做用,內容和實際狀況並未徹底保持一致,例如基礎鏡像的layer沒有提到,並且java鏡像的layer可能不止業務鏡像、配置文件、依賴庫這三層;程序員

常見角色

使用docker時,有三個常見角色:github

  1. 鏡像製做者:本文中就是SpringBoot應用開發者,寫完代碼把應用作成docker鏡像;
  2. docker公共鏡像倉庫:鏡像製做者將鏡像推送到倉庫給你們使用;
  3. 鏡像使用者:從鏡像倉庫將鏡像下載到本地使用;

接下來的故事圍繞上述三個角色展開;docker

從製做到使用的過程

  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數據庫

相關文章
相關標籤/搜索