docker學習系列(三):docker鏡像的分層結構

docker的鏡像分層

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

實驗

好比說使用dockerfile去建立一個最簡單的hello鏡像。建立好對應的dockerfile以後去進行建立:code

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

執行了上面的命令咱們能夠看到存在着兩個鏡像,其中hello_world是我剛剛建立好的鏡像。blog

$ docker imgaes
alpine
hello_world

docker分層

那麼爲何會有兩個鏡像呢?這是因爲docker的鏡像分層結構所致使的,以下圖所示。
資源

一個docker鏡像由多個可讀的鏡像層組成,而後運行的容器會在這個docker的鏡像上面多加一層可寫的容器層,任何的對文件的更改都只存在此容器層。所以任何對容器的操做均不會影響到鏡像。dockerfile

如何實現

至於容器如何獲取鏡像層文件而又不影響到是鏡像層的呢?docker是這樣實現的?
若是須要獲取某個文件,那麼容器曾會從上到下去下一層的鏡像層去獲取文件,若是該層文件不存在,那麼就會去下一鏡像層去尋找,直到最後一層。
對於用戶而言,用戶面向的是一個疊加後的文件系統。io

而任何對於文件的操做都會記錄在容器層,例如說修改文件,容器層會把在鏡像層找到的文件拷貝到容器層而後進行修改,刪除文件則會在容器層內記錄刪除文件的記錄。test

綜述

可能會有人會文爲何要這麼去作呢?我以爲有兩大好處:容器

  1. 基本上每一個軟件都是基於某個鏡像去運行的,所以一旦某個底層環境出了問題,就不須要去修改所有基於該鏡像的軟件的鏡像,只須要修改底層環境的鏡像。
  2. 這個好處也是最大好處,就是能夠共享資源,其餘相同環境的軟件鏡像都共同去享用同一個環境鏡像,而不須要每一個軟件鏡像要去建立一個底層環境。基礎

相關文章
相關標籤/搜索