1. 程式人生 > >Docker教程:Docker映象匯出及遷移

Docker教程:Docker映象匯出及遷移

repositories-aufs:記錄了映象名稱以及對應的Id的json檔案
graph:儲存的是下載映象的元資料,包括json和layersize,其中json檔案記錄了相應的image id、依賴關係、建立時間和配置資訊等。layersize為對應層的大小。進入graph檔案會發現下面包含著多個資料夾,進入其中一個資料夾
root:/var/lib/docker/graph#cd 09694f91574ea3fca8558306c55abbbd47e01b8cb9ae782c66b9682a95c7f71e/
root:/var/lib/docker/graph/09694f91574ea3fca8558306c55abbbd47e01b8cb9ae782c66b9682a95c7f71e#ls
json  layersize
可以看到json和layersize檔案。
json檔案內容中layersize可能顯示為0,這一層為0,不表示映象大小就是0。Graph儲存映象時,是分層儲存的,graph目錄下多出的資料夾其實都對應一個layer。這些layer都與我們的映象名命名的layer有關聯,關係就記錄在json檔案中。 從這個json檔案中,可以看到起父映象或者上一層映象就是……,graph目錄下也儲存著這一層的資訊,再往下看,可以看到層次關係。在graph這個目錄裡並沒有找到我們想找到的映象內容存放地。graph目錄下只是一些映象相關的資訊資料。image應該包含一個類似linux的檔案系統才對。
containers:這個下面記錄的是容器相關的資訊,每執行一個容器,就在這個目錄下面生成一個容器Id對應的子目錄。
init:儲存的是docker init相關的資訊。
tmp:是一個空目錄,具體起什麼作用還不清楚。
volumes:與docker的資料券相關。
aufs目錄:mnt是aufs的掛載目錄,diff是實際資料來源,也就是我們image實際儲存的地方,包括只讀層和可讀寫層,所有這些層最終都一起掛載到mmt所在的目錄。layers下為每層依賴有關的描述檔案。
在diff、mnt、layers下面有6個檔案或子目錄,但是從graph目錄下看我們的image應該是4層,為什麼會多出來2個呢。仔細觀察多出來的來個檔案或者子目錄,會發現其名稱和容器Id一致,且有一個包含init。其實,在容器啟動之前,mnt和layers都是空目錄,diff下面也只有graph目錄下我們看到的映象層對應的4個目錄。在Docker利用image啟動一個容器時,會在aufs下新建容器id對應的檔案和子目錄,同時在映象的可讀層執行新建一個可讀寫的layer。至於id-init檔案或者子目錄記錄的都是與容器內環境相關的資訊,與映象無關。
既然我們現在已經知道了映象實際是儲存在diff目錄下的,那麼我們就看看diff目錄下各個子目錄中的內容。依照映象的層次關係檢視。最終我們看到linux一樣的檔案系統。已表示image確實是儲存在diff目錄下的。
綜上,docker image最終是儲存在在/var/lib/docker/aufs/diff中的,同時在graph中有有關進行的記錄。在容器啟動時,diff下的可讀層image和新增的可讀寫層“容器Id”都將掛載到mmt目錄下以容器id命名的子目錄下。