<b>3.4 删除鏡像</b>
<b></b>
1.?使用标簽删除鏡像
使用docker rmi指令可以删除鏡像,指令格式為docker rmi image [image...],其中image可以為标簽或id。
例如,要删除掉myubuntu:latest鏡像,可以使用如下指令:
$ docker rmi myubuntu:latest
untagged: myubuntu:latest
讀者可能會擔心,本地的ubuntu:latest鏡像是否會受此指令的影響。無需擔心,當同一個鏡像擁有多個标簽的時候,docker rmi指令隻是删除該鏡像多個标簽中的指定标簽而已,并不影響鏡像檔案。是以上述操作相當于隻是删除了鏡像2fa927b5cdd3的一個标簽而已。
為保險起見,再次檢視本地的鏡像,發現ubuntu:latest鏡像(準确地說是2fa927b5cdd3鏡像)仍然存在:
$ docker images
repository tag image id created size
ubuntu 16.04 2fa927b5cdd3 2 weeks ago 122 mb
ubuntu latest 2fa927b5cdd3 2 weeks ago 122 mb
ubuntu 14.04 8f1bd21bd25c 2 weeks ago 188 mb
但當鏡像隻剩下一個标簽的時候就要小心了,此時再使用docker rmi指令會徹底删除鏡像。
例如删除标簽為ubuntu:14.04的鏡像,由于該鏡像沒有額外的标簽指向它,執行docker rmi指令,可以看出它會删除這個鏡像檔案的所有層:
$ docker rmi ubuntu:14.04
untagged: ubuntu:14.04
deleted: sha256:8f1bd21bd25c3fb1d4b00b7936a73a0664f932e11406c48a0ef19d82fd0b7342
deleted: sha256:8ea3b9ba4dd9d448d1ca3ca7afa8989d033532c11050f5e129d267be8de9c1b4
deleted: sha256:7db5fb90eb6ffb6b5418f76dde5f685601fad200a8f4698432ebf8ba80757576
deleted: sha256:19a7e879151723856fb640449481c65c55fc9e186405dd74ae6919f88eccce75
deleted: sha256:c357a3f74f16f61c2cc78dbb0ae1ff8c8f4fa79be9388db38a87c7d8010b2fe4
deleted: sha256:a7e1c363defb1f80633f3688e945754fc4c8f1543f07114befb5e0175d569f4c
2.?使用鏡像id删除鏡像
當使用docker rmi指令,并且後面跟上鏡像的id(也可以是能進行區分的部分id串字首)時,會先嘗試删除所有指向該鏡像的标簽,然後删除該鏡像檔案本身。
注意,當有該鏡像建立的容器存在時,鏡像檔案預設是無法被删除的,例如,先利用ubuntu:14.04鏡像建立一個簡單的容器來輸出一段話:
$ docker run ubuntu:14.04 echo 'hello! i am here!'
hello! i am here!
使用docker ps -a指令可以看到本機上存在的所有容器:
$ docker ps -a
container id image command created status ports names
a21c0840213e ubuntu:14.04 "echo 'hello! i am he" about a minute
ago exited (0) about a minute ago romantic_euler
可以看到,背景存在一個退出狀态的容器,是剛基于ubuntu:14.04鏡像建立的。
試圖删除該鏡像,docker會提示有容器正在運作,無法删除:
error response from daemon: conflict: unable to remove repository reference "ubuntu:
14.04" (must force) - container a21c0840213e is using its referenced image
8f1bd21bd25c
如果要想強行删除鏡像,可以使用-f參數。
$ docker rmi -f ubuntu:14.04
注意,通常并不推薦使用-f參數來強制删除一個存在容器依賴的鏡像。正确的做法是,先删除依賴該鏡像的所有容器,再來删除鏡像。首先删除容器a21c0840213e:
$ docker rm a21c0840213e
再使用id來删除鏡像,此時會正常列印出删除的各層資訊:
$ docker rmi 8f1bd21bd25c