Sobre os registros, repositórios e artefatos

Este artigo apresenta os principais conceitos de registros de contêiner, repositórios e imagens de contêiner e os artefatos relacionados.

Registry, repositories, and artifacts

Registro

Um registro de contêiner é um serviço que armazena e distribui imagens de contêiner e artefatos relacionados. O Docker Hub é um exemplo de um registro de contêiner público que serve como um catálogo geral de imagens de contêiner do Docker. O Registro de Contêiner do Azure fornece aos usuários o controle direto de seu conteúdo de contêiner, com autenticação integrada, replicação geográfica que dá suporte à distribuição global e confiabilidade para implantações de fechamento de rede, configuração de rede virtual com Link Privado, bloqueio de marcae muitos outros recursos aprimorados.

Além das imagens de contêiner compatíveis com o Docker, o registro de contêiner do Azure dá suporte a uma variedade de artefatos de conteúdo, incluindo gráficos de Helm e formatos de imagem de OCI.

Repositório

Um repositório é uma coleção de imagens de contêiner ou de outros artefatos em um registro que têm o mesmo nome, mas marcas diferentes. Por exemplo, as três imagens a seguir estão no repositório acr-helloworld:

  • acr-helloworld:latest
  • acr-helloworld:v1
  • acr-helloworld:v2

Também podem incluir nomes de repositório namespaces. Os namespaces permitem que você identifique os repositórios relacionados e a propriedade do artefato em sua organização usando nomes delimitados por barra. No entanto, o registro gerencia todos os repositórios de maneira independente, e não como uma hierarquia. Por exemplo:

  • marketing/campaign10-18/web:v2
  • marketing/campaign10-18/api:v3
  • marketing/campaign10-18/email-sender:v2
  • product-returns/web-submission:20180604
  • product-returns/legacy-integrator:20180715

Os nomes de repositório válidos só podem incluir caracteres alfanuméricos minúsculos, pontos, traços, sublinhados e barras invertidas.

Artefato

Uma imagem de contêiner ou de outro artefato dentro de um registro é associada a uma ou mais marcas, possui uma ou mais camadas e é identificada por um manifesto. Compreender como esses componentes se relacionam uns com os outros pode ajudá-lo a determinar o melhor método para liberar espaço em seu registro.

Marca

A marca para uma imagem ou outro artefato especifica sua versão. Um único artefato em um repositório pode ser atribuído a uma ou várias marcas e pode definido "sem marcas". Ou seja, você pode excluir todas as marcas de uma imagem, enquanto os dados da imagem (suas camadas) permanecem no registro.

O repositório (ou repositório e namespace) mais uma tag define o nome de uma imagem. Você pode empurrar e puxar uma imagem especificando seu nome na operação push ou pull. A marca latest será usada por padrão se você não fornecer uma marca em seus comandos do Docker.

A maneira como você marca imagens de contêiner é guiada por seus cenários para desenvolvê-las ou implantá-las. Por exemplo, marcas estáveis são recomendadas para manter suas imagens base e marcas exclusivas para implantar imagens. Para mais informações, vejaRecomendações para marcação e controle de versão de imagens de contêiner.

Para regras de nomeação de marca, veja a documentação do Docker.

Camada

Imagens de contêiner e artefatos são feitos de uma ou mais camadas. Diferentes tipos de artefato definem as camadas de forma diferente. Por exemplo, em uma imagem de contêiner do Docker, cada camada corresponde a uma linha no Dockerfile que define a imagem:

Layers of a container image

As imagens em um registro compartilham camadas comuns, aumentando a eficiência de um armazenamento. Por exemplo, várias imagens em repositórios diferentes podem compartilhar a mesma camada base de ASP.NET Core, mas apenas uma cópia dessa camada é armazenada no registro. Também é o compartilhamento de camada otimiza a distribuição de camada para nós com várias camadas comuns de compartilhamento de imagens. Por exemplo, se uma imagem já está em um nó inclui a camada de ASP.NET Core como sua base, o pull subsequentes de uma imagem diferente referenciando a mesma camada não transfere a camada para o nó. Em vez disso, ele faz referência à camada já existente no nó.

Para fornecer um isolamento seguro e proteção contra possíveis manipulações de camada, as camadas não são compartilhadas entre registros.

Manifest

Cada imagem de contêiner ou artefato enviados para um registro de contêiner é associada a um manifesto. O manifesto, gerado pelo registro quando o conteúdo é enviado, identifica de forma exclusiva os artefatos e especifica suas camadas.

Um manifesto básico para uma hello-world imagem do Linux se assemelha a esse:

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "config": {
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 1510,
    "digest": "sha256:fbf289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e"
  },
  "layers": [
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 977,
      "digest": "sha256:2c930d010525941c1d56ec53b97bd057a67ae1865eebf042686d2a2d18271ced"
    }
  ]
}

Você pode listar os manifestos de um repositório com o comando da CLI do Azure az acr manifest list-metadata.

az acr manifest list-metadata --name <repositoryName> --registry <acrName>

Por exemplo, listar o manifesto resumos para o repositório "acr-helloworld":

az acr manifest list-metadata --name acr-helloworld --registry myregistry
[
  {
    "digest": "sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108",
    "tags": [
      "latest",
      "v3"
    ],
    "timestamp": "2018-07-12T15:52:00.2075864Z"
  },
  {
    "digest": "sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57",
    "tags": [
      "v2"
    ],
    "timestamp": "2018-07-12T15:50:53.5372468Z"
  },
  {
    "digest": "sha256:7ca0e0ae50c95155dbb0e380f37d7471e98d2232ed9e31eece9f9fb9078f2728",
    "tags": [
      "v1"
    ],
    "timestamp": "2018-07-11T21:38:35.9170967Z"
  }
]

Resumo do manifesto

Manifestos são identificados por um único hash SHA-256, ou manifesto digest. Cada imagem ou artefato – se marcados ou não – é identificado por seu resumo. O valor de resumo é exclusivo, mesmo se os dados da camada da imagem forem idênticos aos de outra imagem. Esse mecanismo é o que permite que você envie repetidamente imagens com tags idênticas para um registro. Por exemplo, você pode enviar repetidamente myimage:latest para o seu registro sem erro, porque cada imagem é identificada pelo seu resumo único.

Você pode receber uma imagem de um registro, ao especificar seu resumo na operação de pull. Alguns sistemas podem ser configurados para efetuar pull por digest, pois ela garante que a versão da imagem que está sendo extraída, mesmo se uma imagem de forma idêntica marcada subsequentemente é enviada por push ao registro.

Importante

Se você efetuar push repetidamente em artefatos modificados com marcas idênticas, poderá criar imagens "órfãs" - artefatos sem tag, mas que ainda consomem espaço no registro. Imagens não marcadas não são mostradas na CLI do Azure ou no portal do Azure quando você lista ou exibe imagens por marca. No entanto, suas camadas ainda existem e consomem espaço no seu registro. A exclusão de uma imagem não marcada libera o espaço quando o manifesto é o único, ou o último, apontando para uma camada específica. Para mais informações sobre como liberar espaço usado por imagens não marcadas, consulteExcluir imagens de contêiner no Registro de Contêiner do Azure.

Endereçando um artefato

Para resolver um artefato do registro para operações de push e pull com o Docker ou outras ferramentas de cliente, combine o nome totalmente qualificado do registro, o nome do repositório (incluindo o caminho do namespace, se aplicável) e uma marca de artefato ou resumo de manifesto. Consulte as seções anteriores para obter explicações sobre esses termos.

Endereço por marca: [loginServerUrl]/[repository][:tag]

Endereço por código hash: [loginServerUrl]/[repository@sha256][:digest]

Ao usar o Docker ou outras ferramentas de cliente para efetuar pull ou enviar artefatos por push a um registro do contêiner do Azure, use a URL totalmente qualificada do registro, também chamada de nome do servidor de logon. Na nuvem do Azure, a URL totalmente qualificada de um registro de contêiner do Azure está no formato de myregistry.azurecr.io (todas as letras minúsculas).

Observação

  • Você não pode especificar um número de porta na URL do servidor de logon do registro, como myregistry.azurecr.io:443.
  • A marca latest será usada por padrão se você não fornecer uma em seus comandos do Docker.

Efetuar push por marca

Exemplos:

docker push myregistry.azurecr.io/samples/myimage:20210106

docker push myregistry.azurecr.io/marketing/email-sender

Efetuar pull por marca

Exemplo:

docker pull myregistry.azurecr.io/marketing/campaign10-18/email-sender:v2

Excluir por resumo do código hash

Exemplo:

docker pull myregistry.azurecr.io/acr-helloworld@sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108

Próximas etapas

Saiba mais sobre os armazenamento de registrose formatos de conteúdo com suporte no Registro de Contêiner do Azure.

Saiba como efetuar push e efetuar pull de imagens com Registro de Contêiner do Azure.