天天看點

Docker技術入門與實戰(第2版)3.4 删除鏡像

<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