當(dāng)讀者不再需要某個(gè)鏡像的時(shí)候,可以通過 docker image rm 命令從 Docker 主機(jī)刪除該鏡像。其中,rm 是 remove 的縮寫。
刪除操作會(huì)在當(dāng)前主機(jī)上刪除該鏡像以及相關(guān)的鏡像層。這意味著無法通過 docker image ls 命令看到刪除后的鏡像,并且對應(yīng)的包含鏡像層數(shù)據(jù)的目錄會(huì)被刪除。
但是,如果某個(gè)鏡像層被多個(gè)鏡像共享,那只有當(dāng)全部依賴該鏡像層的鏡像都被刪除后,該鏡像層才會(huì)被刪除。
下面的示例中通過鏡像 ID 來刪除鏡像,可能跟讀者機(jī)器上鏡像 ID 有所不同。
$ docker image rm 02674b9cb179
Untagged: alpine@sha256:c0537ff6a5218...c0a7726c88e2bb7584dc96
Deleted: sha256:02674b9cb179d57...31ba0abff0c2bf5ceca5bad72cd9
Deleted: sha256:e154057080f4063...2a0d13823bab1be5b86926c6f860
如果被刪除的鏡像上存在運(yùn)行狀態(tài)的容器,那么刪除操作不會(huì)被允許。再次執(zhí)行刪除鏡像命令之前,需要停止并刪除該鏡像相關(guān)的全部容器。
一種刪除某 Docker 主機(jī)上全部鏡像的快捷方式是在 docker image rm 命令中傳入當(dāng)前系統(tǒng)的全部鏡像 ID,可以通過 docker image ls 獲取全部鏡像 ID(使用 -q 參數(shù))。
如果是在 Windows 環(huán)境中,那么只有在 PowerShell 終端中執(zhí)行才會(huì)生效。在 CMD 中執(zhí)行并不會(huì)生效。
$ docker image rm $(docker image ls -q) -f
為了理解具體工作原理,首先下載一組鏡像,然后通過運(yùn)行 docker image ls -q。
$ docker image rm $(docker image ls -q) -f
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:f4691c9...2128ae95a60369c506dd6e6f6ab
Deleted: sha256:bd3d4369aebc494...fa2645f5699037d7d8c6b415a10
Deleted: sha256:cd10a3b73e247dd...c3a71fcf5b6c2bb28d4f2e5360b
Deleted: sha256:4d4de39110cd250...28bfe816393d0f2e0dae82c363a
Deleted: sha256:6a89826eba8d895...cb0d7dba1ef62409f037c6e608b
Deleted: sha256:33efada9158c32d...195aa12859239d35e7fe9566056
Deleted: sha256:c8a75145fcc4e1a...4129005e461a43875a094b93412
Untagged: alpine:latest
Untagged: alpine@sha256:3dcdb92...313626d99b889d0626de158f73a
Deleted: sha256:4e38e38c8ce0b8d...6225e13b0bfe8cfa2321aec4bba
Deleted: sha256:4fe15f8d0ae69e1...eeeeebb265cd2e328e15c6a869f
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
可以看到 docker image ls -q 命令只返回了系統(tǒng)中本地拉取的全部鏡像的 ID 列表。將這個(gè)列表作為參數(shù)傳給 docker image rm會(huì)刪除本地系統(tǒng)中的全部鏡像。