Image 包含了 Container 執行所需的檔案(應用程式、依賴庫、資源與相關配置),還有一些執行時的配置參數(如掛載資料夾、環境變數、使用者等)。
雖譯為映像檔,概念類似 VM 的映像檔,但不是 .iso 那樣完整的一大包打包,VM 透過映像檔來啟動作業系統,並執行許多服務。Docker 為了縮小 image 體積、達到更好的維護、擴展性,映像檔則只是檔案系統的儲存狀態,採用「分層存儲」架構,一個 image 其實是多層 images 聯合組成。
通常構建 image 時,會基於一個 base image,透過一個個指令添加該容器所需的其他東西。這過程的每個指令,並不會修改 base image,而是創建新的 image 疊在先前的 image 上,最後得到我們要的最終image。
Image 只是一個抽象概念
一個 image 並非一個檔案或一個檔案系統,而是由多層檔案系統聯合組成。Docker 透過 UnionFS 技術實現此分層存儲架構。
只要記得,image 是靜態的(唯讀),構建後就不會再被改變。構建過程的每段指令結束時,就代表創建了一個新的 image,之後的任何指令都只會在之後的 image 起作用。所以指令結束前,要把所有之後不需要的東西清除,否則之後再下指令刪除的話,只會在當前 image 裡隱藏起來。因為那是在先前 image 創建的、存在於先前的 image,當前指令所創建的 image 刪不到它。結果會使 最終image 越來越笨重。