Différence entre le registre et le référentiel Docker

147

Je suis confus quant à la différence entre les registres docker et les référentiels. Il semble que la documentation Docker utilise les deux mots de manière interchangeable. En outre, les référentiels sont parfois appelés images, comme celui-ci dans leurs documents:

Afin de pousser un référentiel vers son registre, vous devez avoir nommé une image ou validé votre conteneur dans une image nommée comme nous l'avons vu ici.

Vous pouvez maintenant pousser ce référentiel vers le registre désigné par son nom ou sa balise.

Comment pouvez-vous pousser un référentiel vers un registre? N'appuyez-vous pas l'image vers le référentiel?

Kingamere
la source
4
qu'en est-il des images Docker et des référentiels Docker?
Charlie Parker
pour les images vs les référentiels: stackoverflow.com/questions/31115098/…
wisbucky
1
si vous savez git, alors - Docker Registry (la valeur par défaut est hub.docker.com) => GitHub ( github.com); - Docker Repository => Git Repository; - Docker Tag => Git Ref (Branch / Tag)
go2null
Pour mieux mapper Docker vers Git: • Docker Registry = Git Server • Docker Repository = Git Repository • Docker Tag = Git Tag (plus ou moins)
Simon Woodside

Réponses:

171

Le registre Docker est un service qui stocke vos images Docker.

Le registre Docker peut être hébergé par un tiers, en tant que registre public ou privé, comme l'un des registres suivants:

ou vous pouvez héberger le registre docker par vous-même
(voir https://docs.docker.com/ee/dtr/ pour plus de détails).

Le référentiel Docker est une collection de différentes images Docker avec le même nom, qui ont des balises différentes. La balise est l'identifiant alphanumérique de l'image dans un référentiel.

Par exemple, voir https://hub.docker.com/r/library/python/tags/ . Il existe de nombreuses balises différentes pour l'image python officielle, ces balises sont toutes membres du référentiel python officiel sur le Docker Hub. Docker Hub est un registre Docker hébergé par Docker.

Pour en savoir plus, lisez:

Nemanja Trifunovic
la source
11
Artifactory est à ajouter à la liste;) Nous utilisons cela
buildmaestro
2
Et c'est le lien pour Artifactory - jfrog.com/confluence/display/RTF/Docker+Registry
JBaruch
1
quelle est la différence entre le référentiel et les images dans docker?
Charlie Parker
1
Le référentiel peut stocker plusieurs images différentes marquées par des balises.
Nemanja Trifunovic
2
Pourquoi est-il judicieux d'avoir une seule image avec plusieurs balises?
Charlie Parker
64

Extrait du livre Utilisation de Docker, développement et déploiement de logiciels avec des conteneurs

Registres, référentiels, images et balises

Il existe un système hiérarchique de stockage des images. La terminologie suivante est utilisée:

Enregistrement

Un service chargé de l'hébergement et de la diffusion des images. Le registre par défaut est le Docker Hub.

Dépôt

Une collection d'images associées (fournissant généralement différentes versions de la même application ou service).

Marque

Un identifiant alphanumérique attaché aux images dans un référentiel (par exemple, 14.04 ou stable).

Ainsi, la commande docker pull amouat/revealjs:latesttéléchargera l'image la plus récente dans le amouat/revealjsréférentiel à partir du registre Docker Hub.

Communauté
la source
1
alors peut-on avoir plusieurs balises pour une seule image?
Charlie Parker
1
@charlie Oui. Par exemple, maintenant ubuntu:latestet ubuntu:16.04ont le même Image ID, ce qui signifie qu'il ne s'agit que de plusieurs balises pour la même image.
wisbucky
Là où cela se décompose se trouve dans la documentation de docker pull, qui se lit en partie: "Pour télécharger une image particulière ou un ensemble d'images (c'est-à-dire un référentiel), utilisez docker pull. Si aucune balise n'est fournie, Docker Engine utilise la :latestbalise par défaut. " Comment, alors, «téléchargerait-on un… ensemble d'images (c'est-à-dire un référentiel)»? 🤔
Laird Nelson
1
info aléatoire: l'url de registre par défaut est docker.io
yosefrow
1
Je visualise cela comme un arbre avec le registre étant la racine qui a plusieurs référentiels enfants et chacun de ces référentiels a des images: tag comme enfants. Chacun de ces niveaux a un rôle particulier - un registre est comme un emplacement d'hébergement et un référentiel est un répertoire d'images. Ma compréhension est-elle correcte?
Ultrablendz
12

Compléter les informations:

  • Vous poussez généralement un référentiel vers un registre (et toutes les images qui en font partie). Mais vous pouvez pousser une seule image vers un registre. Dans tous les cas, vous utilisez docker push.
  • Une image a un ID d'image à 12 chiffres hexadécimaux, mais est également identifiée par: namespace/repo-name:tag
  • Le nom complet de l'image peut éventuellement être préfixé par le nom d'hôte et le port du registre: myregistryhost:5000/namespace/repo-name:tag
  • Une convention de dénomination courante consiste à utiliser votre nom d'utilisateur de registre comme ce que j'ai appelé «espace de noms».
Paulo Merson
la source
3
Je comprends ce que vous dites, mais techniquement, il n'y en a pas image-name. Le format doit être user-name/repo-name:tag, selon la documentation Docker . (J'aurais aimé que Docker utilise une meilleure terminologie, c'est assez déroutant, et ils ne sont même pas cohérents tout le temps).
wisbucky
@wisbucky Merci! J'ai mis à jour ma réponse. En effet, la documentation n'était pas très bonne lorsque j'ai répondu à cette question il y a un an. Par exemple, à l'époque, j'ai créé un problème sur le repo docker github car le glossaire du docker ne contenait pas de «couche» et d '«espace de noms» (!)
Paulo Merson
1
Et comment docker détermine-t-il l'adresse IP d'un registre public lorsque vous venez de mettre quelque chose comme nimmis / docker-alpine-java: dernier
Adam
1
Oops -docker info |grep Registry
Adam
2

Un référentiel docker est une jolie combinaison de registryet image.

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

est le même que

docker tag foo <repository>:<tag>
Dhulihan
la source
0

Docker Registry est un service que vous pouvez soit héberger vous-même (approuvé et privé), soit laisser docker hub être l'hôte de ce service. Habituellement, si votre logiciel est commercial, vous l'avez hébergé en tant que registre «privé et fiable». Pour les développeurs Java, cela ressemble un peu à la configuration de Maven Artifactory.

Docker Repository est un ensemble d'images "taguées". Un exemple est que vous avez peut-être tagué 5 des ubuntu:latestimages:

a) Éditeur Nano (image1_tag: v1)

b) Un logiciel spécifique 1 (image1_tag: v2)

c) Sudo (image1_tag: v3)

d) démon http apache (image1_tag: v4)

e) tomcat (étiquette_image1: v5)

Vous pouvez utiliser la docker pushcommande pour pousser chacune des images ci-dessus vers votre référentiel. Tant que les noms de référentiel correspondent, ils seront envoyés avec succès, et apparaîtront sous le référentiel choisi et correctement étiquetés.

Maintenant, votre question est: "Alors, où est hébergé ce référentiel / qui gère le service"? C'est là qu'intervient Docker Registry. Par défaut, vous obtiendrez un registre docker hub (Open Source) que vous pourrez utiliser pour conserver votre référentiel privé / public. Ainsi, sans aucune modification, vos images seront poussées vers votre référentiel privé dans Docker Hub. Voici un exemple de sortie lorsque vous envoyez vos balises d'image:

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:/$

Et si vous tapez immédiatement, docker images --digests -avous pouvez confirmer que vos balises d'image poussées affichent maintenant une nouvelle signature par rapport au référentiel privé géré par le registre du hub docker.

ha9u63ar
la source
"commande push docker pour pousser chacune des images ci-dessus vers votre référentiel" - vous ne poussez pas les images vers les référentiels, mais les référentiels vers les registres. Ou ai-je tort?
The Empaler
0

Docker Hub et d'autres services d'hébergement de référentiels tiers sont appelés «registres». Un registre stocke une collection de référentiels.

Comme un registre peut avoir de nombreux référentiels et un référentiel peut avoir plusieurs versions différentes de la même image qui sont individuellement versionnées avec des balises.

Abhishek Jain
la source