Docker学习之镜像删除的Untagged 和 Deleted
鏡像刪除的Untagged 和 Deleted
Untagged: ubuntu:14.04Deleted: sha256:a8e78858b03ba02c3df71d555f90057f890495aabc86e7a39396c68c87ed5ff2當我們在docker中執行docker images命令查看到一些不想使用的鏡像或容器時,會執行docker rmi -f xxx來對相應的目標進行刪除操作,但相應的命令執行完成后會出現上面的兩種情況,一種是刪除成功,另一種則只是將鏡像對應的標簽解除了,所以二者有何區別呢?
Untagged 和 Deleted
Untagged
我們首先都知道鏡像的唯一標識是其 ID 和摘要,但一個鏡像可以有多個標簽
 因此當我們使用上面命令刪除鏡像的時候,實際上是在要求刪除某個標簽的鏡像。所以首先需要做的是將滿足我們要求的所有鏡像標簽都取消,這就是我們看到的 Untagged 的信息。因為一個鏡像可以對應多個標簽,因此當我們刪除了所指定的標簽后,可能還有別的標簽指向了這個鏡像,如果是這種情況,那么 Delete 行為就不會發生。所以并非所有的 docker rmi 都會產生刪除鏡像的行為,有可能僅僅是取消了某個標簽而已。
Delated
當一個鏡像所有的標簽都被取消了,該鏡像很可能會失去了存在的意義,因此會觸發刪除行為。鏡像是多層存儲結構,因此在刪除的時候也是從上層向基礎層方向依次進行判斷刪除。鏡像的多層結構讓鏡像復用變動非常容易,因此很有可能某個其它鏡像正依賴于當前鏡像的某一層。這種情況,依舊不會觸發刪除該層的行為。直到沒有任何層依賴當前層時,才會真實的刪除當前層。所以delated命令觸發的判斷機制要比untagged要難上許多。
用 docker images 命令來配合
像其它可以承接多個實體的命令一樣,可以使用 docker images -q 來配合使用 docker rmi,這樣可以成批的刪除希望刪除的鏡像。比如刪除虛懸鏡像的指令是:
$ docker rmi $(docker images -q -f dangling=true)比如,我們需要刪除所有倉庫名為 redis 的鏡像:
$ docker rmi $(docker images -q redis)或者刪除所有在 mongo:3.2 之前的鏡像:
$ docker rmi $(docker images -q -f before=mongo:3.2)總結
以上是生活随笔為你收集整理的Docker学习之镜像删除的Untagged 和 Deleted的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: java中sofa并发访问,云上的日子:
 - 下一篇: SQL server置疑数据库修复