Diferença entre o registro e o repositório do Docker

147

Estou confuso quanto à diferença entre registros de docker e repositórios. Parece que a documentação do Docker usa as duas palavras de forma intercambiável. Além disso, os repositórios às vezes são chamados de imagens, como esta em seus documentos:

Para enviar um repositório para o registro, você precisa nomear uma imagem ou comprometer seu contêiner para uma imagem nomeada, como vimos aqui.

Agora você pode enviar este repositório para o registro designado por seu nome ou tag.

Como você pode enviar um repositório para um registro? Você não está empurrando a imagem para o repositório?

Kingamere
fonte
4
o que acontece com imagens docker vs repositórios docker?
Charlie Parker
para imagens versus repositórios: stackoverflow.com/questions/31115098/…
wisbucky 7/17
1
se você souber git, então - Docker Registry (o padrão é hub.docker.com) => GitHub ( github.com); - Repositório do Docker => Repositório do Git; - Docker Tag => Ref Git (Filial / Tag)
go2null
Para mapear melhor o Docker para o Git: • Registro do Docker = Servidor Git • Repositório do Docker = Repositório do Git • Tag do Docker = Tag do Git (mais ou menos)
Simon Woodside

Respostas:

170

O registro do Docker é um serviço que está armazenando suas imagens do Docker.

O registro do Docker pode ser hospedado por terceiros, como registro público ou privado, como um dos seguintes registros:

ou você pode hospedar o registro do docker sozinho
(consulte https://docs.docker.com/ee/dtr/ para obter mais detalhes).

O repositório do Docker é uma coleção de imagens diferentes do Docker com o mesmo nome, com tags diferentes. Tag é um identificador alfanumérico da imagem em um repositório.

Por exemplo, consulte https://hub.docker.com/r/library/python/tags/ . Existem muitas tags diferentes para a imagem oficial do python, essas tags são todos membros do repositório oficial do python no Docker Hub. O Docker Hub é um registro do Docker hospedado pelo Docker.

Para saber mais, leia:

Nemanja Trifunovic
fonte
11
Artifactory é um para adicionar à lista;) Nós usamos o que
buildmaestro
2
E isso é o link para Artifactory - jfrog.com/confluence/display/RTF/Docker+Registry
JBaruch
1
qual é a diferença entre repositório e imagens no docker?
Charlie Parker
1
O repositório pode armazenar várias imagens diferentes marcadas por tags.
Nemanja Trifunovic
2
Por que faz sentido ter uma única imagem com várias tags?
Charlie Parker
64

Do livro Usando o Docker, Desenvolvendo e implantando software com contêineres

Registros, Repositórios, Imagens e Tags

Existe um sistema hierárquico para armazenar imagens. A seguinte terminologia é usada:

Registro

Um serviço responsável por hospedar e distribuir imagens. O registro padrão é o Docker Hub.

Repositório

Uma coleção de imagens relacionadas (geralmente fornecendo versões diferentes do mesmo aplicativo ou serviço).

Tag

Um identificador alfanumérico anexado às imagens em um repositório (por exemplo, 14.04 ou estável).

Portanto, o comando docker pull amouat/revealjs:latestfará o download da imagem com a tag mais recente no amouat/revealjsrepositório do registro do Docker Hub.

Comunidade
fonte
1
então, pode-se ter várias tags para uma única imagem?
Charlie Parker
1
@charlie Sim. Por exemplo, agora ubuntu:lateste ubuntu:16.04tenha o mesmo Image ID, o que significa que são apenas várias tags para a mesma imagem.
wisbucky
Onde isso ocorre, está na documentação docker pull, que diz em parte: "Para fazer o download de uma imagem específica ou de um conjunto de imagens (por exemplo, um repositório), use docker pull. Se nenhuma tag for fornecida, o Docker Engine usará a :latesttag como padrão. " Como, então, alguém "baixaria um ... conjunto de imagens (isto é, um repositório)"? 🤔
Laird Nelson
1
informações aleatórias: o URL do registro padrão é docker.io
yosefrow
1
Eu visualizo isso como uma árvore, com o registro sendo a raiz que possui vários repositórios filhos e cada um desses repositórios possui images: tag como seus filhos. Cada um desses níveis tem uma função específica - um registro é como um local de hospedagem e um repositório é um diretório de imagens. Meu entendimento está correto?
21819 Ultrablendz
12

Complementando as informações:

  • Você normalmente envia um repositório para um registro (e todas as imagens que fazem parte dele). Mas você pode enviar uma única imagem para um registro. Em todos os casos, você usa docker push.
  • Uma imagem possui um ID de imagem de 12 dígitos hexadecimais, mas também é identificado por: namespace/repo-name:tag
  • O nome completo da imagem pode ser opcionalmente prefixado pelo nome do host do registro e porta: myregistryhost:5000/namespace/repo-name:tag
  • Uma convenção de nomenclatura comum é usar o nome de usuário do registro como o que chamei de "espaço para nome".
Paulo Merson
fonte
3
Entendo o que você está dizendo, mas tecnicamente não existe image-name. O formato deve ser user-name/repo-name:tag, de acordo com a documentação do Docker . (Eu gostaria que o Docker tivesse usado uma terminologia melhor, é bastante confuso e eles nem são consistentes o tempo todo).
wisbucky
@wisbucky Obrigado! Eu atualizei minha resposta. De fato, a documentação não era tão boa quando respondi a essa pergunta há um ano. Por exemplo, naquela época eu criei um problema no repo janela de encaixe github porque o glossário janela de encaixe não continha "camada" e "namespace" (!)
Paulo Merson
1
E como o docker calcula o endereço IP de um registro público quando você coloca algo como nimmis / docker-alpine-java: latest
Adam
1
Oooops -docker info |grep Registry
Adam
2

Um repositório de janela de encaixe é uma combinação atraente de registrye image.

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

é o mesmo que

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

O Docker Registry é um serviço, no qual você pode hospedar-se (Confiável e Privado) ou pode permitir que o docker hub seja o host desse serviço. Normalmente, se o seu software for comercial, você o hospedará como um registro "Privado e Confiável". Para desenvolvedores de Java, isso é um pouco análogo à configuração do Maven Artifactory.

Repositório do Docker é um conjunto de imagens "Marcadas". Um exemplo é que você pode ter marcado 5 ubuntu:latestimagens:

a) Nano editor (image1_tag: v1)

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

c) Sudo (image1_tag: v3)

d) daemon http do apache (image1_tag: v4)

e) tomcat (imagem1_tag: v5)

Você pode usar o docker pushcomando para enviar cada uma das imagens acima para o seu repositório. Enquanto os nomes dos repositórios corresponderem, eles serão enviados com êxito e aparecerão sob o repositório escolhido e serão marcados corretamente.

Agora, sua pergunta é: "Então, onde está hospedado este repositório / quem está gerenciando o serviço"? É aí que o Docker Registry entra em cena. Por padrão, você receberá um registro do hub do docker (código-fonte aberto) que pode ser usado para manter seu repositório público / privado. Portanto, sem nenhuma modificação, suas imagens serão enviadas para o repositório privado no docker hub. Um exemplo de saída quando você pressiona suas tags de imagem é o seguinte:

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

E se você digitar imediatamente, docker images --digests -apoderá confirmar que suas tags de imagem enviadas agora estão mostrando nova assinatura no repositório privado gerenciado pelo registro do docker hub.

ha9u63ar
fonte
"comando docker push para enviar cada uma das imagens acima para o seu repositório" - você não envia imagens para repositórios, mas repositórios para registros. Ou eu estou errado?
The Impaler
0

O Docker Hub e outros serviços de hospedagem de repositórios de terceiros são chamados de "registros". Um registro armazena uma coleção de repositórios.

Como um registro pode ter muitos repositórios e um repositório pode ter muitas versões diferentes da mesma imagem, que são individualmente versionadas com tags.

Abhishek Jain
fonte