Как использовать фильтр изображений докеров

84

я могу написать

docker images --filter "dangling=true"

Какие еще фильтры я могу использовать?

Я могу использовать что-то подобное?

docker images --filter "running=false"
Montells
источник

Ответы:

89

Docker v1.13.0 поддерживает следующие условия:

  -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)

Или используйте grepдля фильтрации изображений по некоторому значению:

$ docker images | grep somevalue

Рекомендации

исследование
источник
5
Обновите свой ответ - в настоящее время, по состоянию на февраль 2017 года, он поддерживает еще несколько параметров.
Грег Дубицки
5
Это не идеально, но, используя приведенное выше, вы можете делать такие вещи, как docker images -f "reference=*/*/*latest"- Это даст вам что-нибудь подобное k8s:30000/github/someImage:latest. или docker images -f "reference=*/*latest"достанет тебя k8s:30000/someImage:latest. если вы хотите убрать их -docker rmi $(docker images -f "reference=*/*/*latest" -q --no-trunc)
Mark_Eng
Как мы можем исключить определенные изображения по имени репо?
переменная
40

Вы также можете использовать REPOSITORYаргумент docker imagesдля фильтрации изображений.

Например, предположим, что у нас есть изображения:

$ 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

Мы можем явно фильтровать все изображения с заданным именем:

$ docker images example.com/bar
REPOSITORY           TAG          IMAGE ID         CREATED         SIZE
example.com/bar      latest       b94c37de2801     9 months ago    285 MB

Docker также поддерживает подстановку:

$ 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

Официальные документы здесь .

Уилфред Хьюз
источник
3
Обратите внимание, что *подстановочный знак не применяется к /имени репозитория. Следовательно, в последнем примере для перечисления всех изображений с тегом latestкоманда docker images --filter=reference='*:latest'неверна. Правильная команда есть docker images --filter=reference='*/*:latest'.
Tomáš Záluský
Все это время я искал --filter name=something- и все это время было простым решением было то, что вам вообще не нужен (n явный) фильтр!
tripleee
2
Для тех, кто все еще сбит с толку ... Если вы ищете изображение openapitools/openapi-generator-cli, то docker images open*не найдете его. Но docker images open*/*найду.
Райан Ланди
12

В Docker v1.7:

В настоящее время поддерживаются следующие фильтры:

  • болтаться (логическое - trueили false)
  • ярлык ( label=<key>или label=<key>=<value>)
Эртугрул Алтынбога
источник
1
Начиная с версии Docker v1.12, вы можете фильтровать, используя before=<image-name>[:tag]|<image-id>|<image@digest>&since=(<image-name>[:tag]|<image-id>|<image@digest>)
xwlee
6

Для меня,

docker images -q | while read IMAGE_ID; do
    docker inspect --format='{{.Created}}' --type=image ${IMAGE_ID}
done

сделали свое дело. Команда date может производить вывод в том же формате через

date -Ins --date='10 weeks ago'

что позволяет мне сравнивать отметки времени. Однако для удобства я все еще использую фильтр для висящих изображений.

wmbolle
источник
3

sudo docker images --filter "running = false"

Для очистки старых остановленных контейнеров вы можете использовать:
docker container prune

Для удаления немаркированных изображений вы можете использовать:
docker image prune

RJFalconer
источник
0

Еще один пример, работающий с версией 17.09 ++:

sudo docker rmi $(sudo docker images -f=reference="registry.gitlab.com/example-app" -f "dangling=true" -q)

Пояснение:

  • reference - мы ссылаемся на изображения по имени репозитория;
  • dangling=true - удаляем немаркированные изображения;
  • -q - означает тихо, показывая только числовые идентификаторы изображений, а не целую строку.

Эта команда удаляет все изображения с именем репозитория "registry.gitlab.com/example-app" и без тегов (с <none> без тегов в столбце тегов).

Ссылка для справки: https://docs.docker.com/engine/reference/commandline/images/#filtering

Александр Ким
источник
0

Чтобы добавить к исходному ответу о том, как использовать фильтр изображений, просто добавьте вариант использования для аналогичного сценария.

Мой конвейер CI перестраивает докеры и помечает их последним номером фиксации каждый раз , отправляет их в репозиторий докеров.

Однако это приводит к появлению остаточных и неиспользуемых / нежелательных образов на машине сборки CI. В качестве пост-шага мне нужно очистить их все, даже те, которые собираются только что, но в то же время я хочу оставить мои базовые загруженные изображения (такие как OpenJDK, PostGre) не удаленными, чтобы избежать загрузки каждый раз

  1. Добавить / любую метку в файл Docker (уникальный и не предполагается, что он будет содержаться в моих базовых образах)

LABEL built=XYZ

  1. Использование фильтра изображений и просто получение идентификаторов изображений для изображений, которые я создал

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

  1. Удалите их как действие после сборки

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

TechFree
источник
-1

К вашему сведению, без фильтра, но для удаления всех изображений при использовании в качестве тестирования или обучения,

образ докера rm -f $ (образ докера ls)

Приветствия.

Лео
источник