Печатать первые N строк в группе -> Удалить все изображения докеров, кроме самых новых N для каждого имени изображения - PullRequest
1 голос
/ 16 октября 2019

Вариант использования: очистить дисковое пространство, удалив старые образы докеров

Взяв эти образы в качестве примера.

REPOSITORY          TAG                                        IMAGE ID            CREATED             SIZE
gateway             2f280f169e9b018c3ee155e47e176c3418349b90   846b7ba3595c        9 hours ago         597MB
gateway             latest                                     846b7ba3595c        9 hours ago         597MB
gateway             2f280f169e9b018c3ee155e47e176c3418349b90   e47e176c3418        9 hours ago         597MB
order               2f280f169e9b018c3ee155e47e176c3418349b90   0e01f7594e4a        9 hours ago         591MB
order               latest                                     0e01f7594e4a        9 hours ago         591MB
order               2f280f169e9b018c3ee155e47e176c3418349b90   7e176c34183a        9 hours ago         591MB
payment             2f280f169e9b018c3ee155e47e176c3418349b90   e2053260d33e        9 hours ago         590MB
payment             latest                                     e2053260d33e        9 hours ago         590MB
payment             2f280f169e9b018c3ee155e47e176c3418349b90   169e9b018c3e        9 hours ago         590MB
price-offer         2f280f169e9b018c3ee155e47e176c3418349b90   5a4726a65fbd        9 hours ago         589MB

Я хотел бы удалить все изображения, но всегда сохранять самые новые Nизображения для каждого имени / репозитория.

Итак, у меня есть 3 изображения шлюза, 3 заказа, 3 платежа и 1 предложение цены. Если я запускаю скрипт с N = 2, он должен удалить самый старый шлюз, заказ, изображение платежа и не удалять один образ предложения цены. Если я выполню скрипт с N = 1, он сохранит только самое новое изображение для каждого хранилища / имени.

В настоящее время у меня есть это:

docker images | tail -n+2 | awk '{ print $1,$3 }' | sort -r

, что дает мне:

gateway  e47e176c3418
gateway 846b7ba3595c
gateway 846b7ba3595c
order 7e176c34183a 
order 0e01f7594e4a
order 0e01f7594e4a
payment 169e9b018c3e
payment e2053260d33e
payment e2053260d33e
price-offer 5a4726a65fbd

Но я борюсь с частью, которая просто печатает первые N строк для каждого изображения (где $ 1 - то же самое).

1 Ответ

2 голосов
/ 16 октября 2019

Вы можете использовать эту команду awk для вывода списка всех последних N изображений:

docker images | awk -v N=2 '++freq[$1] <= N'

Чтобы удалить все самые старые изображения и сохранить самые новые N изображения, используйте:

docker images | awk -v N=2 '++freq[$1] > N {print $3}' | xargs -p docker rmi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...