映像放在docker根目錄下。映像層內容一般在Docker目錄的aufs路徑中,具體位址「/var/lib/docker/aufs/」;對於每個映像層,都會保存一份對應的json文件,路徑為「/var/lib/docker /graph」。
本教學操作環境:Ubuntu 14.04系統、docker-1.7.1版、Dell G3電腦。
對於Docker 映像的認識總會有第一次,自那時開始,當然也少不了成長,筆者本人的認識過程不妨和大家一起分享:
初次接觸Docker:相信很多愛好者都會和我一樣,有這樣一個認識:Docker 映像代表一個容器的檔案系統內容;
初步接觸聯合檔案系統:聯合檔案系統的概念,讓我意識到鏡像層級管理的技術,每一層鏡像都是容器檔案系統內容的一部分。
研究映像與容器的關係:容器是一個動態的環境,每一層映像中的檔案都屬於靜態內容,然而Dockerfile 中的ENV、VOLUME 、CMD 等內容最終都需要落實到容器的運作環境中,而這些內容均不可能直接坐落到每一層鏡像所包含的檔案系統內容中,那這部分內容Docker 該如何管理?
另外,在上述第三個步驟中,還有一種情況,相信大家並不陌生,很多個鏡像層大小為 0,鏡像層內部不存在任何檔案內容。這又是怎麼一回事?
大家可以回想《Docker映像詳談(1): 容器的檔案系統》中,關於空映像的產生部分,其中提到「更新映像的 json 檔案」。其實,前文埋下的伏筆,即暗示了真相—— Docker 鏡像內容由鏡像層文件內容和鏡像 json 文件組成,不論靜態內容還是動態信息,Docker 均為將其在 json 文件中更新。
Docker 每一層鏡像的json 文件,都扮演著一個非常重要的角色,其主要的作用如下:
記錄Docker 映像中與容器動態資訊相關的內容
記錄父子Docker 映像之間真實的差異關係
彌補Docker 映像內容的完整性與動態內容的缺失
Docker 映像的json 檔案可以認為是鏡像的元資料訊息,其重要性不言而喻。
Docker 映像內容的理論分析,看著多少有些雲裡霧裡,不論Docker 映像層的文件,還是json文件,讀來都稍顯乏味。倘若可以一窺 Docker 中的真實環境,相信對於鏡像技術的理解定會有不少的幫助。
我們直奔主題,從 Docker 映像的儲存入手,看看這些映像層檔案內容與映像 json 檔案分別儲存於何處。 (以下展示的實驗環境:宿主機作業系統為Ubuntu 14.04、Docker 版本為1.7.1、graphdriver 類型為aufs,僅包含ubuntu:14.04 一個映像。)
檢視映像層組成
我們可以透過指令docker history ubuntu:14.04 查看ubuntu:14.04,結果如下:
#圖中顯示ubuntu:14.04 鏡像共有4 個鏡像圖層。
映像層檔案內容儲存
#Docker 映像層的內容一般在Docker 根目錄的aufs 路徑下,為/var/lib/docker/aufs/,具體情況如下:
圖中顯示了鏡像ubuntu:14.04 的4 個映像層內容,以及每個映像層內的一級目錄情況。需要額外注意的是,鏡像層 d2a0ecffe6fa 中沒有任何內容。
鏡像json 文件儲存
#對於每一個映像層,Docker 都會保存一份相應的json 文件,json 文件的儲存路徑為/var/lib/docker/graph,ubuntu:14.04 所有映像層的json 檔案儲存路徑顯示如下:
除了 json 文件,大家還看到每個鏡像層還包含一個 layersize 文件,主要記錄鏡像層內部文件內容的總大小。既然談到了鏡像json 文件,為了給下文鋪墊,以下貼出ubuntu:14.04 中空鏡像層d2a0ecffe6fa 的json 文件:
#由於該鏡像層的對應的Dockerfile 指令為CMD,所以鏡像層的內容為空,而改鏡像層的json 檔案會更新Cmd 域,取得新的Cmd 值,以便後續透過該映像運行容器時,使用更新後的Cmd。
推薦學習:《docker影片教學》
以上是docker編譯的鏡像放在哪個目錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!