yazabilirim
docker images --filter "dangling=true"
Başka hangi filtreleri kullanabilirim?
Bunun gibi bir şey kullanabilir miyim?
docker images --filter "running=false"
Yanıtlar:
Docker v1.13.0 aşağıdaki koşulları destekler:
-f, --filter value Filter output based on conditions provided (default [])
- dangling=(true|false)
- label=<key> or label=<key>=<value>
- before=(<image-name>[:tag]|<image-id>|<image@digest>)
- since=(<image-name>[:tag]|<image-id>|<image@digest>)
- reference=(pattern of an image reference)
Veya grep
görüntüleri bir değere göre filtrelemek için kullanın :
$ docker images | grep somevalue
docker images -f "reference=*/*/*latest"
- Bu size benzer bir şey kazandırır k8s:30000/github/someImage:latest
. ya docker images -f "reference=*/*latest"
da seni alırdı k8s:30000/someImage:latest
. Bunları temizlemek istiyorsanız -docker rmi $(docker images -f "reference=*/*/*latest" -q --no-trunc)
Görüntüleri filtrelemek için REPOSITORY
argümanı da kullanabilirsiniz docker images
.
Örneğin, resimlere sahip olduğumuzu varsayalım:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
local-foo latest 17864104b328 2 months ago 100 MB
example.com/bar latest b94c37de2801 9 months ago 285 MB
example.com/baz latest a004e3ac682c 2 years ago 221 MB
Belirli bir ada sahip tüm görselleri açıkça filtreleyebiliriz:
$ docker images example.com/bar
REPOSITORY TAG IMAGE ID CREATED SIZE
example.com/bar latest b94c37de2801 9 months ago 285 MB
Docker ayrıca globbing'i destekler:
$ docker images "example.com/*"
REPOSITORY TAG IMAGE ID CREATED SIZE
example.com/bar latest b94c37de2801 9 months ago 285 MB
example.com/baz latest a004e3ac682c 2 years ago 221 MB
*
için geçerli değildir joker karakter /
depo adına. Bu nedenle son örnekte, tüm resimleri etiketle listelemek latest
için komut docker images --filter=reference='*:latest'
yanlıştır. Doğru komuttur docker images --filter=reference='*/*:latest'
.
--filter name=something
- ve başından beri, basit çözüm, bir (açık) filtreye ihtiyacınız olmamasıydı!
openapitools/openapi-generator-cli
, docker images open*
bulamayacaksınız. Ama docker images open*/*
bulacak.
Docker v1.7'de:
Şu anda desteklenen filtreler şunlardır:
true
veya false
)label=<key>
veya label=<key>=<value>
)before=<image-name>[:tag]|<image-id>|<image@digest>
since=(<image-name>[:tag]|<image-id>|<image@digest>)
Benim için,
docker images -q | while read IMAGE_ID; do
docker inspect --format='{{.Created}}' --type=image ${IMAGE_ID}
done
hile yaptı. Tarih komutu ile aynı formatta çıktı üretebilir.
date -Ins --date='10 weeks ago'
bu da zaman damgalarını karşılaştırmama olanak tanıyor. Yine de kolaylık sağlamak için filtreyi sarkık görüntüler için kullanıyorum.
sudo docker görüntüleri --filter "running = false"
Eski durdurulmuş kapları temizlemek için şunları kullanabilirsiniz:
docker container prune
Etiketsiz görüntüleri kaldırmak için şunları kullanabilirsiniz:
docker image prune
17.09 ++ sürümüyle çalışan başka bir örnek var:
sudo docker rmi $(sudo docker images -f=reference="registry.gitlab.com/example-app" -f "dangling=true" -q)
Açıklama:
reference
- görüntüleri depo adına göre referans alıyoruz;dangling=true
- etiketsiz resimleri kaldırıyoruz;-q
- sessiz anlamına gelir, tüm satır yerine resimlerin yalnızca sayısal kimliklerini gösterir.Bu komut, "kayıt defteri.gitlab.com/example-app" depo adına sahip ve etiketlenmemiş ( <none>
bir etiket sütununda bulunan) tüm görüntüleri kaldırır.
Referans bağlantısı: https://docs.docker.com/engine/reference/commandline/images/#filtering
Görsel filtresinin nasıl kullanılacağına dair orijinal cevaba eklemek için, sadece benzer bir senaryo için bir kullanım örneği eklemek için.
CI ardışık düzenim, docker'ı yeniden oluşturur ve bunları her seferinde son kayıt numarasıyla etiketler , bunları docker deposuna gönderir.
Bununla birlikte, bu, CI oluşturma makinesinde artık ve kullanılmayan / istenmeyen görüntülerle sonuçlanır. Bir gönderi adımı olarak, hepsini, hatta şimdi oluşturulmuş olanları bile temizlemem gerekiyor, ancak aynı zamanda, her seferinde indirmeyi önlemek için temel indirilen resimlerimi (OpenJDK, PostGre gibi) silinmeden bırakmak istiyorum.
LABEL built=XYZ
docker images --quiet --filter label=built=XYZ
docker rmi -f $(docker images --quiet --filter label=built=XYZ)