docker image ls filter
不新鮮、好像有用又好像還好的小知識
Apr 18, 2024
問題
之前在 Mac Docker Desktop 上把 Kubernetes 啟用起來後,在用 docker image ls
時,都會蠻困擾的,會有一堆關於 k8s cluster 需要的 image:
docker container ls
時其實也是,不過在某個 Docker Desktop 的版本後,就多了個選項控制是否要出現 k8s 內部的 containers(如下圖),只需要把 Show system containers
反勾選,這樣在執行 docker container ls
時,就不會看到 k8s 內部的 containers 了,清爽很多。
其實看到就看到,要說困擾好像也還好,但如果是在教學或做教材時,就會有影響。
解法
其實 docker image ls
有一個參數是 --filter
可以用,先來看看用起來是怎麼樣:
應該可以很直覺地觀察到,這次只顯示了 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
。
- reference: 透過指定的 pattern 去比對 reference 來過濾。Docker image 的 reference 是一個用來唯一標識和引用 Docker image 的字串,白話一點的說法就是 image 的名稱、tag,格式是
IMAGE[:TAG][@DIGEST]
,在上面的範例中,我們就是用golang:*
來比對 image 名稱是 golang,但 tag 不拘的 image。