Mudanças no Docker

Neste documento, explicamos as diferenças entre o Container Registry e o Artifact Registry para autenticar, enviar e extrair imagens de contêiner com Docker.

Neste guia, as comparações se concentram no Artifact Registry padrão repositórios regulares do Artifact Registry que são independentes do Container Registry e oferecer suporte a todos os recursos do Artifact Registry.

Se o administrador configurou repositórios com suporte ao domínio gcr.io, as solicitações para nomes de host gcr.io são redirecionados automaticamente para um repositório do Artifact Registry. Para usar um repositório gcr.io hospedado no Artifact Registry, você precisa ter uma função do Artifact Registry adequada ou uma função com permissões equivalentes.

Para saber mais sobre as diferenças entre o Container Registry e o ao criar com o Cloud Build e implantar no Artifact Registry o Cloud Run ou o Google Kubernetes Engine, consulte Mudanças para o Cloud Build, o Cloud Run e o GKE.

Use essas informações para adaptar comandos, configurações ou com foco no Container Registry com Docker.

Antes de começar

Este documento pressupõe que você já tenha:

  1. Ative o Artifact Registry no projeto.
  2. Instalou o Docker. O Docker está incluído no Cloud Shell.

Visão geral

De modo geral, o fluxo de trabalho para usar o Docker com o Container Registry ou O Artifact Registry é o mesmo.

Container Registry Artifact Registry
Administrador
  1. Ative a API Container Registry
  2. Adicione um host de registro, como "gcr.io", enviando um endereço imagem ao host.
  3. Conceda papéis do Cloud Storage no bucket de armazenamento para o host de registro para fornecer acesso às imagens.
Administrador
  1. Ativar a API Artifact Registry
  2. Adicione um repositório do Docker.
  3. Conceda papéis do Artifact Registry para fornecer acesso às imagens.
Usuários de registros
  1. Defina a imagem como um arquivo Dockerfile.
  2. Crie a imagem.
  3. Faça a autenticação no registro.
  4. Marque e envie a imagem para o registro.
  5. Extraia a imagem do registro ou implante-a em um ambiente de execução do Google Cloud.
Usuários de registros
  1. Defina a imagem como um arquivo Dockerfile.
  2. Crie a imagem.
  3. Faça a autenticação no registro.
  4. Marque e envie a imagem para o registro.
  5. Extraia a imagem do registro ou implante-a em um ambiente de execução do Google Cloud.

No entanto, um atalho para o Container Registry é combinar o administrador e funções de usuário em um único fluxo de trabalho. Esse atalho é comum em:

  • Guias de início rápido e tutoriais em que você está testando em um ambiente em que têm permissões amplas.
  • Fluxos de trabalho que usam o Cloud Build, já que a conta de serviço do Cloud Build tem permissões para adicionar um host de registro no mesmo projeto do Google Cloud.

O fluxo de trabalho do atalho é assim:

  1. Ative a API Container Registry.
  2. Conceda permissões à conta que acessará o Container Registry.
  3. Faça a autenticação no registro. A opção de autenticação mais simples é usar o auxiliar de credenciais do Docker na Google Cloud CLI. Esta é uma configuração de configuração do Terraform.

    gcloud auth configure-docker
    
  4. Crie e marque a imagem. Por exemplo, este comando cria e marca a imagem gcr.io/my-project/my-image:tag1:

    docker build -t gcr.io/my-project/my-image:tag1
    
  5. Envie a imagem para o registro. Exemplo:

    docker push gcr.io/my-project/my-image:tag1
    

    Se o host de registro gcr.io não existir no projeto: O Container Registry adiciona o host antes de fazer upload da imagem.

  6. Extraia a imagem do registro ou implante-a em um ambiente de execução do Google Cloud. Exemplo:

    docker pull gcr.io/my-project/my-image:tag1
    

Esse fluxo de trabalho depende dos seguintes atalhos:

  • A conta que envia imagens tem o papel de administrador do Storage ou com as mesmas permissões, como Proprietário. As amplas permissões desse papel acesso de leitura e gravação para todos os buckets de armazenamento em um projeto, incluindo buckets que não são usados pelo Container Registry.
  • Quando você ativa algumas APIs do Google Cloud, a API Container Registry é ativada automaticamente. Isso significa que os usuários desses e serviços têm acesso implícito ao Container Registry no mesmo projeto. Para Por exemplo, os usuários que podem executar builds no Cloud Build podem enviar imagens para registros e adicionar hosts de registro por padrão.

No Registro de artefatos, há uma separação clara das funções de administrador e usuário do repositório que muda as etapas no fluxo de trabalho de build e implantação. Para adaptar o fluxo de trabalho do Container Registry para o Artifact Registry, faça o seguintes mudanças. Cada etapa tem um link para mais informações sobre como modificar o fluxo de trabalho.

  1. Novo: ative a API Artifact Registry.

    Ative a API Artifact Registry. Cloud Build e ambientes de execução, como o Cloud Run e o GKE não ativar a API automaticamente para você.

  2. Novo: crie o repositório de destino do Docker, caso ele não tenha já existem. É necessário criar um repositório antes de enviar imagens para reimplantá-lo. O envio de uma imagem não aciona a criação de um repositório, e a A conta de serviço do Cloud Build não tem permissões para criar repositórios.

  3. Conceda permissões à conta que vai interagir com o Artifact Registry.

  4. Alterado: autentique no repositório. Se você usar o método auxiliar de credenciais na CLI gcloud, é preciso especificar o que você quer adicionar à configuração do cliente do Docker. Por exemplo, este comando adiciona o host us-central1-docker.pkg.dev:

    gcloud auth configure-docker us-central1-docker.pkg.dev
    
  5. Alterado: crie e inclua uma tag na imagem.

    O comando de exemplo a seguir é igual ao exemplo do Container Registry, mas usa um caminho do repositório do Artifact Registry para a imagem.

    docker build -t us-central1-docker.pkg.dev/my-project/my-repo/my-image:tag1
    
  6. Alterado: envie a imagem para o repositório usando o Caminho do Artifact Registry. Exemplo:

    docker push us-central1-docker.pkg.dev/my-project/my-repo/my-image:tag1
    
  7. Alterado: extraia a imagem do repositório usando o Caminho do Artifact Registry. Exemplo:

    docker pull us-central1-docker.pkg.dev/my-project/my-repo/my-image:tag1
    

Ative a API

Pontos principais

A comparação a seguir descreve a ativação da API para cada serviço:

Container Registry

É preciso ativar a API Container Registry antes de usar o Docker ou outros clientes de terceiros com o Container Registry.

Quando você ativa as seguintes APIs do Google Cloud, o Container Registry A API também é ativada automaticamente:

  • Ambiente flexível do App Engine
  • Cloud Build
  • Funções do Cloud Run
  • Cloud Run
  • Verificação de contêiner ou verificação sob demanda no Artifact Analysis
  • Google Kubernetes Engine

Com as permissões padrão, os usuários que podem executar builds no Cloud Build, escanear contêineres com a Análise de artefato ou implantar contêineres em runtimes do Google Cloud têm acesso implícito às imagens no Container Registry quando o registro está no mesmo projeto.

Artifact Registry

É preciso ativar a API Artifact Registry antes de usar os clientes Docker ou outros serviços do Google Cloud com o Artifact Registry.

Serviços como o Cloud Build, o Cloud Run e o GKE não ativam automaticamente a API Artifact Registry.

É possível ativar várias APIs no mesmo projeto usando a gcloud. Por exemplo, para ativar a API Cloud Build e o API Artifact Registry, execute o comando:

gcloud services enable
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com

Como adicionar registros e repositórios

Pontos principais

  • É preciso criar um repositório Docker do Artifact Registry antes de enviar um imagem a ele.

    Muitas vezes, uma etapa de criação de registro é excluída da documentação que descreve o envio de imagens para o Container Registry porque uma conta com armazenamento As permissões de administrador podem adicionar um registro a um projeto com o envio inicial para o host de registro do Compute Engine.

  • O Container Registry armazena todas as imagens em uma única multirregião no mesmo bucket de armazenamento. No Artifact Registry, é possível criar várias na mesma região ou multirregião com políticas de acesso separadas.

A comparação a seguir descreve a configuração do repositório em cada serviço:

Container Registry

No Container Registry, é possível adicionar até quatro hosts de registro ao projeto. Para adicionar um host de registro, envie a primeira imagem.

  1. Para adicionar um registro, como gcr.io, ao seu projeto, uma conta com o papel de administrador do Storage no nível do projeto envia uma imagem inicial.

    Por exemplo, se o host gcr.io não existir no projeto my-project, enviando a imagem gcr.io/my-project/my-image:1.0 acionadas as seguintes etapas:

    1. Adicionar o host gcr.io ao projeto
    2. Crie um bucket de armazenamento para gcr.io no projeto.
    3. Armazenar a imagem como gcr.io/my-project/my-image:1.0
  2. Após esse envio inicial, é possível conceder permissões. para o bucket de armazenamento para outros usuários.

Em um projeto, um host de registro guarda todas as imagens no mesmo armazenamento do Google Cloud. No exemplo a seguir, o projeto my-project tem duas imagens chamadas web-app no registro gcr.io. Um está diretamente no ID do projeto my-project. A outra imagem está no repositório team1.

gcr.io/my-project/web-app
gcr.io/my-project/team1/web-app

Artifact Registry

Uma conta com o repositório do Artifact Registry A função de administrador deve criar a função antes de enviar imagens para ele. Depois, você pode conceder permissões ao repositório para outros usuários.

No Artifact Registry, cada repositório é um recurso separado. Portanto, todos os caminhos de imagem precisam incluir um repositório.

Caminhos de imagem válidos:

us-central1-docker.pkg.dev/my-project/team1/web-app:1.0
us-central1-docker.pkg.dev/my-project/team2/web-app:1.0

Caminho de imagem inválido (não inclui um repositório) :

us-central1-docker.pkg.dev/my-project/web-app:1.0

Os exemplos a seguir mostram situações em que enviar uma imagem para um repositório ausente.

  • Enviar uma imagem para us-central1-docker.pkg.dev/my-project/team1 se us-central1-docker.pkg.dev/my-project/team1 não existe.
  • Enviar uma imagem para us-central1-docker.pkg.dev/my-project/team2 quando us-central1-docker.pkg.dev/my-project/team1 existe, mas us-central1-docker.pkg.dev/my-project/team2 não existe.

Como conceder permissões

Pontos principais

  • Conceda o papel apropriado do Artifact Registry à conta que você usando com o Artifact Registry.
  • Os serviços do Google Cloud têm acesso de leitura ou gravação equivalente Container Registry e Artifact Registry. No entanto, a conta de serviço padrão do Cloud Build não pode criar repositórios.
  • O Container Registry oferece suporte ao controle de acesso no nível do bucket de armazenamento. O Artifact Registry oferece suporte ao controle de acesso no nível do repositório.

A comparação a seguir descreve as permissões configuradas em cada serviço:

Container Registry

O Container Registry usa os papéis do Cloud Storage para controlar o acesso.

Leitor de objetos do Storage no nível do bucket de armazenamento
Extrair (ler) imagens de hosts de registro atuais no projeto.
Gravador de bucket legado do Storage no nível do bucket de armazenamento
Enviar (gravar) e extrair (ler) imagens de hosts de registro existentes no projeto.
Administrador de armazenamento no nível do projeto
Adicione um host de registro a um projeto enviando uma imagem inicial para o host.

Após o envio da imagem inicial para um registro, conceda papéis do Cloud Storage a outras contas que precisam de acesso ao bucket de armazenamento. Observe que qualquer com todas as permissões do papel de Administrador do Storage. Pode ler, gravar e excluir buckets e objetos de armazenamento em todo o projeto.

As permissões em um bucket de armazenamento se aplicam a todos os repositórios no registro. Por exemplo, qualquer usuário com permissões de Leitor de objetos do Storage no O bucket de gcr.io/my-project pode ler imagens em todos estes repositórios:

gcr.io/my-project/team1
gcr.io/my-project/team2
gcr.io/my-project/test
gcr.io/my-project/production

Artifact Registry

O Artifact Registry tem papéis próprios para controlar o acesso. Esses papéis fornecer uma separação clara entre os papéis de administrador e de usuário do repositório.

Somente contas que gerenciam repositórios devem ter o Artifact Registry Administrador de repositório ou Administrador do Artifact Registry.

Leitor do Artifact Registry
Listar artefatos e repositórios. Faça o download dos artefatos.
Gravador do Artifact Registry
Listar artefatos e repositórios. Fazer o download de artefatos, fazer upload de novos artefatos versões e adicionar ou atualizar tags.
Administrador do repositório do Artifact Registry
Permissões de Gravador do Artifact Registry e exclusões artefatos e tags.
Administrador do Artifact Registry
Permissões de administrador do repositório do Artifact Registry e permissões para criar, atualizar, excluir e conceder permissões a repositórios.

É possível aplicar essas permissões no nível do repositório. Exemplo:

  • Conceder acesso à Equipe 1 para us-central1-docker.pkg.dev/my-project/team1
  • Conceder acesso à Equipe 2 para us-central1-docker.pkg.dev/my-project/team2.

Para detalhes sobre como conceder permissões do Artifact Registry, consulte a documentação de controle de acesso.

Como autenticar no registro

Pontos principais

  • O Artifact Registry oferece suporte aos mesmos métodos de autenticação do Container Registry.
  • Para o auxiliar de credenciais do Docker, você precisa especificar os hosts a serem adicionados ao Docker configuração do cliente.
  • Para autenticação usando docker login, use o host do Artifact Registry em vez de um host do Container Registry.

Como usar o auxiliar de credenciais

O comando gcloud auth configure-docker e o auxiliar de credenciais independente configuram o Docker para nomes de host *.gcr.io por padrão. Para o Artifact Registry, especifique uma lista de hosts do Artifact Registry que você quer adicionar ao cliente Docker configuração do Terraform.

Por exemplo, para configurar a autenticação em repositórios do Docker na região us-central1, execute o seguinte comando:

gcloud auth configure-docker us-central1-docker.pkg.dev

Se você adicionar repositórios em us-east1 e asia-east1 mais tarde, será necessário executar o comando novamente para adicionar os nomes de host regionais correspondentes à sua configuração do Docker.

gcloud auth configure-docker us-east-docker.pkg.dev,asia-east1-docker.pkg.dev

Para saber mais sobre os métodos de autenticação do Artifact Registry, consulte Como configurar a autenticação para o Docker.

Como usar a autenticação por senha

Ao fazer login no Docker, use o nome do host do Artifact Registry em vez do um nome de host *.gcr.io. O exemplo a seguir mostra a autenticação com uma chave da conta de serviço codificada em base64 para o host us-central1-docker.pkg.dev:

cat key.json | docker login -u _json_key_base64 --password-stdin \
https://us-central1-docker.pkg.dev

Como criar e marcar imagens

Pontos principais: - O Artifact Registry usa um nome de host diferente para repositórios.

Ao marcar uma imagem, use o caminho do Artifact Registry em vez do Caminho do Container Registry. Exemplo:

docker tag my-image us-central1-docker.pkg.dev/my-project/my-repo/my-image:1.0

Como enviar imagens ao registro

Pontos principais: - No Artifact Registry, o repositório de destino precisa existir antes de você enviar um imagem a ele. - O Artifact Registry usa um nome de host diferente para os repositórios.

Ao enviar uma imagem, use o caminho do Artifact Registry em vez do Container Registry. Exemplo:

docker push us-central1-docker.pkg.dev/my-project/my-repo/my-image:1.0

Extrair imagens do registro

Ponto-chave:

  • Os nomes de host do Artifact Registry são diferentes do que o do Container Registry nomes de host.

Ao extrair uma imagem, use o caminho do Artifact Registry em vez do Caminho do Container Registry. Exemplo:

docker pull us-central1-docker.pkg.dev/my-project/my-repo/my-image:1.0

Para exemplos de implantação de imagens nos ambientes de execução do Google Cloud, como o Cloud Run e o GKE, consulte Como implantar imagens.