如何列出和刪除 Docker 鏡像?
已發表: 2021-08-03Docker 是一個眾所周知的平台,它允許您將應用程序作為容器來管理運行和交付,這些容器將操作系統和依賴庫與您的應用程序一起打包。
我們將介紹 Docker 鏡像的管理,主要介紹列出 Docker 鏡像和獲取所需信息的方法,然後在此基礎上學習以有效的方式刪除一個或多個鏡像。
所以讓我們開始吧。
列出 Docker 映像
要列出拉取的 Docker 映像,請使用:
abhisheknair@geekflare:~$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE redis latest aa4d65e670d6 9 days ago 105MB mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$
與其他docker
命令一樣,它支持具有多個選項的images
命令。
$ docker images [OPTIONS] [REPOSITORY[:TAG]]
如果您在沒有任何選項的情況下運行docker images
,它將向您顯示頂級映像,例如docker image ls
、它們的存儲庫和標籤以及它們在磁盤上的大小。
abhisheknair@geekflare:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$
這些映像具有中間層,可提高可用性、加快構建過程並減少上述命令未顯示的磁盤使用量。 SIZE
是圖像及其所有父圖像佔用的組合空間。 如果在 docker save
圖像時將圖像的內容保存為 Tar 文件,它將等於列出的大小。
如果一個圖像具有多個存儲庫名稱或標籤,則它會被多次列出,儘管由其IMAGE ID
標識的單個圖像僅使用一次列出的SIZE
。
列出最近的圖像
abhisheknair@geekflare:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$
按存儲庫和標籤列出圖像
要列出屬於特定存儲庫的所有圖像,請指定存儲庫名稱,例如:
abhisheknair@geekflare:~$ docker images redis REPOSITORY TAG IMAGE ID CREATED SIZE redis latest aa4d65e670d6 9 days ago 105MB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$
您還可以使用標籤指定存儲庫名稱以獲得更過濾的輸出:
abhisheknair@geekflare:~$ docker images redis:4.0 REPOSITORY TAG IMAGE ID CREATED SIZE redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$
列出完整的圖像 ID
要在不截斷IMAGE ID
的情況下列出所有圖像,請使用:
abhisheknair@geekflare:~$ docker images --no-trunc REPOSITORY TAG IMAGE ID CREATED SIZE redis latest sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 9 days ago 105MB mysql latest sha256:c60d96bd2b771a8e3cae776e02e55ae914a6641139d963defeb3c93388f61707 10 days ago 514MB ubuntu latest sha256:c29284518f497b8c5f49933e74e43ca5221e69c8251e780427f7d12f716625ff 2 weeks ago 72.8MB nginx latest sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f 3 weeks ago 133MB hello-world latest sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726 4 months ago 13.3kB redis 4.0 sha256:191c4017dcdd3370f871a4c6e7e1d55c7d9abed2bebf3005fb3e7d12161262b8 15 months ago 89.3MB abhisheknair@geekflare:~$
列出圖像摘要
使用 v2 或更高版本格式的 Docker 映像具有稱為digest
的內容可尋址標識符。 要列出圖像摘要值,請使用--digest
標誌:
abhisheknair@geekflare:~$ docker images --digests REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE redis latest sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 aa4d65e670d6 9 days ago 105MB mysql latest sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd c60d96bd2b77 10 days ago 514MB ubuntu latest sha256:b3e2e47d016c08b3396b5ebe06ab0b711c34e7f37b98c9d37abe794b71cea0a2 c29284518f49 2 weeks ago 72.8MB nginx latest sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e d1165f221234 4 months ago 13.3kB redis 4.0 sha256:2e03fdd159f4a08d2165ca1c92adde438ae4e3e6b0f74322ce013a78ee81c88d 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$
使用2.0
註冊表,您可以將這些摘要與push
、 pull
、 create
、 run
和rmi
命令一起使用。 這也適用於Dockerfile
中的FROM
命令。
過濾輸出
docker
命令支持使用--filter
標誌過濾images
。 當前支持的過濾器有:
- 懸空(布爾值——真或假)
- 標籤(
label=<key>
或label=<key>=<value>
) - before (
<image-name>[:<tag>]
,<image id>
or<image@digest>
) – 過濾在給定 id 或引用之前創建的圖像 - since (
<image-name>[:<tag>]
,<image id>
或<image@digest>
) – 過濾自給定 id 或引用創建的圖像 - 參考(圖像參考的模式)–過濾參考與指定模式匹配的圖像
此外,您可以通過組合使用多個過濾器,例如:
$ docker images --filter "<key1>=<value1>" --filter"<key2>=<value2>"
例子:
abhisheknair@geekflare:~$ docker images --filter "before=redis" --filter "since=hello-world" REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB abhisheknair@geekflare:~$
格式化輸出
docker images
支持與其他命令、腳本或其他方式嵌套時可能需要的格式化輸出。 這些是--format
標誌支持的佔位符:
佔位符 | 描述 |
---|---|
.ID | 圖像 ID |
.Repository | 圖像存儲庫 |
.Tag | 圖片標籤 |
.Digest | 圖片摘要 |
.CreatedSince | 自圖像創建以來經過的時間 |
.CreatedAt | 圖像創建時間 |
.Size | 映像磁盤大小 |
例如,以下命令打印不帶標題的輸出,並為所有圖像輸出由冒號 (:) 分隔的ID
和Repository
:
abhisheknair@geekflare:~$ docker images --format "{{.ID}}: {{.Repository}}" aa4d65e670d6: redis c60d96bd2b77: mysql c29284518f49: ubuntu 4cdc5dd7eaad: nginx d1165f221234: hello-world 191c4017dcdd: redis abhisheknair@geekflare:~$
或者要以表格格式列出所有圖像及其存儲庫和標籤,您可以使用:
abhisheknair@geekflare:~$ docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" IMAGE ID REPOSITORY TAG aa4d65e670d6 redis latest c60d96bd2b77 mysql latest c29284518f49 ubuntu latest 4cdc5dd7eaad nginx latest d1165f221234 hello-world latest 191c4017dcdd redis 4.0 abhisheknair@geekflare:~$
刪除 Docker 映像
要從系統中刪除一個或多個 Docker 映像,我們使用:
$ docker image rm [OPTIONS] IMAGE [IMAGE...]
要刪除單個圖像,只需指定圖像名稱:

abhisheknair@geekflare:~$ docker image rm redis Untagged: redis:latest Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 abhisheknair@geekflare:~$
或者要刪除多個圖像,請指定多個圖像名稱,以空格分隔:
abhisheknair@geekflare:~$ docker image rm redis mariadb Untagged: redis:latest Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 Untagged: mariadb:latest Untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d Deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db Deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba Deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5 Deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa Deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41 Deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2 Deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370 Deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6 Deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e Deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0 Deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144 abhisheknair@geekflare:~$
強制移除
可能有正在運行的容器正在使用您嘗試刪除的圖像。 在這種情況下,當您嘗試刪除引用的映像時,Docker 會向您發出警告。
abhisheknair@geekflare:~$ docker image rm nginx Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container ce908eadf829 is using its referenced image 4cdc5dd7eaad abhisheknair@geekflare:~$
您可以先停止關聯的容器,然後重試,或者使用-f
標誌強制刪除圖像(小心)。
abhisheknair@geekflare:~$ docker image rm nginx -f Untagged: nginx:latest Untagged: nginx@sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720 Deleted: sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f abhisheknair@geekflare:~$
修剪圖像
在某些情況下,未使用的圖像會佔用磁盤空間,或者您只需要清理舊的懸空圖像。 您可以使用以下方法清除此類未使用的圖像:
$ docker image prune
例子:
abhisheknair@geekflare:~$ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y Total reclaimed space: 0B abhisheknair@geekflare:~$
如果您還想清理所有容器未使用的所有圖像,請使用-a
標誌:
abhisheknair@geekflare:~$ docker image prune -a WARNING! This will remove all images without at least one container associated to them. Are you sure you want to continue? [y/N] y Deleted Images: untagged: mariadb:latest untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5 deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41 deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2 deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370 deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6 deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0 deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144 untagged: redis:latest untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 Total reclaimed space: 445.2MB abhisheknair@geekflare:~$
您還可以使用--force
或-f
標誌在不確認的情況下繼續清理,或使用--filter
標誌為prune
命令提供過濾器值(例如,'until=<timestamp>')。
例子:
$ docker image prune -a --force --filter "until=2021-01-04T00:00:00"
或者
$ docker image prune --filter="label=deprecated"
使用 rmi 命令
您還可以將rmi
命令與 docker 一起使用來刪除圖像。
它從 Docker 節點中刪除(並取消標記)一個或多個圖像。 如果一個圖像有多個標籤,使用這個帶有標籤作為參數的命令只會刪除標籤。 如果標籤是圖像的唯一標籤,則圖像和標籤都將被刪除。
此命令不會從註冊表中刪除圖像。 此外,除非像docker image rm
命令一樣使用-f
選項,否則無法刪除正在運行的容器的映像。
例子:
abhisheknair@geekflare:~$ docker rmi alpine Untagged: alpine:latest Untagged: alpine@sha256:adab3844f497ab9171f070d4cae4114b5aec565ac772e2f2579405b78be67c96 Deleted: sha256:d4ff818577bc193b309b355b02ebc9220427090057b54a59e73b79bdfe139b83 Deleted: sha256:72e830a4dff5f0d5225cdc0a320e85ab1ce06ea5673acfe8d83a7645cbd0e9cf abhisheknair@geekflare:~$
您還可以使用--no-prune
指定不刪除未標記的父級。
停止容器並刪除圖像
在許多情況下,您可能需要停止所有容器並刪除所有關聯的圖像。 您可以通過以下方式簡單地做到這一點:
$ docker rm -vf $(docker ps -a -q)
上述命令將強制停止並刪除所有正在運行的容器。 然後我們可以繼續使用以下方法刪除鏈接的圖像:
$ docker rmi -f $(docker images -a -q)
概括
Docker 是一種多功能工具,是當今 DevOps 工程師武器庫的重要組成部分,也是 Kubernetes 等其他熱門技術的一部分。 Docker 映像管理是 Docker 部署管理和故障排除的重要組成部分之一。
您現在應該對docker
CLI 命令及其image
、 images
和rmi
等命令提供的功能有了基本的了解。 他們的標誌提供進一步的定制,並提供有助於自動化和高級使用的高級過濾和定制選項。
使用docker [COMMAND] help
獲取有關可用選項和相關幫助主題的更多詳細信息。