2015-09-09 11 views
9

Mam kilka zautomatyzowanych procesów, które wypluwają kilka obrazów Docker oznaczonych znaczącymi etykietami. Etykiety mają uporządkowany wzór.Jak mogę usunąć obrazy Dockera według tagów, najlepiej z symbolem wieloznacznym?

Czy istnieje sposób na wyszukiwanie i usuwanie zdjęć według tagów? Zakładamy więc mam zdjęć:

REPOSITORY     TAG 
junk/root     stuff_687805 
junk/root     stuff_384962 

Idealnie chciałabym móc zrobić: doker RMI -tag stuff_ *

dobry sposób do symulacji to?

Odpowiedz

5

Zabawa z bash:

docker rmi $(docker images | grep stuff_ | tr -s ' ' | cut -d ' ' -f 3) 
+1

dlaczego nie: 'docker rmi $ (obrazy dokowane | aws '$ 2 ~/stuff _/{print $ 1}')' – BMW

+2

'aws' lub' awk'? –

0

Docker zapewnia pewną liczbę filtering, której można używać z labels, ale nie widzę obsługi symboli wieloznacznych.

docker images -f "label=mylabel=myvalue" 

Ponadto, aby dodać etykiety do obrazu należy dodać informację do Dockerfile poleceniem LABEL. Nie mogłem znaleźć sposobu na dodanie etykiet do obrazu, chyba że zmienisz Dockerfile (tj. Nie możesz znaleźć opcji wiersza poleceń), ale możesz dodać je do kontenerów w środowisku wykonawczym z --label i --label-file (run docs).

3

Można również acomplish go za pomocą grep + args + xargs:

docker images | grep "stuff_" | awk '{print $1 ":" $2}' | xargs docker rmi 
  • obrazów dokowane wymienia wszystkie obrazy
  • grep wybiera linie na podstawie wyszukiwania "_stuff"
  • awk wypisze pierwsze i drugie argumenty tych linii (nazwa obrazu i nazwę znacznika) z dwukropkiem w między
  • xargs będzie uruchomić polecenia „Döcker RMI” za pomocą każdy wiersz zwrócony przez awk, jak to Argument

Uwaga: być ostrożnym przy wyszukiwaniu grep, ponieważ może ona także pasować na coś oprócz znacznika, więc najlepiej zrobić na sucho pierwszy:

docker images | grep "stuff_" | awk '{print $1 ":" $2}' | xargs -n1 echo 
  • xargs -N1 z -N1 flagi oznacza xargs nie będzie grupy wiersze zwracane przez awk razem, ale echo je jeden na raz (dla lepszej czytelności)
4

Używając tylko filtrowanie Döcker:

docker rmi $(docker images --filter=reference="*:stuff_*" -q) 
  • Filtr reference="*:stuff_*" umożliwia filtrowanie obrazów za pomocą symbolu wieloznacznego;
  • -q Opcja służy do wyświetlania tylko identyfikatorów obrazów.
Powiązane problemy