O Artifact Registry é o serviço recomendado para gerenciar imagens de contêiner. O Container Registry ainda é compatível, mas só recebe correções de segurança críticas. Saiba mais sobre a transição para o Artifact Registry.

Visão geral do Container Registry

O Google Cloud tem dois serviços para armazenar e gerenciar imagens de contêiner:

Artifact Registry (recomendado)
Um serviço para armazenar e gerenciar artefatos em repositórios particulares, incluindo imagens de contêiner, gráficos do Helm e pacotes de linguagens.

O Artifact Registry estende os recursos do Container Registry. Além de compatibilidade com vários formatos de artefatos, o serviço oferece outros benefícios, como os seguintes:

  • Suporte regional e multirregional
  • Capacidade de criar vários repositórios discretos na mesma região ou multirregião com controle de acesso no nível do repositório
  • Papéis específicos de gerenciamento de acesso e identidade do serviço, com separação clara da administração do repositório e permissões do usuário do repositório
Container Registry

Um registro de imagem de contêiner particular compatível com os formatos de imagem Docker Manifest V2 e OCI. Ele fornece um subconjunto de recursos do Artifact Registry.

O Container Registry ainda está disponível e é compatível com a API Google Enterprise, mas novos recursos só estarão disponíveis no Artifact Registry. O Container Registry receberá apenas correções de segurança críticas.

Para ver uma comparação entre o Container Registry e o Artifact Registry e informações sobre como fazer a transição do Container Registry para o Artifact Registry, consulte Transição do Container Registry.

Como trabalhar com imagens

Muitas pessoas usam o Docker Hub como um registro central para armazenar imagens públicas do Docker, mas para controlar o acesso às suas imagens, você precisa usar um registro privado, como o Artifact Registry ou o Container Registry.

É possível acessar o registro por meio de endpoints HTTPS seguros, que permitem enviar, extrair e gerenciar imagens de qualquer sistema, instância de VM ou do seu próprio hardware.

Registros

É possível criar até quatro hosts multirregionais em cada projeto do Google Cloud com o Container Registry. Se você quiser criar repositórios mais discretos com políticas de acesso separadas ou armazenar imagens em regiões em vez de multirregiões, use o Artifact Registry.

Os registros no Container Registry são nomeados pelo host e pelo ID do projeto. Para trabalhar com imagens (por exemplo, push, pull, delete) identifique a imagem usando o seguinte formato:

HOSTNAME/PROJECT-ID/IMAGE:TAG

ou

HOSTNAME/PROJECT-ID/IMAGE@IMAGE-DIGEST

em que:

  • HOSTNAME é o local onde a imagem está armazenada:

    • gcr.io hospeda as imagens nos Estados Unidos, mas o local pode mudar no futuro
    • us.gcr.io hospeda a imagem nos Estados Unidos, em um bucket de armazenamento separado das imagens hospedadas por gcr.io
    • eu.gcr.io hospeda as imagens nos estados membros da União Europeia
    • asia.gcr.io hospeda as imagens na Ásia

    Esses locais correspondem às multirregiões para os buckets de armazenamento do Cloud Storage. Quando você envia uma imagem para um registro com um novo nome do host, o Container Registry cria um bucket de armazenamento no local multirregional especificado. Esse bucket é o armazenamento subjacente para o registro. Em um projeto, todos os registros com o mesmo nome de host compartilham um bucket de armazenamento.

  • PROJECT-ID é o ID do projeto do Console do Google Cloud. Se o código do projeto contiver dois pontos (:), consulte abaixo Projetos com escopo de domínio.

  • IMAGE é o nome da imagem. Ele pode ser diferente do nome local da imagem. No Console do Google Cloud, os registros do projeto são listados pelo nome da imagem. Cada repositório pode conter várias imagens com o mesmo nome. Por exemplo, ele pode conter versões diferentes de uma imagem denominada "my-image".

  • adicionar :TAG e @IMAGE-DIGEST no final permite distinguir uma versão específica da imagem, mas também é opcional. Se você não especificar uma tag ou o resumo, o Container Registry procurará a imagem com a tag padrão latest. Consulte abaixo versões de imagens dentro de um registro.

Para a imagem my-image no registro gcr.io/PROJECT-ID, use este formato para enviar ou extrair uma imagem:

gcr.io/PROJECT-ID/my-image:tag1

PROJECT-ID é o ID do projeto do Console do Google Cloud.

Como organizar imagens com repositórios

É possível agrupar imagens relacionadas em um repositório dentro em um registro. Ao marcar, enviar ou extrair uma imagem, você especifica o nome do repositório no projeto no caminho da imagem.

No Container Registry, os repositórios são uma ajuda da organização. Elas funcionam como pastas lógicas no caminho da imagem, mas não refletem a estrutura real do sistema de arquivos nem oferecem suporte a um controle de acesso mais granular.

Considere as seguintes imagens armazenadas no host us.gcr.io no projeto builds:

us.gcr.io/builds/product1/dev/product1-app:beta-2.0
us.gcr.io/builds/product1/stable/product1:1.0
us.gcr.io/builds/product2/dev/product2:alpha
us.gcr.io/builds/product2/stable/product2:1.0

Se um usuário tiver acesso de gravação ao host us.gcr.io no projeto builds, ele terá acesso de gravação a qualquer caminho em us.gcr.io/builds porque todas as imagens estão no mesmo bucket de armazenamento e não é possível restringir o acesso no nível do repositório ou da imagem.

Se você precisar de um controle de acesso mais granular, use o Artifact Registry. No Artifact Registry, os repositórios são recursos discretos. Portanto, é possível aplicar políticas do IAM separadas para repositórios como us-docker.pkg.dev/builds/product1 e us-docker.pkg.dev/builds/product2.

Versões de imagens dentro de um registro

Um registro pode conter muitas imagens, e essas imagens podem ter versões diferentes. Para identificar uma versão específica da imagem em um registro, você pode especificar a tag de imagem ou o resumo.

  • As tags atuam como um rótulo. É possível aplicar várias tags a uma imagem. Por exemplo, uma imagem pode ter a tag v1.5 para um número de versão e release-candidate para indicar a prontidão para testes finais.
  • Os resumos são gerados automaticamente, são exclusivos de uma versão de uma imagem e têm a forma @IMAGE-DIGEST, em que IMAGE-DIGEST é o valor de hash sha256 do conteúdo da imagem.

Para identificar uma versão específica da imagem my-image:

  • Adicione a tag de imagem:

    gcr.io/PROJECT-ID/my-image:tag1
    
  • ou adicione o resumo da imagem:

    gcr.io/PROJECT-ID/my-image@sha256:4d11e24ba8a615cc85a535daa17b47d3c0219f7eeb2b8208896704ad7f88ae2d
    

PROJECT-ID é o ID do projeto do Console do Google Cloud. Se o código do projeto contiver dois pontos (:), consulte abaixo Projetos com escopo de domínio.

No Console do Cloud, na tela Imagens, a coluna Tags lista as tags da imagem. Clique na respectiva versão da imagem para ver os metadados, incluindo o Resumo da imagem.

Consulte Como incluir tags em imagens para saber como modificar tags.

Projetos de escopo de domínio

Se seu projeto estiver no escopo de seu domínio, o ID do projeto incluirá o nome do domínio seguido por dois pontos (:). Por causa de como o Docker trata dois-pontos, você deve substituir o caractere de dois pontos por uma barra quando especificar um resumo de imagem no Container Registry. Identifique imagens nesses tipos de projetos usando o seguinte formato:

HOSTNAME/[DOMAIN]/[PROJECT]/IMAGE

Por exemplo, o projeto com o ID example.com:my-project poderia ter a seguinte imagem:

gcr.io/example.com/my-project/image-name

Nomes de registro como URLs

O URL https://HOSTNAME/PROJECT-ID/IMAGE é um URL para uma imagem no Console do Cloud. Qualquer usuário autenticado que tenha permissão para acessar o host de registro pode usar links para visualizar qualquer imagem armazenada. Consulte Registros para ver detalhes sobre o formato de caminho da imagem.

Por exemplo, os seguintes URLs vinculam-se a registros públicos no Console do Cloud:

Formatos de imagem de contêiner

O Container Registry é compatível com o Docker Image Manifest V2 e com formatos de imagem OCI. Para mais informações, consulte Formatos de imagem de contêiner.

Se você quer armazenar imagens e outros tipos de artefatos de maneira centralizada, use o Artifact Registry em vez do Container Registry.

Controle de acesso

No Container Registry, as tags e os arquivos de camada para imagens de contêiner são armazenados em um bucket do Cloud Storage no mesmo projeto que o registro. O acesso ao bucket é configurado com as definições de gerenciamento de acesso e identidade (IAM, na sigla em inglês) do Cloud Storage.

Um usuário que tenha acesso a um host de registro pode acessar qualquer imagem no bucket de armazenamento do host. Se você precisar de um controle de acesso mais granular, use o Artifact Registry. O Artifact Registry fornece controle de acesso no nível do repositório.

Por padrão, os proprietários e editores do projeto têm permissões de push e pull para esse bucket do projeto do Container Registry. Os leitores do projeto têm apenas permissão de pull.

Para mais informações sobre as permissões do Container Registry, consulte Como configurar o controle de acesso.

Acesse os avisos de suspensão e veja mais informações sobre planos que mudam metadados de imagem do Cloud Storage para uma base de dados de back-end de alto desempenho.

Autenticação

Antes de enviar ou extrair imagens, você deve configurar a autenticação. É possível configurar o Docker para usar a CLI do Google Cloud para autenticar solicitações ao Container Registry. O Container Registry também é compatível com métodos avançados de autenticação usando tokens de acesso ou arquivos de chave JSON.

Auxiliar de credenciais do Docker

É necessário que o Docker tenha acesso ao Container Registry para enviar e receber imagens. Use a ferramenta de linha de comando auxiliar de credenciais do Docker para configurar as credenciais do Container Registry para uso com o Docker.

A ferramenta auxiliar de credenciais recebe as credenciais do Container Registry automaticamente ou de um local especificado usando um sinalizador --token-source. Em seguida, ela grava as credenciais no arquivo de configuração do Docker. Dessa forma, você pode usar a ferramenta de linha de comando do Docker, docker, para interagir diretamente com o Container Registry.

Para mais informações, consulte Autenticação avançada.

Conta do serviço do Container Registry

Quando você ativa a Container Registry API, o Container Registry adiciona ao seu projeto uma conta de serviço Essa conta de serviço tem o seguinte ID:

service-[PROJECT_NUMBER]@containerregistry.iam.gserviceaccount.com

Essa conta de serviço foi criada especificamente para que o Container Registry possa executar as tarefas do serviço no seu projeto. O Google gerencia essa conta, mas ela é específica do seu projeto.

Se você excluir essa conta de serviço ou alterar suas permissões, alguns recursos do Container Registry não funcionarão corretamente. Você não deve modificar papéis nem excluir a conta.

Para mais informações sobre essa conta de serviço e as permissões dela, consulte Conta de serviço do Container Registry.

Cache de pull

O registro mirror.gcr.io armazena em cache imagens públicas solicitadas com frequência do Docker Hub.

O uso de imagens armazenadas em cache pode acelerar a execução de pulls do Docker Hub. Seu cliente sempre verifica a cópia em cache de uma imagem do Docker Hub antes de tentar extraí-la diretamente do Docker Hub.

Para mais informações, consulte Como extrair imagens armazenadas em cache do Docker Hub.

Notificações

É possível usar o Pub/Sub para receber notificações sobre alterações nas imagens do contêiner.

Para obter mais informações, consulte Como configurar notificações do Pub/Sub.

Como usar o Container Registry com o Google Cloud

As instâncias do Compute Engine e os clusters do Google Kubernetes Engine podem enviar e extrair imagens do Container Registry por push ou pull com base nos escopos do Cloud Storage nas instâncias. Consulte Como usar o Container Registry com o Google Cloud.

As imagens armazenadas no Container Registry podem ser implantadas no ambiente flexível do App Engine.

Integrações de ferramenta de entrega contínua

O Container Registry funciona com sistemas de integração e entrega contínuas conhecidos, incluindo o Cloud Build e ferramentas de terceiros, como o Jenkins.

O Container Registry se integra perfeitamente aos serviços do Google Cloud. Por exemplo, o Cloud Build pode enviar e extrair imagens de hosts do Container Registry no mesmo projeto por padrão. Por padrão, os ambientes de execução, como o Google Kubernetes Engine e o Cloud Run, também podem extrair imagens de hosts de registro no mesmo projeto.

Como alternativa, é possível usar ferramentas de terceiros, como o Jenkins, para criar, extrair e enviar as imagens. Ao usar uma ferramenta de terceiros, você precisa configurar permissões e autenticação para a conta que interagirá com o Container Registry em nome da ferramenta.

Para ver exemplos de integrações, consulte os guias técnicos do Google Cloud que incluem o Container Registry.