docker image ls filter
不新鮮、好像有用又好像還好的小知識
Apr 18, 2024
問題
之前在 Mac Docker Desktop 上把 Kubernetes 啟用起來後,在用 docker image ls 時,都會蠻困擾的,會有一堆關於 k8s cluster 需要的 image:
Press enter or click to view image in full size![]()
docker container ls 時其實也是,不過在某個 Docker Desktop 的版本後,就多了個選項控制是否要出現 k8s 內部的 containers(如下圖),只需要把 Show system containers 反勾選,這樣在執行 docker container ls 時,就不會看到 k8s 內部的 containers 了,清爽很多。
Press enter or click to view image in full size![]()
其實看到就看到,要說困擾好像也還好,但如果是在教學或做教材時,就會有影響。
解法
其實 docker image ls 有一個參數是 --filter 可以用,先來看看用起來是怎麼樣:
Press enter or click to view image in full size![]()
應該可以很直覺地觀察到,這次只顯示了 image 名稱是以 golang 開頭的。
根據官網的說明,支援以下幾種 filters:
- dangling: 例如
docker image ls -f "dangling=true"或是docker image ls -f=dangling=true,這樣就可以列出 dangling image 了,也就是那些目前沒有任何標籤、無法識別的 image。這些 image 可以用docker image prune來刪除,刪除前就可以先用 filter 查看一下。 - label: 如果你在 Dockerfile 或是 build image 時,有幫 image 打上 label,那就可以用 filter 來過濾這些 label。
- before & since: 列出某個 image 之前或之後的 image,由下圖可以觀察到,分別列出了 image 名稱是 golang,且在
golang:v5之前與之後的 images。除了用image:tag之外,也可以用image id。
Press enter or click to view image in full size![]()
- reference: 透過指定的 pattern 去比對 reference 來過濾。Docker image 的 reference 是一個用來唯一標識和引用 Docker image 的字串,白話一點的說法就是 image 的名稱、tag,格式是
IMAGE[:TAG][@DIGEST],在上面的範例中,我們就是用golang:*來比對 image 名稱是 golang,但 tag 不拘的 image。
