昨天我們已經對映像檔以及映像層之間的關係,更加熟悉了,今天我們要來拉大視野一探映像層、映像檔到容器,這三者之間的神秘又糾纏的關係。
現在大家都知道了,映像檔是由一層一層的映像層堆疊而成。
所以昨天提到 httpd
的映像層有 4ee097f9a366
、 94662ba12854
、 595a05b7c0ad
、 03682c916abd
、 7e88a38e211a
。
-----------------
| httpd |
| |
| 4ee097f9a366 |
| 94662ba12854 |
| 595a05b7c0ad |
| 03682c916abd |
| 7e88a38e211a |
| |
-----------------
所有的映像層都是唯讀的,不可編輯變動的。
當我今天用 httpd
建立一個容器時,Docker 做得事情是將映像檔裡的映像層拉出來以供容器使用,因此這些映像層又稱為映像檔的共享層。這就是為什麼可以不斷產生容器。
此外,在第 14 天提到,Docker 會自動給容器一個可寫層。
這時,這個容器就會有映像層 + 可寫層,一個來自映像檔,一個來自Docker。
-----------------
| 容器一 |
|---------------|
| 寫入層 |
|---------------|
| 映像層 |
| 4ee097f9a366 |
| 94662ba12854 |
| 595a05b7c0ad |
| 03682c916abd |
| 7e88a38e211a |
-----------------
如果在建立容器時有綁定掛載的話:
-----------------
| 容器一 |
|---------------|
| 寫入層 |
|---------------|
| 約定掛載 |
|---------------|
| 映像層 |
| 4ee097f9a366 |
| 94662ba12854 |
| 595a05b7c0ad |
| 03682c916abd |
| 7e88a38e211a |
-----------------
那如果有 volume 掛載:
-----------------
| 容器一 |
|---------------|
| 寫入層 |
|---------------|
| 約定掛載 |
|---------------|
| volume 掛載 |
|---------------|
| 映像層 |
| 4ee097f9a366 |
| 94662ba12854 |
| 595a05b7c0ad |
| 03682c916abd |
| 7e88a38e211a |
-----------------
這些容器的結構圖,就是容器的檔案系統的結構,由映像層、寫入層、掛載所組成。
在 Day 13 提到,最基本的檔案系統是映像層與寫入層構成。那最完整的就是再加上掛載。
那映像層跟寫入層都是透過建立容器時所取得的元件,所以理當隨容器被刪除後跟著消失。
掛載則是透過本機的資料夾,或是 Docker 另外 create 出來的 volume,因此不像映像層跟寫入層一樣,會跟著容器的生命週期一起不見。
今天我們貫穿了映像層、映像檔到容器,彼此之間的關係,且一併回顧之前提到卻有點模糊的概念,透過今天這樣從微觀到宏觀的介紹方式,讓大家明白這三者之間到底是什麼樣的存在,彼此又是誰的彼此。
明天我們來動手實作映像檔的指令操作吧!