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

三角形發表於2018-12-29
 
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 。容器層儲存的是映象變化的部分,並不會對映象本身進行修改
 
 

相關文章