Sobre registros, repositórios e artefatos

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

Registry, repositories, and artifacts

Registo

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 controle direto de seu conteúdo de contêiner, com autenticação integrada, replicação geográfica com suporte à distribuição global e confiabilidade para implantações de fechamento de rede, configuração de rede virtual com Link Privado, bloqueio de tags e 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 Helm e formatos de imagem OCI (Open Container Initiative).

Repositório

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

  • acr-helloworld:últimas
  • acr-helloworld:v1
  • acr-helloworld:v2

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

  • Marketing/Campanha10-18/web:v2
  • Marketing/Campanha10-18/API:v3
  • marketing/campanha10-18/email-sender:v2
  • devoluções de produtos/submissão na web:20180604
  • product-returns/legacy-integrator:20180715

Os nomes dos repositórios só podem incluir caracteres alfanuméricos minúsculos, pontos, traços, sublinhados e barras.

Artefacto

Uma imagem de contêiner ou outro artefato dentro de um registro está associado a uma ou mais tags, tem uma ou mais camadas e é identificado por um manifesto. Entender como esses componentes se relacionam entre si pode ajudá-lo a gerenciar seu registro de forma eficaz.

Etiqueta

A tag para uma imagem ou outro artefato especifica sua versão. Um único artefato dentro de um repositório pode receber uma ou várias tags e também pode ser "desmarcado". Ou seja, você pode excluir todas as tags 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 tag latest é usada por padrão se você não fornecer uma nos comandos do Docker.

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

Para regras de nomenclatura de tags, consulte a documentação do Docker.

Camada

As imagens de contêiner e os artefatos são compostos por uma ou mais camadas. Diferentes tipos de artefatos definem 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

Os artefatos em um registro compartilham camadas comuns, aumentando a eficiência do armazenamento. Por exemplo, várias imagens em repositórios diferentes podem ter uma camada base ASP.NET Core comum, mas apenas uma cópia dessa camada é armazenada no registro. O compartilhamento de camadas também otimiza a distribuição de camadas para nós, com vários artefatos compartilhando camadas comuns. Se uma imagem já em um nó incluir a camada ASP.NET Core como base, o pull subsequente de uma imagem diferente fazendo referência à mesma camada não transferirá a camada para o nó. Em vez disso, ele faz referência à camada já existente no nó.

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

Manifesto

Cada imagem de contêiner ou artefato enviado por push para um registro de contêiner é associado a um manifesto. O manifesto, gerado pelo registro quando o conteúdo é enviado por push, identifica exclusivamente os artefatos e especifica as camadas.

Um manifesto básico para uma imagem do Linux hello-world é semelhante ao seguinte:

{
  "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 az acr manifest list-metadata da CLI do Azure:

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

Por exemplo, liste os manifestos 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

Os manifestos são identificados por um hash SHA-256 exclusivo ou pelo resumo do manifesto. Cada imagem ou artefato, marcado ou não, é identificado pelo seu resumo. O valor digest é exclusivo mesmo que os dados da camada do artefato sejam idênticos aos de outro artefato. Esse mecanismo é o que permite que você envie repetidamente imagens marcadas de forma idêntica para um registro. Por exemplo, você pode enviar myimage:latest repetidamente para o seu registro sem erro porque cada imagem é identificada por seu resumo exclusivo.

Você pode extrair um artefato de um registro especificando seu resumo na operação pull. Alguns sistemas podem ser configurados para pull by digest porque garante que a versão da imagem seja puxada, mesmo que uma imagem marcada de forma idêntica seja enviada posteriormente para o registro.

Importante

Se você enviar repetidamente artefatos modificados com tags idênticas, poderá criar "órfãos" - artefatos que não estão marcados, mas ainda consomem espaço no registro. As 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 em seu registro. A exclusão de uma imagem não marcada libera espaço no Registro quando o manifesto é o único, ou o último, apontando para uma camada específica. Para obter informações sobre como liberar espaço usado por imagens não marcadas, consulte Excluir imagens de contêiner no Registro de Contêiner do Azure.

Endereçando um artefato

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

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

Endereço por resumo: [loginServerUrl]/[repository@sha256][:digest]

Ao usar o Docker ou outras ferramentas de cliente para extrair ou enviar artefatos para um registro de 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 myregistry.azurecr.io (todas minúsculas).

Nota

  • Não é possível especificar um número de porta na URL do servidor de login do Registro, como myregistry.azurecr.io:443.
  • A tag é usada por padrão se você não fornecer uma tag latest no comando.

Empurrar por tag

Exemplos:

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

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

Puxe por tag

Exemplo:

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

Puxe pelo resumo do manifesto

Exemplo:

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

Próximos passos

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

Saiba como enviar e extrair imagens do Registro de Contêiner do Azure.