Ответ 1
Развлечения с bash:
docker rmi $(docker images | grep stuff_ | tr -s ' ' | cut -d ' ' -f 3)
У меня есть некоторые автоматизированные процессы, которые вырывают кучу изображений Docker, помеченных значащими ярлыками. Этикетки следуют структурированному шаблону.
Есть ли способ найти и удалить изображения по тегу? Поэтому предположим, что у меня есть изображения:
REPOSITORY TAG
junk/root stuff_687805
junk/root stuff_384962
В идеале я хотел бы иметь возможность делать: docker rmi -tag stuff _ *
Любой хороший способ имитировать это?
Развлечения с bash:
docker rmi $(docker images | grep stuff_ | tr -s ' ' | cut -d ' ' -f 3)
Использование только фильтрации докеров:
docker rmi $(docker images --filter=reference="*:stuff_*" -q)
reference="*:stuff_*"
фильтр позволяет фильтровать изображения с помощью шаблона;-q
опция предназначена для отображения только идентификаторов изображений.Вы также можете выполнить его с помощью grep + args + xargs:
docker images | grep "stuff_" | awk '{print $1 ":" $2}' | xargs docker rmi
Примечание: будьте осторожны с поиском grep, так как он может также соответствовать чему-то, кроме тега, поэтому лучше сначала выполнить сухой запуск:
docker images | grep "stuff_" | awk '{print $1 ":" $2}' | xargs -n1 echo
Docker предоставляет несколько filtering, которые вы можете использовать с labels, но я не вижу поддержки подстановочных знаков.
docker images -f "label=mylabel=myvalue"
Кроме того, чтобы добавить метки к изображению, вы должны добавить информацию в Dockerfile
с помощью команды LABEL
. Я не мог найти способ добавить метки к изображению, если вы не изменили Dockerfile
(т.е. не смогли найти параметр командной строки), хотя вы можете добавить их в контейнеры во время выполнения с --label
и --label-file
(запустить docs).
docker rmi $ (изображения докера | grep stuff | tr -s '' | cut -d '' -f 3)
Я бы использовал идентификатор изображения для удаления изображений, тег "1.2.3":
docker rmi $(docker images | awk '$2~/1.2.3/{print $3}')