Diferencia entre el registro Docker y el repositorio

147

Estoy confundido en cuanto a la diferencia entre los registros de docker y los repositorios. Parece que la documentación de Docker usa las dos palabras indistintamente. Además, los repositorios a veces se denominan imágenes, como esta de sus documentos:

Para insertar un repositorio en su registro, debe haber nombrado una imagen o haber confirmado su contenedor a una imagen con nombre como vimos aquí.

Ahora puede enviar este repositorio al registro designado por su nombre o etiqueta.

¿Cómo puede empujar un repositorio a un registro? ¿No estás empujando la imagen al repositorio?

Kingamere
fuente
44
¿Qué pasa con las imágenes de Docker vs repositorios de Docker?
Charlie Parker
para imágenes vs repositorios: stackoverflow.com/questions/31115098/…
wisbucky
1
si lo sabe git, entonces - Docker Registry (el valor predeterminado es hub.docker.com) => GitHub ( github.com); - Repositorio Docker => Repositorio Git; - Docker Tag => Git Ref (Branch / Tag)
go2null
Para asignar mejor Docker a Git: • Registro Docker = Servidor Git • Repositorio Docker = Repositorio Git • Etiqueta Docker = Etiqueta Git (más o menos)
Simon Woodside

Respuestas:

170

El registro de Docker es un servicio que almacena sus imágenes de Docker.

El registro de Docker puede ser alojado por un tercero, como registro público o privado, como uno de los siguientes registros:

o puede alojar el registro de docker usted mismo
(consulte https://docs.docker.com/ee/dtr/ para obtener más detalles).

El repositorio de Docker es una colección de diferentes imágenes de docker con el mismo nombre, que tienen etiquetas diferentes. La etiqueta es un identificador alfanumérico de la imagen dentro de un repositorio.

Por ejemplo, consulte https://hub.docker.com/r/library/python/tags/ . Hay muchas etiquetas diferentes para la imagen oficial de Python, todas estas etiquetas son miembros del repositorio oficial de Python en Docker Hub. Docker Hub es un registro de Docker alojado por Docker.

Para obtener más información, lea:

Nemanja Trifunovic
fuente
11
Artifactory es uno para agregar a la lista;) Usamos eso
buildmaestro
2
Y ese es el enlace para Artifactory - jfrog.com/confluence/display/RTF/Docker+Registry
JBaruch
1
¿Cuál es la diferencia entre repositorio e imágenes en Docker?
Charlie Parker
1
El repositorio puede almacenar múltiples imágenes diferentes marcadas por etiquetas.
Nemanja Trifunovic
2
¿Por qué tiene sentido que una sola imagen tenga varias etiquetas?
Charlie Parker
64

Del libro Usando Docker, Desarrollando e implementando Software con Contenedores

Registros, repositorios, imágenes y etiquetas

Hay un sistema jerárquico para almacenar imágenes. Se utiliza la siguiente terminología:

Registro

Un servicio responsable de alojar y distribuir imágenes. El registro predeterminado es el Docker Hub.

Repositorio

Una colección de imágenes relacionadas (que generalmente proporcionan diferentes versiones de la misma aplicación o servicio).

Etiqueta

Un identificador alfanumérico adjunto a las imágenes dentro de un repositorio (por ejemplo, 14.04 o estable).

Por lo tanto, el comando docker pull amouat/revealjs:latestdescargará la última imagen etiquetada dentro del amouat/revealjsrepositorio desde el registro de Docker Hub.

Comunidad
fuente
1
Entonces, ¿se pueden tener varias etiquetas para una sola imagen?
Charlie Parker
1
@charlie Sí. Por ejemplo, ahora mismo ubuntu:latesty ubuntu:16.04tienen lo mismo Image ID, lo que significa que son solo varias etiquetas para la misma imagen.
wisbucky
Lo que se desglosa es en la documentación de docker pull, que se lee en parte: "Para descargar una imagen en particular o un conjunto de imágenes (es decir, un repositorio), use docker pull. Si no se proporciona ninguna etiqueta, Docker Engine usa la :latestetiqueta por defecto. " ¿Cómo, entonces, se "descargaría un ... conjunto de imágenes (es decir, un repositorio)"? 🤔
Laird Nelson
1
información aleatoria: la URL de registro predeterminada es docker.io
yosefrow
1
Visualizo esto como un árbol con el registro siendo la raíz que tiene varios repositorios hijos y cada uno de estos repositorios tiene imágenes: etiqueta como hijos. Cada uno de estos niveles tiene una función particular: un registro es como una ubicación de alojamiento y un repositorio es un directorio de imágenes. ¿Es correcto mi entendimiento?
Ultrablendz
12

Complementando la información:

  • Por lo general, empuja un repositorio a un registro (y todas las imágenes que forman parte de él). Pero puede insertar una sola imagen en un registro. En todos los casos, usas docker push.
  • Una imagen tiene una ID de imagen de 12 dígitos hexadecimales, pero también se identifica por: namespace/repo-name:tag
  • El nombre completo de la imagen puede ser opcionalmente precedido por el nombre del host del registro y el puerto: myregistryhost:5000/namespace/repo-name:tag
  • Una convención de nomenclatura común es usar su nombre de usuario de registro como lo que llamé "espacio de nombres".
Paulo Merson
fuente
3
Entiendo lo que dices, pero técnicamente no existe tal cosa image-name. El formato debe ser user-name/repo-name:tag, de acuerdo con la documentación de Docker . (Ojalá Docker hubiera usado una mejor terminología, es bastante confuso, y ni siquiera son consistentes todo el tiempo).
wisbucky
@wisbucky Gracias! Actualicé mi respuesta. De hecho, la documentación no era tan buena cuando respondí esta pregunta hace un año. Por ejemplo, en aquel entonces creé un problema en el repositorio de Docker Github porque el glosario de Docker no contenía "capa" y "espacio de nombres" (!)
Paulo Merson
1
¿Y cómo funciona Docker la dirección IP de un registro público cuando simplemente coloca algo como nimmis / docker-alpine-java: último
Adam
1
Oooops -docker info |grep Registry
Adam
2

Un repositorio de Docker es una linda combinación de registryy image.

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

es lo mismo que

docker tag foo <repository>:<tag>
dhulihan
fuente
0

Docker Registry es un servicio que puede alojar usted mismo (de confianza y privado) o puede dejar que Docker Hub sea el anfitrión de este servicio. Por lo general, si su software es comercial, lo habrá alojado como un registro "privado y de confianza". Para los desarrolladores de Java, esto es algo análogo a la configuración de Maven Artifactory.

Docker Repository es un conjunto de imágenes "etiquetadas". Un ejemplo es que podría haber etiquetado 5 deubuntu:latest imágenes:

a) Nano editor (image1_tag: v1)

b) Un software específico 1 (image1_tag: v2)

c) Sudo (image1_tag: v3)

d) apache http daemon (etiqueta_de_imagen: v4)

e) tomcat (image1_tag: v5)

Puedes usar docker push comando para enviar cada una de las imágenes anteriores a su repositorio. Mientras los nombres del repositorio coincidan, se enviarán con éxito y aparecerán debajo del repositorio elegido y se etiquetarán correctamente.

Ahora, su pregunta es: "Entonces, ¿dónde está alojado este repositorio / quién administra el servicio"? Ahí es donde Docker Registry entra en escena. De forma predeterminada, obtendrá un registro de Docker Hub (código abierto) que puede usar para mantener su repositorio privado / público. Entonces, sin ninguna modificación, sus imágenes se enviarán a su repositorio privado en Docker Hub. Un ejemplo de salida cuando empuja sus etiquetas de imagen es el siguiente:

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

Y si escribe de inmediato docker images --digests -a, puede confirmar que sus etiquetas de imagen insertadas ahora muestran una nueva firma en el repositorio privado administrado por el registro de Docker Hub.

ha9u63ar
fuente
"comando push docker para enviar cada una de las imágenes anteriores a su repositorio": no inserta imágenes en repositorios, sino repositorios en registros. ¿O estoy equivocado?
The Impaler
0

Docker Hub y otros servicios de alojamiento de repositorios de terceros se denominan "registros". Un registro almacena una colección de repositorios.

Como un registro puede tener muchos repositorios y un repositorio puede tener muchas versiones diferentes de la misma imagen que se versionan individualmente con etiquetas.

Abhishek Jain
fuente