2014-11-06 19 views
1

我正在創建一些非常簡單的Docker容器。我明白,每一步之後都會創建一個新的容器。但是,使用Hub中的其他Dockerfiles時,我不會收集未標記的圖像。那麼他們從哪裏來?在網上瀏覽後,我發現如何刪除它們,但我想更好地瞭解它們來自哪裏。理想情況下,我想阻止他們被創造。未標記的Docker鏡像來自哪裏?

從他們的文檔

這將顯示未經標記的圖像中,對圖像 樹(未中介層)的葉子上。這些圖像出現在圖像的新版本 圖像將repo:標籤從IMAGE ID上移開時,未標記爲 。當目前正在使用容器時嘗試刪除圖像時會發出警告。通過擁有這個標誌,它可以批量清理 。

我不太明白這一點。爲什麼版本會將repo:tag遠離IMAGE ID?

回答

3

Docker使用稱爲AUFS的文件系統,它代表擴展文件系統。幾乎每一個Docker文件的每一行都會創建一個新的圖像,當你將所有的圖像疊加或疊加時,你會得到最終的泊塢窗圖像。這本質上是一種緩存方式,所以如果只更改Docker文件的第9行,它將不會重新生成整個映像集。 (當然要看你有你的泊塢文件,如果你有一個COPYADD什麼,點緩存除權後什麼命令)

最終圖像會得到標記它有什麼標籤,但所有這些中間圖像對於創建最終圖像是必要的,所以刪除它們或防止它們被創建是沒有意義的。希望這是有道理的。

+0

那麼中間步驟是創建未標記圖像的步驟?爲什麼我只能在我的自定義Docker文件中看到它們?當我從中心複製一個我似乎並沒有得到它們。當我說複製我的意思是Dockerfile的內容;我沒有下載圖片。 – 2014-11-06 15:33:07

+0

您是否嘗試過'泊塢窗圖像-a'?這將顯示所有內容 – 2014-11-06 17:54:39

+0

請注意,「碼頭圖像-a」是您可以看到中間圖像的唯一方式;如果OP沒有使用該選項,那麼我的答案適用。 – jwodder 2015-03-13 17:01:01

1

每當您爲新映像分配已使用的標記(例如,通過構建圖像foo,對其Dockerfile進行更改,然後再構建foo),舊圖像將會丟失該標記,但仍然會留下來,即使它的所有標籤都被刪除了。這些舊版本的圖像是docker images輸出中的未加標籤的條目,您可以用docker rmi <IMAGE HASH>安全地刪除它們(儘管如果存在仍使用該圖像的現存容器,刪除將被拒絕)。

+0

@ adam-beck ......這是OP詢問的未標記圖像的根本原因 – 2016-04-05 15:01:03