1. 程式人生 > >011、映象的分層結構(2018-12-28 週五)

011、映象的分層結構(2018-12-28 週五)

參考 https://www.cnblogs.com/CloudMan6/p/6806193.html   Docker支援通過擴充套件現有映象,建立新的映象   實際上Docker Hub上99%的映象都是在base映象的基礎上,安裝和配置軟體後構建出來的。   FROM debian                    #    映象不在是從scratch開始,而是從debian base開始
RUN apt-get install emacs      #    安裝emacs RUN apt-get install apache2    #    安裝apache2 CMD ["/bin/bash"]              #    容器啟動時執行bash   構建過程如下圖:       
    新映象是從base映象一層一層疊加生成的。每安裝一個軟體,就在現有映象的基礎上增加一層   Docker為什麼要分這麼多層 --  共享資源。   比如好多映象都是從相同base的基礎上構建出來來,那麼 Docker Host上只需要儲存一份base即可,同時記憶體中也只需載入一份base映象,映象的每一層都可以被分享,   Copy-on-Write   多個容器共享一個基礎映象,那麼當某個容器修改了配置檔案,其他容器會受影響嗎? 不會   容器在啟動時,會建立一個新的可寫層,載入到映象的頂部。這一層通常被稱作容器層,容器層下面的是映象層   對容器的所有改動,都只發生在容器層,下面的映象層是隻讀的。  
  所有映象層疊加起來組成一個統一的檔案系統。如果不同層中有一個相同的檔案,,比如 /a  ,上層的 /a  會覆蓋下層的 /a ,使用者只能看到最靠近頂端映象層中的/a    1、 新增檔案 -- 新檔案會被新增到容器層中 2、 讀取檔案 -- 在映象層中從上往下找,找到後不再繼續向下查詢 3、 修改檔案 -- 在映象層中從上往下找,找到後複製到容器層進行修改 4、 刪除檔案 --  在映象層中從上往下找,找到後在容器層將該檔案標記為刪除   只有當需要修改時才從映象層複製一份到容器層,這個特性叫做 Copy-on-Write 。容器層儲存的是映象變化的部分,並不會對映象本身進行修改