Esta página foi traduzida pela API Cloud Translation.
Switch to English

Como copiar imagens do Container Registry

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

Antes de começar

Verifique se você:

  1. Criou um repositório do Docker existente no Artifact Registry para suas imagens.
  2. Configurou permissões para acessar o repositório.
  3. Configurou a autenticação no repositório.

Consulte o Guia de configuração para usuários do Container Registry para mais informações sobre essas tarefas e como elas se comparam com as mesmas tarefas no Container Registry.

Visão geral

Há várias opções para copiar imagens do Container Registry que você quer armazenar e reutilizar no Artifact Registry. Recomendamos copiar arquivos com a ferramenta gcrane, que é compatível com a cópia de conjuntos de imagens com um único comando.

Para reduzir custos, considere excluir imagens antigas e sem tags antes de copiar contêineres para o Artifact Registry.

Como remover imagens sem tags do Container Registry

A remoção de imagens sem tag reduz o custo de armazenamento no Container Registry e do custo de copiar imagens do Container Registry para o Artifact Registry.

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

Para mais informações sobre como configurar e usar a ferramenta, consulte a documentação do gcr-cleaner.

Como copiar imagens com o gcrane

Para copiar imagens para o Artifact Registry, recomendamos que você use a ferramenta gcrane.

O gcrane oferece vários benefícios, incluindo:

  • Copiar conjuntos de imagens com um único comando, incluindo todas as imagens em um caminho específico ou todas as imagens armazenadas em um host multirregional no projeto.
  • Pulando camadas de imagens que já foram enviadas.

É possível executar gcrane a partir de vários ambientes:

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

    Custos: tempo de atividade da instância para a VM do Compute Engine. Se a instância da VM estiver em um local diferente do bucket de armazenamento do Container Registry, cobranças de saída de rede serão aplicadas às imagens que você copiar.

  • Cloud Shell: uma opção para copiar pequenos conjuntos de cerca de 40 GB ou menos. Como gcrane pula o upload de camadas de imagem que já foram enviadas, esse limite é para novos dados a serem copiados.

    Copiar repositórios maiores pode fazer com que o Cloud Shell se desconecte após o período de tempo limite da solicitação de 10 minutos.

    Custos: se a instância do Cloud Shell estiver em um local diferente do bucket de armazenamento do Container Registry, cobranças de saída de rede se aplicarão às imagens que você copiar. Não é possível escolher o local de uma sessão do Cloud Shell. Para verificar o local da sessão atual, execute o comando:

    curl metadata/computeMetadata/v1/instance/zone
    
  • Máquina local: se não for possível usar as outras opções, execute gcrane a partir de uma máquina local.

    Custos: cobranças de saída de rede se aplicam às imagens que você está copiando.

Como 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 no mesmo projeto em que o Container Registry e o Artifact Registry estão ativados. Para minimizar os custos, crie a instância no mesmo local que seu host do Container Registry.
  2. Por padrão, a instância de VM está associada à conta de serviço padrão e tem permissões para extrair imagens. Você precisa alterar o escopo de acesso para que a instância de VM possa enviar imagens.

    1. Pare a instância de VM. Consulte Como interromper uma instância.

    2. Altere o escopo de acesso com o comando a seguir:

      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 Como iniciar uma instância interrompida.

  3. Conecte-se à instância de VM usando SSH.

  4. Execute o seguinte comando para fazer o download de 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 verificar a instalação.

Agora você já pode copiar imagens. Para continuar:

Como configurar o Cloud Shell

  1. Abra uma janela do Cloud Shell.

    Abra o Cloud Shell

  2. Defina o projeto padrão. Substitua PROJECT pelo ID do projeto em que o Container Registry e o Artifact Registry estão instalados.

    gcloud config set project PROJECT.
    
  3. Execute o seguinte comando para fazer o download de 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 verificar a instalação.

Agora você já pode copiar imagens. Para continuar:

Como configurar uma máquina local

  1. Verifique se você está autenticado no Container Registry e no Artifact Registry. Se você estiver usando contas diferentes para cada serviço, será preciso garantir a autenticação nos dois serviços.

  2. Faça o download do gcrane no repositório do GitHub. Use o comando a seguir para fazer o download dele a partir da linha de comando.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  3. Execute os seguintes comandos para tornar o comando gcrane executável. Os comandos presumem que o arquivo salvo é chamado de go-containerregistry.tar.gz.

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

Agora você já pode copiar imagens. Para continuar:

Como identificar imagens a serem copiadas

Depois de instalar o gcrane, é possível listar as imagens atuais no Container Registry para encontrar aquelas que você quer copiar.

Para listar as imagens atuais, execute o comando:

gcrane ls LOCATION.gcr.io/PROJECT

Para listar as tags de uma imagem, execute o comando:

gcrane ls LOCATION.gcr.io/PROJECT/IMAGE

Para listar as imagens recursivamente em um caminho específico, execute o comando:

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

Para cada um dos comandos:

  • Substitua LOCATION pela multirregião do registro: asia, eu ou us.
  • Substitua PROJECT pelo ID do projeto.

Veja os comandos para copiar suas imagens em Como copiar imagens.

Como copiar imagens

É possível copiar imagens individuais do Container Registry, todas as imagens em um caminho especificado em um local ou todas as imagens armazenadas em um local.

Como copiar uma única imagem

Para copiar uma única imagem com tag, 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 host do Container Registry: asia, eu ou us.
  • AR-LOCATION é a região ou multirregião do repositório.
  • PROJECT é o ID do projeto;
  • REPOSITORY é o nome do repositório do Artifact Registry.
  • GCR-IMAGE é a imagem que você quer copiar a partir 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-west1-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-west1-docker.pkg.dev/my-project/my-repo/my-image:tag1

Copiar todas as imagens em um caminho

Para copiar as imagens recursivamente em um 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 host do Container Registry: asia, eu ou us.
  • AR-LOCATION é a região ou multirregião do repositório.
  • PROJECT é o ID do projeto;
  • REPOSITORY é o nome do repositório do Artifact Registry.
  • GCR-PATH é o caminho dos arquivos que você quer copiar.
  • AR-PATH é o caminho das imagens no repositório do Artifact Registry.

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

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

O comando a seguir copia de maneira recursiva 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-west1-docker.pkg.dev/my-project/my-repo/test-images/testing

Como copiar todas as imagens de um local 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 host do Container Registry: asia, eu ou us.
  • AR-LOCATION é a região ou multirregião do repositório.
  • PROJECT é o ID do projeto;
  • REPOSITORY é o nome do repositório do Artifact Registry.

Se você quiser copiar imagens para mais de um local do Container Registry no projeto, execute o comando uma vez para cada host.

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

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

O comando a seguir copia todas as imagens da multirregiã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-west1-docker.pkg.dev/new-project/my-repo

Como copiar imagens com o Docker

Ao contrário dos métodos de cópia gcrane e gcloud, essa abordagem é um processo de duas etapas.

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

Custos: quando você extrai uma imagem, é cobrado pela saída da rede. O preço específico depende do destino do comando pull. Por exemplo, se você extrair uma imagem de uma sessão do Cloud Shell, o preço será para a saída de rede no Google Cloud. Se você extrair uma imagem para uma máquina fora do Google Cloud, consulte os preços para saída geral da rede.

Os comandos do Docker que você usa para marcar, enviar e extrair imagens no Artifact Registry são semelhantes aos usados no Container Registry. Há duas diferenças principais:

  • O nome do host para os repositórios do Docker do Artifact Registry incluem um prefixo de local seguido por -docker.pkg.dev. Os exemplos incluem australia-southeast1-docker.pkg.dev, europe-north1-docker.pkg.dev e europe-docker.pkg.dev.
  • Como o Artifact Registry é compatível com vários repositórios do Docker em um único projeto, você precisa 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 envie-a ao repositório do Artifact Registry.

Por exemplo, considere uma imagem do Container Registry na multirregião eu e você quer copiar para um repositório do Artifact Registry na região europe-west1.

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

O comando a seguir extrai a imagem do Container Registry.

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

O comando a seguir envia a imagem ao repositório do Artifact Registry chamado my-repo.

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

É possível também enviar imagens para um repositório do Artifact Registry que você configurou em um projeto diferente. Esse 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 mais detalhes sobre como enviar e extrair imagens no Artifact Registry, consulte Como enviar e extrair imagens.

Como copiar imagens com a gcloud

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

Custos: se o Container Registry estiver em um local diferente do repositório do Artifact Registry, cobranças de saída de rede serão aplicadas às imagens que você copiar. Se ambos os serviços estiverem no mesmo local, a saída da rede será 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 para a 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-west1-docker.pkg.dev/my-project/my-repo/my-image:tag1

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

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

Também é possível copiar imagens para um repositório do Artifact Registry que você configurou em um projeto diferente. Neste exemplo, a mesma imagem de origem é copiada para o repositório my-repo no projeto new-project.

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

A seguir