Image Layer
30 歲的那天我睡著了,隔天醒來,用「30 歲為止的 Image」,啟動了一個新的 Container,這個 Image 是過去經驗的凍結結果,你沒辦法在 Container 裡直接改 Image,把某一層人生經驗 hot fix,你只能用現在這份 Image 決定今天要跑出怎樣的一個實例

Image 就是那一疊已經整理好、不能再亂改的「環境變更記錄」,他是一份「如何把環境一步步疊起來的凍結結果」,而不是一個正在運作的東西,這些變更記錄加起來,組成一個「可執行的環境起點」

比較一下就是
Image「我『應該長怎樣』的說明書 + 已經準備好的環境層」Container「照著這份說明書,真的跑起來的一次實例」

Image 結構是多個 layer,每一層都是一次檔案系統的變更(新增 / 修改 / 刪除),最終組合成一個完整檔案系統視圖,他可以被重複掛載、可以被重複使用,用來作為 container 的起始基準

確認 Docker 環境
1 | docker version |


拉 node:20(會看到多個 layer)
1 | docker pull node:20 |

看到「Pulling fs layer / Download complete / Extracting」那種多層輸出,這就是「node:20 不是只有單獨一層」,代表 image 是由多個唯讀 layer 疊起來的(不是單一檔案、也不是單一層)

開第一個 container(從 node:20 起, 用互動 shell)
Docker 會把 node:20 的唯讀 layers 拿來用,再額外加上一層 container 專屬的可寫 layer(這次的改動都會記在這層),接著進到 container 後,建立檔案
1 | ## 起一個 instance |

開第二個 container(同樣從 node:20 起)並驗證看不到 AAA.txt
1 | ## 使用相同 IMAGE 起第二個 instance |
因為我們把 image 當「可重複使用的模版」,而 container 是「這次開機的暫存筆記本」,我們在筆記本寫的東西,不會回滲進模版,所以下次再拿模版開新筆記本,當然看不到上次寫的內容!

把第一個 container commit 成新 image(形成新的 layer)
1 | ## docker container commit |
看得到證明 commit 成功,這個檔案已經不是 container 專屬,而是 image 的一部分,即使離開 container, image 還在,可重複使用








