Docker görüntü filtresi nasıl kullanılır


84

yazabilirim

docker images --filter "dangling=true"

Başka hangi filtreleri kullanabilirim?

Bunun gibi bir şey kullanabilir miyim?

docker images --filter "running=false"

Yanıtlar:


89

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 grepgörüntüleri bir değere göre filtrelemek için kullanın :

$ docker images | grep somevalue

Referanslar


5
Lütfen cevabınızı güncelleyin - şu anda, Şubat 2017 itibariyle, birkaç parametresi daha desteklemektedir.
Greg Dubicki

5
Mükemmel değil, ama yukarıdakileri kullanarak şu gibi şeyler yapabilirsiniz 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)
Mark_Eng

Belirli görselleri repo adına göre nasıl hariç tutabiliriz?
değişken

40

Görüntüleri filtrelemek için REPOSITORYargü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

Resmi belgeler burada .


3
Not *için geçerli değildir joker karakter /depo adına. Bu nedenle son örnekte, tüm resimleri etiketle listelemek latestiçin komut docker images --filter=reference='*:latest'yanlıştır. Doğru komuttur docker images --filter=reference='*/*:latest'.
Tomáš Záluský

Tüm bu aradığım zaman --filter name=something- ve başından beri, basit çözüm, bir (açık) filtreye ihtiyacınız olmamasıydı!
üçlü

2
Hala şaşkın olanlar için ... Görüntüyü arıyorsanız openapitools/openapi-generator-cli, docker images open*bulamayacaksınız. Ama docker images open*/*bulacak.
Ryan Lundy

12

Docker v1.7'de:

Şu anda desteklenen filtreler şunlardır:

  • sarkan (boole - trueveya false)
  • etiket ( label=<key>veya label=<key>=<value>)

1
Docker v1.12 before=<image-name>[:tag]|<image-id>|<image@digest>since=(<image-name>[:tag]|<image-id>|<image@digest>)
sürümünden itibaren,

6

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.



0

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


0

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.

  1. Docker dosyasına bir / herhangi bir etiket ekleyin (benzersizdir ve temel görüntülerimde bulunması beklenmez)

LABEL built=XYZ

  1. Görüntüler filtresini kullanmak ve sadece oluşturduğum görüntülerin görüntü tanımlayıcılarını almak için

docker images --quiet --filter label=built=XYZ

  1. Bunları bir post derleme eylemi olarak silin

docker rmi -f $(docker images --quiet --filter label=built=XYZ)


-1

Bilginize, filtresiz, ancak test veya öğrenme olarak kullandığınızda tüm görüntüleri silmek için,

docker görüntüsü rm -f $ (docker görüntüsü ls)

Selamlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.