W celach badawczych próbuję przeszukać publiczny rejestr Docker ( https://registry.hub.docker.com/ ) i dowiedzieć się 1) ile warstw ma przeciętny obraz i 2) rozmiary tych warstw, aby uzyskać idea dystrybucji.
Jednak przestudiowałem API i biblioteki publiczne, a także szczegóły na githubie, ale nie mogę znaleźć żadnej metody, aby:
- pobrać wszystkie publiczne repozytoria / obrazy (nawet jeśli są to tysiące, nadal potrzebuję listy początkowej do iteracji)
- znajdź wszystkie warstwy obrazu
- znajdź rozmiar warstwy (a więc nie obrazu, ale pojedynczej warstwy).
Czy ktoś może mi pomóc znaleźć sposób na odzyskanie tych informacji?
Dziękuję Ci!
EDYCJA: czy ktokolwiek jest w stanie sprawdzić, czy wyszukiwanie „*” w rejestrze Dockera zwraca wszystkie repozytoria, a nie tylko wszystko, co gdziekolwiek wspomina „*”? https://registry.hub.docker.com/search?q=*
image
docker
web-crawler
user134589
źródło
źródło
docker history myimage
a zobaczysz rozmiar każdej warstwy. Mówiąc bardziej ogólnie, na obrazie możeszdocker history myimage | awk 'NR>1 {print $1}' | xargs docker inspect --format '{{ ((index .ContainerConfig.Cmd ) 0) }}'
zobaczyć, jakie polecenia zostały wydane w celu utworzenia obrazuhttps://registry.hub.docker.com/search?q=*
pokazuje mi 87031 repozytoriów,Odpowiedzi:
Warstwy obrazów można znaleźć w folderze / var / lib / docker / aufs / layer; podać, jeśli skonfigurowano sterownik pamięci masowej jako aufs (opcja domyślna)
Przykład:
Teraz, aby wyświetlić warstwy kontenerów, które zostały utworzone za pomocą obrazu „Ubuntu”; przejdź do katalogu / var / lib / docker / aufs / layer i cat plik zaczyna się od identyfikatora kontenera (tutaj jest to 0ca502fa6aae *)
To pokaże wynik tego samego, uruchamiając
Aby wyświetlić pełny identyfikator warstwy; uruchom z opcją --no-trunc jako część polecenia historii.
źródło
docker history
polecenie nie da warstw obrazu, jak pokazano w folderze / var / lib / docker / aufs / layer. Przeczytaj aktualizację tutaj .docker history
polecenie nie podaje już rzeczywistych informacji o pamięci dyskowej warstwy na hoście platformy Docker. Sprawdź ten blogMożesz najpierw znaleźć identyfikator obrazu za pomocą:
Następnie znajdź warstwy obrazu i ich rozmiary:
Uwaga: używam Dockera w wersji 1.13.1
źródło
Sprawdź nurkowanie napisane w języku golang.
Niesamowite narzędzie!
źródło
Moim zdaniem
docker history <image>
wystarczy. Zwraca rozmiar każdej warstwy:źródło
Mają tutaj bardzo dobrą odpowiedź: https://stackoverflow.com/a/32455275/165865
Po prostu uruchom poniższe obrazy:
źródło
Spowoduje to sprawdzenie obrazu dokowanego i wydrukowanie warstw:
źródło
jeszcze jedno narzędzie: https://github.com/CenturyLinkLabs/dockerfile-from-image
GUI przy użyciu ImageLayers.io
źródło
https://hub.docker.com/search?q=* pokazuje wszystkie obrazy w całym centrum Docker, nie można tego uzyskać za pomocą polecenia wyszukiwania, ponieważ nie akceptuje symboli wieloznacznych.
Od wersji 1.10 wszystkie warstwy obrazu można znaleźć, pociągając go i używając następujących poleceń:
3) Rozmiar można znaleźć w
/var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/size
chociaż LAYERID! = The diff_ids znalezione w poprzednim poleceniu. W tym celu należy spojrzeć/var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/diff
i porównać z wynikami poprzedniego polecenia, aby poprawnie dopasować poprawny identyfikator diff_id i rozmiar.źródło
Wykonywanie zapytań dotyczących manifestu lub informacji o obiekcie BLOB z serwera rejestru platformy Docker bez ściągania obrazu na dysk lokalny jest rzeczywiście wykonalne .
Możesz odwołać się do interfejsu API Registry v2, aby pobrać manifest obrazu.
Uwaga, musisz obsługiwać różne wersje manifestu. W przypadku wersji 2 można bezpośrednio uzyskać rozmiar warstwy i podsumowanie obiektu blob. W przypadku manifestu w wersji 1 można HEAD adres URL pobierania obiektu BLOB, aby uzyskać rzeczywisty rozmiar warstwy.
Istnieje prosty skrypt do obsługi powyższych przypadków, który będzie stale rozwijany.
źródło
Niezupełnie pierwotne pytanie, ale aby znaleźć sumę wszystkich obrazów bez podwójnego liczenia wspólnych warstw, przydatne jest następujące (ubuntu 18):
źródło
Rozwiązałem ten problem, używając funkcji wyszukiwania w witrynie Dockera, gdzie „*” jest prawidłowym wyszukiwaniem, które zwraca 200 tys. Repozytoriów, a następnie przeszukałem każdą indywidualną stronę. Analiza HTML pozwala mi wyodrębnić wszystkie nazwy obrazów na każdej stronie.
źródło