Я вмію писати
docker images --filter "dangling=true"
Які інші фільтри я можу використовувати?
Я можу використати щось подібне?
docker images --filter "running=false"
Відповіді:
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
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)
Ви також можете використовувати 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
*
символ підстановки не застосовується до /
імені сховища. Отже, в останньому прикладі перераховувати всі зображення з тегом latest
команда docker images --filter=reference='*:latest'
неправильно. Правильна команда docker images --filter=reference='*/*:latest'
.
--filter name=something
- і весь час, простим рішенням було те, що вам взагалі не потрібен (n явний) фільтр!
openapitools/openapi-generator-cli
, то docker images open*
не знайдете його. Але docker images open*/*
знайде.
У Docker v1.7:
Наразі підтримуються фільтри:
true
або false
)label=<key>
або label=<key>=<value>
)before=<image-name>[:tag]|<image-id>|<image@digest>
&since=(<image-name>[:tag]|<image-id>|<image@digest>)
Для мене,
docker images -q | while read IMAGE_ID; do
docker inspect --format='{{.Created}}' --type=image ${IMAGE_ID}
done
зробив фокус. Команда date може видавати вихід у тому ж форматі через
date -Ins --date='10 weeks ago'
що дозволяє мені порівнювати мітки часу. Однак для зручності я все ще використовую фільтр для звисання зображень.
зображення sudo docker --filter "running = false"
Для очищення старих зупинених контейнерів ви можете використовувати:
docker container prune
Щоб видалити непозначені зображення, ви можете використовувати:
docker image prune
Є ще один приклад, який працює з версією 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
Щоб додати до оригінальної відповіді, як використовувати фільтр зображень, просто додайте варіант використання для подібного сценарію.
Мій конвеєр CI відновлює докер і кожного разу позначає їх останнім номером коміту, відправляє до сховища докерів.
Однак це призводить до залишкових та невикористаних / небажаних зображень на машині побудови CI. Як крок після публікації, мені потрібно очистити їх усі, навіть ті, що були побудовані зараз, але в той же час хочу залишити свої базові завантажені зображення (такі як OpenJDK, PostGre) невидаленими, щоб уникнути завантаження кожного разу
LABEL built=XYZ
docker images --quiet --filter label=built=XYZ
docker rmi -f $(docker images --quiet --filter label=built=XYZ)