Różnica między rejestrem Docker a repozytorium

147

Jestem zdezorientowany co do różnicy między rejestrami dockerów a repozytoriami. Wygląda na to, że dokumentacja Dockera używa tych dwóch słów zamiennie. Ponadto repozytoria są czasami nazywane obrazami, na przykład z ich dokumentów:

Aby wypchnąć repozytorium do jego rejestru, musisz nazwać obraz lub przypisać kontener do nazwanego obrazu, jak widzieliśmy tutaj.

Teraz możesz wypchnąć to repozytorium do rejestru określonego przez jego nazwę lub tag.

Jak przesłać repozytorium do rejestru? Nie wypychasz obrazu do repozytorium?

Kingamere
źródło
4
co z obrazami Dockera a repozytoriami Dockera?
Charlie Parker
dla obrazów a repozytoria: stackoverflow.com/questions/31115098/…
wisbucky
1
jeśli wiesz git, to - Rejestr Docker (domyślnie hub.docker.com) => GitHub ( github.com); - Docker Repository => Git Repository; - Docker Tag => Git Ref (Branch / Tag)
go2null
Aby lepiej zmapować Docker na Git: • Docker Registry = Git Server • Docker Repository = Git Repository • Docker Tag = Git Tag (mniej więcej)
Simon Woodside

Odpowiedzi:

171

Rejestr platformy Docker to usługa przechowująca obrazy platformy Docker.

Rejestr platformy Docker może być obsługiwany przez firmę zewnętrzną jako rejestr publiczny lub prywatny, na przykład jeden z następujących rejestrów:

lub możesz samodzielnie hostować rejestr Docker
( więcej szczegółów znajdziesz na https://docs.docker.com/ee/dtr/ ).

Repozytorium Dockera to zbiór różnych obrazów dockera o tej samej nazwie, które mają różne tagi. Tag to alfanumeryczny identyfikator obrazu w repozytorium.

Na przykład zobacz https://hub.docker.com/r/library/python/tags/ . Istnieje wiele różnych tagów dla oficjalnego obrazu Pythona, wszystkie te tagi są członkami oficjalnego repozytorium Pythona w Docker Hub. Docker Hub to rejestr Docker obsługiwany przez platformę Docker.

Aby dowiedzieć się więcej, przeczytaj:

Nemanja Trifunovic
źródło
11
Artifactory to jedna do dodania do listy;) Używamy tego
buildmaestro
2
I to jest link do Artifactory - jfrog.com/confluence/display/RTF/Docker+Registry
JBaruch
1
Jaka jest różnica między repozytorium a obrazami w dockerze?
Charlie Parker
1
Repozytorium może przechowywać wiele różnych obrazów oznaczonych tagami.
Nemanja Trifunovic
2
Dlaczego warto mieć jeden obraz z wieloma tagami?
Charlie Parker
64

Z książki Using Docker, Developing and deploying Software with Containers

Rejestry, repozytoria, obrazy i tagi

Istnieje hierarchiczny system przechowywania obrazów. Używana jest następująca terminologia:

Rejestr

Usługa odpowiedzialna za hosting i dystrybucję obrazów. Rejestr domyślny to Docker Hub.

Magazyn

Zbiór powiązanych obrazów (zwykle udostępniających różne wersje tej samej aplikacji lub usługi).

Etykietka

Identyfikator alfanumeryczny dołączany do obrazów w repozytorium (np. 14.04 lub stabilny).

Zatem polecenie docker pull amouat/revealjs:latestpobierze obraz oznaczony jako najnowszy w amouat/revealjsrepozytorium z rejestru Docker Hub.

Społeczność
źródło
1
czy można mieć wiele tagów dla jednego obrazu?
Charlie Parker
1
@charlie Yes. Na przykład teraz ubuntu:latesti ubuntu:16.04mają to samo Image ID, co oznacza, że ​​są po prostu wieloma tagami dla tego samego obrazu.
wisbucky,
Tam, gdzie to się psuje, znajduje się w dokumentacji dla docker pull, która brzmi częściowo: „Aby pobrać określony obraz lub zestaw obrazów (tj. Repozytorium), użyj docker pull. Jeśli nie podano tagu, Docker Engine używa :latesttagu jako domyślnego. " Jak zatem można „pobrać… zestaw obrazów (tj. Repozytorium)”? 🤔
Laird Nelson,
1
losowe informacje: domyślny adres URL rejestru to docker.io
yosefrow
1
Wizualizuję to jak drzewo z rejestrem będącym katalogiem głównym, które ma kilka repozytoriów potomnych, a każde z tych repozytoriów ma obrazy: tag jako swoje dzieci. Każdy z tych poziomów ma określoną rolę - rejestr jest jak lokalizacja hostingu, a repozytorium to katalog obrazów. Czy moje rozumienie jest prawidłowe?
Ultrablendz
12

Uzupełnienie informacji:

  • Zazwyczaj wypychasz repozytorium do rejestru (i wszystkich obrazów, które są jego częścią). Ale możesz przesłać pojedynczy obraz do rejestru. We wszystkich przypadkach używasz docker push.
  • Obraz ma 12-cyfrowy identyfikator obrazu w formacie szesnastkowym, ale można go również rozpoznać po: namespace/repo-name:tag
  • Pełna nazwa obrazu może być opcjonalnie poprzedzona nazwą hosta rejestru i portem: myregistryhost:5000/namespace/repo-name:tag
  • Powszechną konwencją nazewnictwa jest użycie nazwy użytkownika rejestru jako tego, co nazwałem „przestrzenią nazw”.
Paulo Merson
źródło
3
Rozumiem, co mówisz, ale technicznie rzecz biorąc, nie ma czegoś takiego jak image-name. Format powinien być user-name/repo-name:tagzgodny z dokumentacją Dockera . (Szkoda, że ​​Docker nie używał lepszej terminologii, jest to dość zagmatwane i nie są nawet spójne przez cały czas).
wisbucky,
@wisbucky Thanks! Zaktualizowałem odpowiedź. Rzeczywiście, dokumentacja nie była tak dobra, kiedy rok temu odpowiadałem na to pytanie. Na przykład, wtedy utworzyłem problem w repozytorium docker github, ponieważ słownik dockera nie zawierał „warstwy” i „przestrzeni nazw” (!)
Paulo Merson
1
I w jaki sposób docker oblicza adres IP publicznego rejestru, gdy po prostu wstawisz coś takiego jak nimmis / docker-alpine-java: latest
Adam
1
Ups -docker info |grep Registry
Adam
2

Repozytorium docker to urocze połączenie registryi image.

docker tag foo <registry>/<image>:<tag>

jest taki sam jak

docker tag foo <repository>:<tag>
dhulihan
źródło
0

Docker Registry to usługa, którą możesz hostować samodzielnie (zaufana i prywatna) lub pozwolić, aby docker hub był hostem dla tej usługi. Zwykle, jeśli twoje oprogramowanie jest komercyjne, będziesz je hostować jako rejestr „prywatny i zaufany”. W przypadku programistów Java jest to nieco analogiczne do konfiguracji Maven Artifactory.

Docker Repository to zestaw obrazów „Tagged”. Na przykład możesz oznaczyć 5 ubuntu:latestobrazów:

a) Edytor Nano (image1_tag: v1)

b) Specyficzne oprogramowanie 1 (image1_tag: v2)

c) Sudo (image1_tag: v3)

d) demon apache http (image1_tag: v4)

e) kocur (image1_tag: v5)

Możesz użyć docker pushpolecenia, aby wypchnąć każdy z powyższych obrazów do swojego repozytorium. Dopóki nazwy repozytoriów pasują do siebie, zostaną pomyślnie przekazane i pojawią się pod wybranym repozytorium oraz prawidłowo oznaczone.

Teraz twoje pytanie brzmi: „Więc gdzie jest hostowane to repozytorium / kto zarządza usługą”? W tym miejscu pojawia się Docker Registry. Domyślnie otrzymasz rejestr docker hub (Open Source), którego możesz użyć do przechowywania prywatnego / publicznego repozytorium. Więc bez żadnych modyfikacji Twoje obrazy zostaną przeniesione do Twojego prywatnego repozytorium w Docker Hub. Przykładowe dane wyjściowe podczas przekazywania tagów graficznych są następujące:

docker@my-docker-vm:/$ docker push mydockerhub/my-helloworld-repo:my_tag
The push refers to repository [docker.io/mydockerhub/my-helloworld-repo]
bf41e934d39d: Pushed
70d93396f87f: Pushed
6ec525dfd060: Pushed
705419d10b13: Pushed
a4aaef726d02: Pushed
04964fddc946: Pushed
latest: digest: sha256:eb93c92351bce785aa3ec0de489cfeeaafd55b7d90adf95ecea02629b376e577 size: 1571
docker@my-docker-vm:/$

A jeśli od razu docker images --digests -awpiszesz, możesz potwierdzić, że przesłane znaczniki obrazu pokazują teraz nowy podpis w prywatnym repozytorium zarządzanym przez rejestr docker hub register.

ha9u63ar
źródło
„Polecenie docker push, aby wypchnąć każdy z powyższych obrazów do repozytorium” - nie wysyłasz obrazów do repozytoriów, ale repozytoria do rejestrów. A może się mylę?
The Impaler
0

Docker Hub i inne usługi hostingu repozytoriów stron trzecich nazywane są „rejestrami”. Rejestr przechowuje zbiór repozytoriów.

Ponieważ rejestr może mieć wiele repozytoriów, a repozytorium może mieć wiele różnych wersji tego samego obrazu, które są indywidualnie wersjonowane za pomocą tagów.

Abhishek Jain
źródło