1. 程式人生 > >docker映象的分層結構三

docker映象的分層結構三

docker的映象分層

docker裡的映象絕大部分都是在別的映象的基礎上去進行建立的,也就是使用映象的分層結構。

實驗

比如說使用dockerfile去建立一個最簡單的hello映象。建立好對應的dockerfile之後去進行建立:

FROM alpine:latest
MAINTAINER sbb
CMD echo "hello world"

執行了上面的命令我們可以看到存在著兩個映象,其中hello_world是我剛剛建立好的映象。

$ docker imgaes
alpine
hello_world

docker分層

那麼為什麼會有兩個映象呢?這是由於docker的映象分層結構所導致的,如下圖所示。

一個docker映象由多個可讀的映象層組成,然後執行的容器會在這個docker的映象上面多加一層可寫的容器層,任何的對檔案的更改都只存在此容器層。因此任何對容器的操作均不會影響到映象。

如何實現

至於容器如何獲取映象層檔案而又不影響到是映象層的呢?docker是這樣實現的?
如果需要獲取某個檔案,那麼容器曾會從上到下去下一層的映象層去獲取檔案,如果該層檔案不存在,那麼就會去下一映象層去尋找,直到最後一層。
對於使用者而言,使用者面向的是一個疊加後的檔案系統。

而任何對於檔案的操作都會記錄在容器層,例如說修改檔案,容器層會把在映象層找到的檔案拷貝到容器層然後進行修改,刪除檔案則會在容器層內記錄刪除檔案的記錄。

綜述

可能會有人會文為什麼要這麼去做呢?我覺得有兩大好處:

    1. 基本上每個軟體都是基於某個映象去執行的,因此一旦某個底層環境出了問題,就不需要去修改全部基於該映象的軟體的映象,只需要修改底層環境的映象。
    2. 這個好處也是最大好處,就是可以共享資源,其他相同環境的軟體映象都共同去享用同一個環境映象,而不需要每個軟體映象要去建立一個底層環境。