docker 將這樣的 file system 稱為 image(映像/鏡像)。一個 image 可以放到另一個 image 的頂部。位於下層的 image 稱為 parent image ,可以一直往下推,直到找出 image stack 中最底層的 image ,稱為 basic image 。
當 image 啟動 container 時,docker 會在 image 的最頂層掛上一個 R/W file system,使用者要在 docker 中運行的程式就是在這個 R/W 層中發生的。
圖片來源:https://stackoverflow.com/questions/18601640/what-is-the-impact-of-using-multiple-base-images-in-docker
本圖就可以清清楚楚的看到從 kernel 往上,一層一層疊上去的 image,最後則是我們運行的、與之互動的 container。
當一個 container 初次啟動時,初始的 R/W 層是乾乾淨淨空無一物的,當 file system 發生變化時,都會應用在這一層上。
當想修改一個文件,該文件會從下面的 read only 層複製到 R/W 層,該文件的 read only version 仍然存在,但已被 R/W 層的副本所隱藏。
這種技術叫做 Copy-on-write(寫入時複製),是使 docker 如此強大的技術之一。
每個 read only layer 都不能改變,只能用讀的。
當 run 起一個 container 時,docker 就會建構起一個 image stack ,並在最上面加上一個 R/W 層,這個 R/W層加上所有的 parent iamge 以及一些設定就構成了一個 container 。
之前已經移過, container 是可以修改的,container 擁有自己的狀態,可以 run & stop ,container 的這種特性加上 image layering framework 使我們可以快速建構 image 並運作包含最終想要執行的 服務/程式 的 container。
原來 image 學問這麼大 (倒