Copie imagens do Container Registry

Como parte da transição do Container Registry para o Artifact Registry, pode copiar as imagens do Container Registry que quer manter no Artifact Registry.

Vista geral

Existem várias opções para copiar imagens do Container Registry para o Artifact Registry. Recomendamos que copie as imagens com a ferramenta de migração automática porque suporta a cópia de vários projetos, pode copiar as suas imagens mesmo que já tenha ativado o redirecionamento e consegue processar um número maior de imagens do que outros métodos.

Para reduzir os custos, faça o seguinte:

  1. Remova imagens antigas sem etiquetas antes de copiar contentores para o Artifact Registry.

  2. Se estiver a copiar imagens para um repositório padrão (pkg.dev) do Artifact Registry, desative a análise automatizada do Artifact Registry antes de copiar imagens para evitar custos de análise duplicados. Pode reativar a análise automática depois de copiar todas as suas imagens.

    Se estiver a copiar imagens para um gcr.iorepositório no Artifact Registry não precisa de desativar a análise automatizada.

    Para mais informações sobre o controlo dos custos relacionados com a análise de vulnerabilidades, consulte o artigo Controlo dos custos da análise de vulnerabilidades.

Remova imagens sem etiqueta do Container Registry

A remoção de imagens sem etiqueta reduz o custo de armazenamento no Container Registry, bem como o custo de copiar imagens do Container Registry para o Artifact Registry.

Estão disponíveis várias ferramentas para identificar e automatizar a remoção de imagens de que já não precisa. Por exemplo, a ferramenta gcr-cleaner ajuda a encontrar e remover imagens antigas com base em diferentes critérios. A ferramenta gcr-cleaner não é um produto oficial da Google.

Para mais informações sobre a configuração e a utilização da ferramenta, consulte a documentação do gcr-cleaner.

Copie imagens com a ferramenta de migração automática (recomendado)

Use a ferramenta de migração automática para fazer a transição do Container Registry para repositórios gcr.io no Artifact Registry, ou para repositórios padrão do Artifact Registry, ou para copiar as suas imagens do Container Registry para o Artifact Registry.

Esta ferramenta só suporta a migração e a cópia para a mesma região múltipla.

Siga as instruções em Migre automaticamente para o Artifact Registry para copiar as suas imagens do Container Registry para o Artifact Registry.

Copie imagens com o gcrane

Para copiar imagens para o Artifact Registry, também pode usar a ferramenta gcrane.

gcrane permite copiar imagens entre várias regiões, mas tem as seguintes desvantagens:

  • gcrane é mais lento do que as ferramentas automatizadas.
  • gcrane está limitado pela quota do Container Registry.
  • gcrane pode falhar se alguma imagem tiver mais de 10 000 versões ou etiquetas.
  • gcrane pode falhar se alguma imagem estiver mal configurada ou faltarem dados.

Requisitos

Valide os seguintes requisitos:

  1. Ativou o Artifact Registry nos projetos de origem e de destino. Google Cloud

  2. Criou um repositório do Docker no Artifact Registry para as imagens que está a copiar.

  3. Tem as autorizações necessárias:

    • Leitor de objetos de armazenamento (roles/storage.objectViewer) ou uma função com autorizações equivalentes no contentor de armazenamento para o anfitrião do Container Registry. Saiba como conceder estas autorizações.

    • Escritor do Artifact Registry (roles/artifactregistry.writer) ou uma função com autorizações equivalentes para o repositório do Artifact Registry. Saiba como conceder estas autorizações.

  4. Para usar a opção de cópia rápida, verifique os seguintes requisitos:

    • Tem de usar a versão 0.10.0 ou superior do gcrane. As instruções de configuração do gcrane nesta documentação incluem passos para transferir a versão mais recente.

      Para verificar a versão de uma instalação do gcrane existente, execute o comando:

      gcrane version
      
    • O agente do serviço do Artifact Registry do projeto de destino tem de ter a função de leitor de objetos de armazenamento (roles/storage.objectViewer) ou uma função com autorizações equivalentes no projeto de origem. Execute o seguinte comando para conceder a função Storage Object Viewer ao agente do serviço:

      gcloud projects add-iam-policy-binding SOURCE_PROJECT_ID \
          --member='serviceAccount:service-DEST_PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com' \
          --role='roles/storage.objectViewer'
      

      Substitua SOURCE_PROJECT_ID pelo ID (por exemplo, "my-project") do Google Cloud projeto com os seus anfitriões do Container Registry.

      Substitua DEST_PROJECT_NUMBER pelo número (por exemplo, 12345) do Google Cloud projeto com o seu repositório do Artifact Registry.

Opções e custos do ambiente

Pode executar gcrane a partir de vários ambientes:

  • Instância do Compute Engine: use esta opção se tiver um número maior de contentores para copiar.

    Custos:

    • Tempo de atividade da instância para a VM do Compute Engine.
    • Transferência de dados de rede para as imagens que copiar, a menos que esteja a usar a opção de cópia rápida. Para minimizar os custos:
    • Use uma instância de VM na mesma localização que o bucket de armazenamento do Container Registry.
    • Para minimizar o custo e maximizar a velocidade de cópia, use um repositório do Artifact Registry na mesma multirregião que o Container Registry. A transferência de dados na mesma região multirregional não incorre em custos e é muito mais rápida do que a cópia entre localizações.
  • Cloud Shell: uma opção para copiar pequenos conjuntos de cerca de 40 GB ou menos. Uma vez que o gcrane ignora o carregamento de camadas de imagens que já foram carregadas, este limite destina-se aos novos dados que está a copiar.

    A cópia de repositórios maiores pode fazer com que o Cloud Shell se desligue após o período de limite de tempo do pedido de 10 minutos.

    Custos: transferência de dados de rede para as imagens que copiar, a menos que esteja a usar a opção de cópia rápida.

    • Não pode escolher a localização de uma sessão do Cloud Shell. Para verificar a localização da sessão atual, execute o comando:
    curl metadata/computeMetadata/v1/instance/zone
    
    • Para minimizar o custo e maximizar a velocidade de cópia, use um repositório do Artifact Registry na mesma multirregião que o Container Registry. A transferência de dados na mesma região multirregional não incorre em custos e é muito mais rápida do que a cópia entre localizações.
  • Máquina local: se não conseguir usar as outras opções, pode executar gcrane a partir de uma máquina local.

    Custos: transferência de dados de rede para as imagens que copiar, a menos que esteja a usar a opção de cópia rápida

    Para minimizar o custo e maximizar a velocidade de cópia, use um repositório do Artifact Registry na mesma multirregião que o Container Registry. A transferência de dados na mesma região múltipla não incorre em custos e é muito mais rápida do que a cópia entre localizações.

Configurar o Compute Engine

Para copiar imagens com gcrane de uma instância de VM do Compute Engine:

  1. Crie uma instância de VM. Para minimizar os custos, crie a instância na mesma localização que o registo do qual está a copiar.
  2. Por predefinição, a instância de VM está associada à conta de serviço predefinida e tem autorizações para obter imagens. Tem de alterar o âmbito de acesso para que a instância de VM possa enviar imagens.

    1. Pare a instância de VM. Consulte o artigo Parar uma instância.

    2. Altere o âmbito de acesso com o comando:

      gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
      

      Substitua INSTANCE pelo nome da instância de VM.

    3. Reinicie a instância de VM. Consulte o artigo Iniciar uma instância parada.

  3. Estabeleça ligação à instância de VM através de SSH.

  4. Execute o seguinte comando para transferir o gcrane.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  5. Execute os seguintes comandos para tornar o comando gcrane executável.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  6. Execute o comando gcrane --help para validar a instalação.

Já tem tudo pronto para copiar imagens. Para continuar:

Configurar o Cloud Shell

  1. Abra uma janela do Cloud Shell.

    Abra o Cloud Shell

  2. Defina o projeto predefinido. Substitua PROJECT pelo ID do projeto onde o Container Registry e o Artifact Registry estão instalados

    gcloud config set project PROJECT
    
  3. Execute o seguinte comando para transferir a ferramenta gcrane.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  4. Execute os seguintes comandos para tornar o comando gcrane executável.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  5. Execute o comando gcrane --help para validar a instalação.

Já tem tudo pronto para copiar imagens. Para continuar:

Configurar uma máquina local

  1. Transfira gcrane do repositório do GitHub. Por exemplo, o seguinte comando transfere a distribuição Linux x86-64 a partir da linha de comandos.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  2. Execute os seguintes comandos para tornar o comando gcrane executável. Os comandos partem do princípio de que o ficheiro transferido tem o nome go-containerregistry.tar.gz.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  3. Execute o comando gcrane --help para validar a instalação.

Já tem tudo pronto para copiar imagens. Para continuar:

Identificar imagens para copiar

Depois de instalar o gcrane, pode listar as imagens existentes no Container Registry para encontrar as que quer copiar.

Para apresentar uma lista de imagens existentes, execute o comando:

gcrane ls LOCATION.gcr.io/PROJECT

Para listar as etiquetas que uma imagem tem, execute o comando:

gcrane ls LOCATION.gcr.io/PROJECT/IMAGE

Para listar imagens recursivamente num caminho específico, execute o comando:

gcrane ls -r LOCATION.gcr.io/PROJECT/PATH

Para cada um dos comandos:

  • Substitua LOCATION pela região múltipla do registo: asia, eu ou us.
  • Substitua PROJECT pelo ID do projeto.

Consulte o artigo Copiar imagens para ver os comandos para copiar as suas imagens.

Copiar imagens

Pode copiar imagens individuais do Container Registry, todas as imagens num caminho especificado numa localização ou todas as imagens armazenadas numa localização.

Copiar uma única imagem

Para copiar uma única imagem etiquetada, execute o comando:

gcrane cp GCR-LOCATION.gcr.io/PROJECT/IMAGE \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/IMAGE

Onde

  • GCR-LOCATION é a multirregião do anfitrião do Container Registry: asia, eu ou us.
  • AR-LOCATION é a região ou várias regiões do repositório.
  • PROJECT é o ID do projeto.
  • REPOSITORY é o nome do repositório do Artifact Registry.
  • GCR-IMAGE é a imagem que quer copiar do Container Registry.
  • AR-IMAGE é o nome da imagem no Artifact Registry.

Por exemplo, considere a seguinte imagem de origem e destino:

  • Imagem do Container Registry: eu.gcr.io/my-project/my-image:tag1
  • Imagem do Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Execute o seguinte comando para copiar a imagem:

gcrane cp eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Copiar todas as imagens num caminho

Para copiar imagens recursivamente num caminho específico no Container Registry, execute o comando:

gcrane cp -r GCR-LOCATION.gcr.io/PROJECT/GCR-PATH \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/AR-PATH

Onde

  • GCR-LOCATION é a multirregião do anfitrião do Container Registry: asia, eu ou us.
  • AR-LOCATION é a região ou várias regiões do repositório.
  • PROJECT é o ID do projeto.
  • REPOSITORY é o nome do repositório do Artifact Registry.
  • GCR-PATH é o caminho dos ficheiros que quer copiar.
  • AR-PATH é o caminho para as imagens no seu repositório do Artifact Registry.

Por exemplo, considere os seguintes caminhos de origem e de destino:

  • Caminho do Container Registry: eu.gcr.io/my-project/test-images/testing
  • Caminho do Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/test-images/testing

O comando seguinte copia recursivamente todas as imagens em test-images/testing para o repositório my-repo:

gcrane cp -r eu.gcr.io/my-project/test-images/testing \
europe-docker.pkg.dev/my-project/my-repo/test-images/testing

Copiar todas as imagens de uma localização do Container Registry

Para copiar todas as imagens de uma multirregião do Container Registry, execute o comando:

gcrane cp -r GCR-LOCATION.gcr.io/PROJECT \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY

Onde

  • GCR-LOCATION é a multirregião do anfitrião do Container Registry: asia, eu ou us.
  • AR-LOCATION é a região ou várias regiões do repositório.
  • PROJECT é o ID do projeto.
  • REPOSITORY é o nome do repositório do Artifact Registry.

Se quiser copiar imagens para mais de uma localização do Container Registry no seu projeto, execute o comando uma vez para cada anfitrião.

Por exemplo, considere o seguinte registo de origem e repositório do Artifact Registry de destino. Neste exemplo, o Container Registry e o Artifact Registry estão em projetos diferentes.

  • Anfitrião do Container Registry: eu.gcr.io/my-project
  • Imagem do Artifact Registry: europe-docker.pkg.dev/new-project/my-repo

O comando seguinte copia todas as imagens da região eu no projeto my-project para o repositório my-repo no projeto new-project.

gcrane cp -r eu.gcr.io/my-project \
europe-docker.pkg.dev/new-project/my-repo

Copiar imagens com o Docker

Ao contrário dos métodos de cópia gcrane e gcloud, esta abordagem é um processo de dois passos.

  1. Extraia uma imagem do Container Registry
  2. Envie a imagem para o seu repositório do Artifact Registry.

Requisitos

Valide os seguintes requisitos:

  1. Criou um repositório do Docker no Artifact Registry para as imagens que está a copiar.

  2. Tem as autorizações necessárias:

    • Leitor de objetos de armazenamento (roles/storage.objectViewer) ou uma função com autorizações equivalentes no contentor de armazenamento para o anfitrião do Container Registry. Saiba como conceder estas autorizações.

    • Escritor do Artifact Registry (roles/artifactregistry.writer) ou uma função com autorizações equivalentes para o repositório do Artifact Registry. Saiba como conceder estas autorizações.

  3. Configurou o Docker para autenticar no Container Registry e no Artifact Registry.

Custos

Quando extrai uma imagem, é-lhe cobrada a transferência de dados por rede. O preço específico depende do destino do comando pull. Por exemplo, se extrair uma imagem de uma sessão do Cloud Shell, a definição de preços aplica-se à transferência de dados de rede no interior Google Cloud. Se transferir uma imagem para uma máquina fora do Google Cloud, preço da transferência de dados de rede geral.

Os comandos do Docker que usa para etiquetar, enviar e extrair imagens no Artifact Registry são semelhantes aos que usa no Container Registry. Existem duas diferenças principais:

  • O nome do anfitrião para repositórios Docker do Artifact Registry inclui um prefixo de localização, seguido de -docker.pkg.dev. Os exemplos incluem australia-southeast1-docker.pkg.dev, europe-north1-docker.pkg.dev e europe-docker.pkg.dev.
  • Uma vez que o Artifact Registry suporta vários repositórios Docker num único projeto, tem de especificar o nome do repositório nos comandos.

Para copiar uma imagem para o Artifact Registry com o Docker, extraia a imagem do Container Registry e, em seguida, carregue-a para o seu repositório do Artifact Registry.

Por exemplo, considere uma imagem do Container Registry na eumultirregião e que quer copiá-la para um repositório do Artifact Registry na região europe.

  • Imagem do Container Registry: eu.gcr.io/my-project/my-image:tag1
  • Imagem do Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

O comando seguinte extrai a imagem do Container Registry.

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

O seguinte comando envia a imagem para o repositório do Artifact Registry com o nome my-repo.

docker push europe-north1-docker.pkg.dev/my-project/my-repo/my-image

Também pode enviar imagens para um repositório do Artifact Registry que configurou num projeto diferente. Este exemplo envia a mesma imagem de origem para o repositório my-repo no projeto new-project.

docker push europe-north1-docker.pkg.dev/new-project/my-repo/my-image

Para ver detalhes sobre o envio e a obtenção de imagens no Artifact Registry, consulte o artigo Enviar e obter imagens.

Copiar imagens com o gcloud

Use o comando gcloud container images add-tag para copiar uma imagem do Container Registry para o seu repositório do Artifact Registry.

Requisitos

Valide os seguintes requisitos:

  1. Criou um repositório do Docker no Artifact Registry para as imagens que está a copiar.

  2. Tem as autorizações necessárias:

    • Leitor de objetos de armazenamento (roles/storage.objectViewer) ou uma função com autorizações equivalentes no contentor de armazenamento para o anfitrião do Container Registry. Saiba como conceder estas autorizações.

    • Escritor do Artifact Registry (roles/artifactregistry.writer) ou uma função com autorizações equivalentes para o repositório do Artifact Registry. Saiba como conceder estas autorizações.

Custos

Se o Container Registry estiver numa localização diferente da do seu repositório do Artifact Registry, aplicam-se taxas de transferência de dados de rede às imagens que copiar. Se ambos os serviços estiverem na mesma localização, a transferência de dados de rede é gratuita.

Execute o seguinte comando para copiar uma imagem do Container Registry para o Artifact Registry:

gcloud container images add-tag GCR-IMAGE AR-IMAGE

Onde

  • GCR-IMAGE é o caminho completo para a imagem do Container Registry.
  • AR-IMAGE é o caminho completo da imagem no repositório do Artifact Registry.

Por exemplo, considere as seguintes imagens de origem e destino:

  • Imagem do Container Registry: eu.gcr.io/my-project/my-image:tag1
  • Imagem do Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Este comando copia a imagem do Container Registry na multirregião eu para o repositório my-repo na multirregião europe.

gcloud container images add-tag eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Também pode copiar imagens para um repositório do Artifact Registry que configurou num projeto diferente. Este exemplo copia a mesma imagem de origem para o repositório my-repo no projeto new-project.

gcloud container images add-tag eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/new-project/my-repo/my-image:tag1

O que se segue?