Tak więc osobiście polecam to zrobić jako część skryptu wdrażania dla obrazów i kontenerów, zachowując tylko najnowsze n kontenery i obrazy. Oznaczam moje obrazy Dockera tym samym schematem wersji, którego używam, git tag
a także zawsze otaguję najnowszy obraz Dockera słowem „najnowsze”. Oznacza to, że bez niczego czyszczenia moje obrazy Dockera wyglądają następująco:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
some_repo/some_image 0.0.5 8f1a7c7ba93c 23 hours ago 925.4 MB
some_repo/some_image latest 8f1a7c7ba93c 23 hours ago 925.4 MB
some_repo/some_image 0.0.4 0beabfa514ea 45 hours ago 925.4 MB
some_repo/some_image 0.0.3 54302cd10bf2 6 days ago 978.5 MB
some_repo/some_image 0.0.2 0078b30f3d9a 7 days ago 978.5 MB
some_repo/some_image 0.0.1 sdfgdf0f3d9a 8 days ago 938.5 MB
Teraz oczywiście nie chcę, aby wszystkie moje obrazy (lub pojemniki) wracały do wieczności na wszystkich moich pudełkach produkcyjnych. Chcę tylko 3 lub 4 ostatnie wycofania i pozbyć się wszystkiego innego. Unix's tail
jest tutaj twoim najlepszym przyjacielem. Ponieważ docker images
i docker ps
oba zamawiają według daty, możemy po prostu tail
wybrać wszystkie oprócz trzech najlepszych i usunąć je:
docker rmi $(docker images -q | tail -n +4)
Uruchom to wraz ze swoimi skryptami wdrażania (lub lokalnie), aby zawsze mieć tylko wystarczającą liczbę obrazów, aby wygodnie je wycofać, nie zajmując zbyt wiele miejsca ani nie zaśmiecając starych obrazów.
Osobiście trzymam tylko jeden pojemnik na pudełku produkcyjnym w dowolnym momencie, ale możesz zrobić to samo z pojemnikami, jeśli chcesz więcej:
docker rm $(docker ps -aq | tail -n +4)
Wreszcie, w moim uproszczonym przykładzie, mamy do czynienia tylko z jednym repozytorium na raz, ale jeśli masz więcej, możesz stać się nieco bardziej wyrafinowany z tym samym pomysłem. Powiedzmy, że chcę zatrzymać trzy ostatnie obrazy z some_repo / some_image. Mogę po prostu wymieszać grep
i awk
i być w drodze:
docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)
Ponownie ten sam pomysł dotyczy pojemników, ale rozumiesz już do tego momentu, więc przestanę podawać przykłady.