當讀者不再需要某個鏡像的時候,可以通過 docker image rm 命令從 Docker 主機刪除該鏡像。其中,rm 是 remove 的縮寫。
刪除操作會在當前主機上刪除該鏡像以及相關的鏡像層。這意味著無法通過 docker image ls 命令看到刪除后的鏡像,并且對應的包含鏡像層數據的目錄會被刪除。
但是,如果某個鏡像層被多個鏡像共享,那只有當全部依賴該鏡像層的鏡像都被刪除后,該鏡像層才會被刪除。
下面的示例中通過鏡像 ID 來刪除鏡像,可能跟讀者機器上鏡像 ID 有所不同。
$ docker image rm 02674b9cb179
Untagged: alpine@sha256:c0537ff6a5218...c0a7726c88e2bb7584dc96
Deleted: sha256:02674b9cb179d57...31ba0abff0c2bf5ceca5bad72cd9
Deleted: sha256:e154057080f4063...2a0d13823bab1be5b86926c6f860
如果被刪除的鏡像上存在運行狀態的容器,那么刪除操作不會被允許。再次執行刪除鏡像命令之前,需要停止并刪除該鏡像相關的全部容器。
一種刪除某 Docker 主機上全部鏡像的快捷方式是在 docker image rm 命令中傳入當前系統的全部鏡像 ID,可以通過 docker image ls 獲取全部鏡像 ID(使用 -q 參數)。
如果是在 Windows 環境中,那么只有在 PowerShell 終端中執行才會生效。在 CMD 中執行并不會生效。
$ docker image rm $(docker image ls -q) -f
為了理解具體工作原理,首先下載一組鏡像,然后通過運行 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 命令只返回了系統中本地拉取的全部鏡像的 ID 列表。將這個列表作為參數傳給 docker image rm會刪除本地系統中的全部鏡像。