Czy są jakieś najlepsze praktyki i / lub narzędzia do regularnego czyszczenia starych obrazów Dockera?


13

Czy istnieje elegancki sposób lub najlepsza praktyka, jeśli chodzi o usuwanie starych obrazów z rejestru Docker?

Widzę tu wiele próśb / problemów: https://github.com/docker/docker-registry/labels/delete , ale nie znalazłem dla niego dobrego / popularnego rozwiązania.

Czy istnieje narzędzie lub technika, która pomogłaby mi to zrobić?

Czy są też jakieś najlepsze praktyki, których przestrzegasz?


2
Czy pytasz, jak wyczyścić rejestr? (Który to link i pytanie, które podajesz), ale zaakceptowana odpowiedź nie polega na czyszczeniu rejestru, ale czyszczeniu lokalnego dokera.
dalej

Odpowiedzi:


10

Powodzenia w Spotify / docker-gc . Można go uruchomić z crona lub jako kontener dokera.

Prosty skrypt Docker do kontenerów i usuwania śmieci.

  • Pojemniki, które opuściły ponad godzinę temu, są usuwane.
  • Obrazy, które nie należą do żadnego pozostałego pojemnika po tym, są usuwane.

2
Na pierwszy rzut oka wydaje się, że za tymi wszystkimi bashami jest mniej więcej podzbiór jednowarstwowych odpowiedzi @rombob. Czy to prawda, czy jest w tym jakaś „inteligencja” docker-gc, której brakuje?
AnoE

1
Op łączy i zadaje pytanie, jak wyczyścić z rejestru, ale docker-gc nie usuwa z rejestru, a jedynie czyści z lokalnego komputera.
Wydaje

Strona Docker-gc zaleca teraz użycie docker system prunezamiast tego. Ale nie znalazłem sposobu, aby wykluczyć niektóre zdjęcia z usuwania za pomocą suszonych śliwek Dockera. Jest to sposób na wykluczenie niektórych zdjęć docker system prune?
Alexander Artemenko

9

Nie mogę nazwać najlepszą praktyką, ale używamy tego wyzwalanego przez crona, chętnie widząc lepsze sugestie.

echo "safely removing untagged images"
docker rmi $(docker images | awk '/<none>/{print $3}')

echo "safely removing stopped containers"
docker rm $(docker ps -a -q)

echo "safely removing old containers"
docker ps -a | awk '/weeks ago|months ago|days ago/{print $1}' | xargs --no-run-if-empty docker rm

echo "safely removing old images"
docker images | awk '/weeks ago|months ago|days ago/{print $3}' | xargs --no-run-if-empty docker rmi

echo "safely removing old volumes, custom rebuild of martin/docker-cleanup-volumes image"
docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(readlink -f /var/lib/docker):/var/lib/docker --rm example/docker-cleanup-volumes

echo "native cleanup Docker => 12"
docker system prune -f

Proszę nie łączyć grep i awk, wykonaj ten sam filtr tuż przed poleceniem awk `regex {polecenie}`
Tensibai

1
@Tensibai cokolwiek, aby uszczęśliwić czarowników AWK :)
rombob

Na wszelki wypadek, to nie tylko pedantyczne, oszczędzasz odradzanie procesu i dużą liczbę zmian kontekstu :) Nie zmienia się tutaj wiele, ale każda okazja, by się za nim bronić, jest dobra :)
Tensibai

@Tensibai zdecydowanie, dobre nawyki spłacają się z czasem, spawny kosztują nas czas i pieniądze :)
rombob

Zwłaszcza podczas parsowania / formatowania plików dziennika miliardowych linii, aby przygotować się na wejście R :) Tutaj nie oczekuję więcej niż kilkudziesięciu linii.
Tensibai

4

Na mojej lokalnej maszynie (Mac) mam mały skrypt, który stwierdziłem, że uruchamiam się okresowo, który czyści wszystkie nadmiarowe obrazy w celu oczyszczenia clean-docker-for-mac.sh

Na moich serwerach uruchamiam czyszczenie meltwater / docker, które okresowo czyści opuszczone pojemniki i usuwa nieużywane obrazy i woluminy.

Używam wielu różnych obrazów Docker do mojej pracy w Codemason, że takie skrypty są dla mnie koniecznością. Cieszyć się!


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.