docker鏡像分層結構
用過Dockerfile構建鏡像的都知道Dockerfile執行完每一條指令都會創建一個新的鏡像,最終的鏡像由層層疊加而成。
分層的好處
最大的好處就是共享資源。
當多個鏡像從相同的base鏡像構建而來,那麼Docker host只需要在磁盤保存一份base鏡像,同時內存中也只需要加載一份base鏡像,就可以爲所有的容器服務了。
容器的修改並不會影響鏡像
當容器啓動時,一個新的可寫層被加載到鏡像的頂層,這一層通常被成爲“容器層”。
對容器的改動,無論添加、刪除、還是修改文件都只會發生在容器層中。
容器層是可寫的,鏡像層是隻讀的。
- 添加文件時,新的文件添加到容器層。
- 讀取文件時,從上往下在各個鏡像層查找,一旦找到就複製到容器層,然後讀入內存。
- 修改文件,從上往下查找,複製到容器層,然後修改之。
- 刪除文件,從上往下查找,找到後返回,記錄刪除操作。
只有當需要修改時才賦值一份數據,這種特性被稱爲Copy-On-Write。
容器層保存的是鏡像層的變化,但不會對鏡像本身進行任何修改。這也解釋了鏡像可以被多個容器共享。