在學習使用docker過程當中會遇到鏡像和容器,二者之間的區別是什麼?有什麼關聯?本文將用圖文並茂的方式介紹容器、鏡像的區別,可以很好的幫助各位深刻理解Docker。html
鏡像能夠當作是由多個鏡像層疊加起來的一個文件系統(經過UnionFS與AUFS文件聯合系統實現),鏡像層也能夠簡單理解爲一個基本的鏡像,而每一個鏡像層之間經過指針的形式進行疊加。linux
根據上圖,鏡像層的主要組成部分包括鏡像層 ID、鏡像層指針 「指向父層」、元數據「 Layer Metadata,包含了 Docker 構建和運行的信息和父層的層次信息」。只讀層和讀寫層「Top Layer」的組成部分基本一致,同時讀寫層能夠轉換成只讀層「 經過docker commit
操做實現」。docker
元數據(metadata)就是關於這個層的額外信息,它不只可以讓Docker獲取運行和構建時的信息,還包括父層的層次信息。須要注意,只讀層和讀寫層都包含元數據。json
每一層都包括了一個指向父層的指針。若是一個層沒有這個指針,說明它處於最底層。ubuntu
Metadata Location:
在docker主機中鏡像層(image layer)的元數據被保存在名爲」json」的文件中,好比說:網絡
/var/lib/docker/graph/e809f156dc985.../json ##e809f156dc985...就是這層的id
一個容器的元數據好像是被分紅了不少文件,但或多或少可以在/var/lib/docker/containers/<id>目錄下找到,<id>就是一個可讀層的id。這個目錄下的文件大可能是運行時的數據,好比說網絡,日誌等等。app
鏡像是一堆只讀層的統一視角,除了最底層沒有指向外,每一層都指向它的父層。統一文件系統( Union File System)技術可以將不一樣的層整合成一個文件系統,爲這些層提供了一個統一的視角,這樣就隱藏了多層的存在。在用戶的角度看來,只存在一個文件系統。鏡像每一層都是不可寫的,都是隻讀層。post
咱們能夠看到鏡像包含多個只讀層,它們重疊在一塊兒。除了最下面一層,其它層都會有一個指針指向下一層。這些層是Docker內部的實現細節,而且可以在docker主機的文件系統上訪問到。統一文件系統(union file system,升級版爲AUFS)技術可以將不一樣的層整合成一個文件系統,爲這些層提供了一個統一的視角,這樣就隱藏了多層的存在,在用戶的角度看來,只存在一個文件系統。咱們能夠在圖片的右邊看到這個視角的形式。
你能夠在你的主機文件系統上找到有關這些層的文件。須要注意的是,在一個運行中的容器內部,這些層是不可見的。在個人主機上,我發現它們存在於/var/lib/docker/aufs目錄下。學習
sudo tree -L 1 /var/lib/docker/ /var/lib/docker/ ├── aufs ├── containers ├── graph ├── init ├── linkgraph.db ├── repositories-aufs ├── tmp ├── trust └── volumes 7 directories, 2 files
容器(container)的定義和鏡像(image)幾乎如出一轍,也是一堆層的統一視角,惟一區別在於容器的最上面那一層是可讀可寫的。要點:容器 = 鏡像 + 讀寫層,而且容器的定義並無說起是否要運行容器。spa
運行狀態的容器「Running Container」是由一個可讀寫的文件系統「靜態容器」+ 隔離的進程空間和其中的進程構成的。下面這張圖片展現了一個運行中的容器。
正是文件系統隔離技術使得Docker成爲了一個前途無量的技術。一個容器中的進程可能會對文件進行修改、刪除、建立,這些改變都將做用於可讀寫層(read-write layer)。下面這張圖展現了這個行爲。
咱們能夠經過運行如下命令來驗證咱們上面所說的:
docker run ubuntu touch happiness.txt
即使是這個ubuntu容器再也不運行,咱們依舊可以在主機的文件系統上找到這個新文件。
find / -name happiness.txt
/var/lib/docker/aufs/diff/860a7b...889/happiness.txt
經過上述內容,咱們已經詳細介紹了鏡像與容器的區別,鏡像由一層層只讀層堆在一塊兒,容器爲鏡像只讀層+讀寫層,運行態容器爲由一個可讀寫的文件系統「靜態容器」+ 隔離的進程空間和其中的進程構成。
參考文獻:
1.https://docs.docker.com
2.http://dockone.io/article/783
3.https://www.hi-linux.com/posts/44544.html
--- END ---