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.
Visão geral
Há várias opções para copiar imagens do Container Registry para o Artifact Registry. Recomendamos copiar imagens com a ferramenta de migração automática porque ela oferece suporte para cópia de vários projetos, pode copiar suas imagens mesmo que você já tenha ativado o redirecionamento e pode processar um número maior de imagens do que outros métodos. Se você não tiver mais de 10.000 imagens e ainda não tiver ativado o redirecionamento, poderá usar a ferramenta gcrane, que também é compatível com a cópia de conjuntos de imagens com um único comando.
Para reduzir custos, faça o seguinte:
Remova imagens antigas e sem tag antes de copiar contêineres para o Artifact Registry.
Se você estiver copiando imagens para um repositório padrão (
pkg.dev
) do Artifact Registry, desative a verificação automática para o Artifact Registry antes de copiar imagens para evitar custos duplicados de verificação. É possível reativar a verificação automática depois de copiar todas as imagens.Se você estiver copiando imagens para um repositório
gcr.io
no Artifact Registry, não precisará desativar a verificação automatizada.Para mais informações sobre como controlar os custos relacionados à verificação de vulnerabilidades, consulte Como controlar os custos da verificação de vulnerabilidades.
Remover imagens sem tag 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.
Copiar imagens com a ferramenta de migração automática
Use a ferramenta de migração automática para fazer a transição do Container Registry para os repositórios gcr.io no Artifact Registry, para repositórios padrão do Artifact Registry ou para copiar suas imagens do Container Registry para o Artifact Registry.
Siga as instruções em Migrar automaticamente para o Artifact Registry para copiar as imagens do Container Registry para o Artifact Registry.
Como copiar imagens com o gcrane
Para copiar imagens para o Artifact Registry, use a
ferramenta gcrane
.
O gcrane
oferece vários benefícios em comparação com a cópia de imagens com o Docker,
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.
Uma opção de cópia rápida ao copiar imagens entre o Container Registry e o Artifact Registry na mesma multirregião do Google Cloud.
A opção de cópia rápida também é o método de cópia mais barato. Como essa opção não depende da extração e do envio de imagens, não há cobranças pela transferência de dados de rede do Container Registry durante a operação de cópia.
Requisitos
Verifique os seguintes requisitos:
Você ativou o Artifact Registry nos projetos de origem e destino do Google Cloud.
Você criou um repositório do Docker no Artifact Registry para as imagens que está copiando.
Você tem as permissões necessárias:
Leitor de objetos do Storage (
roles/storage.objectViewer
) ou um papel com permissões equivalentes no bucket de armazenamento para o host do Container Registry. Saiba mais sobre como conceder essas permissões.Gravador do Artifact Registry (
roles/artifactregistry.writer
) ou um papel com permissões equivalentes para o repositório do Artifact Registry. Saiba mais sobre como conceder essas permissões.
Para usar a opção de cópia rápida, verifique os seguintes requisitos:
Use o gcrane versão 0.10.0 ou superior. As instruções de configuração do gcrane nesta documentação incluem etapas para fazer o download da versão mais recente.
Para verificar a versão de uma instalação gcrane existente, execute o comando:
gcrane version
A conta de serviço do Artifact Registry gerenciada pelo Google do projeto de destino precisa ter o papel de Leitor de objetos do Storage (
roles/storage.objectViewer
) ou um papel com permissões equivalentes no projeto de origem. Execute o seguinte comando para conceder o papel de Leitor de objetos do Storage à conta de 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 projeto do Google Cloud com seus hosts do Container Registry.Substitua
DEST_PROJECT_NUMBER
pelo número (por exemplo: 12345) do projeto do Google Cloud com seu repositório do Artifact Registry.
Opções e custos do ambiente
É 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.
- Transferência de dados de rede para as imagens copiadas, a menos que você esteja usando a opção de cópia rápida. Para minimizar custos:
- Use uma instância de VM no mesmo local 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 dentro da mesma multirregião não gera cobranças e é muito mais rápida do que a cópia entre locais.
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 se aplica aos novos dados que você está copiando.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: transferência de dados de rede das imagens copiadas, a menos que você esteja usando a opção de cópia rápida.
- 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
- 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 dentro da mesma multirregião não gera cobranças e é muito mais rápida do que a cópia entre locais.
Máquina local: se não for possível usar as outras opções, execute
gcrane
a partir de uma máquina local.Custos: transferência de dados de rede das imagens copiadas, a menos que você esteja usando 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 multirregião não gera cobranças e é muito mais rápida do que a cópia entre locais.
Como configurar o Compute Engine
Para copiar imagens com gcrane
de uma instância de VM do Compute Engine:
- Crie uma instância de VM. Para minimizar os custos, crie a instância no mesmo local do registro do qual você está copiando.
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.
Pare a instância de VM. Consulte Como interromper uma instância.
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.
Reinicie a instância de VM. Consulte Como iniciar uma instância interrompida.
Conecte-se à instância de VM usando SSH.
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
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/
Execute o comando
gcrane --help
para verificar a instalação.
Agora você já pode copiar imagens. Para continuar:
Como configurar o Cloud Shell
Abra uma janela do Cloud Shell.
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.
Execute o seguinte comando para fazer o download da 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
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/
Execute o comando
gcrane --help
para verificar a instalação.
Agora você já pode copiar imagens. Para continuar:
Como configurar uma máquina local
Faça o download do
gcrane
no repositório do GitHub. Por exemplo, o comando a seguir faz o download da distribuição Linux x86-64 pela 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
Execute os seguintes comandos para tornar o comando
gcrane
executável. Os comandos presumem que o arquivo salvo é chamado dego-containerregistry.tar.gz
.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
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
ouus
. - 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
ouus
. - 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-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 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
ouus
. - 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-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-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
ouus
. - 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-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-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.
- Extraia uma imagem do Container Registry
- Envie a imagem para o repositório do Artifact Registry.
Requisitos
Verifique os seguintes requisitos:
Você criou um repositório do Docker no Artifact Registry para as imagens que está copiando.
Você tem as permissões necessárias:
Leitor de objetos do Storage (
roles/storage.objectViewer
) ou um papel com permissões equivalentes no bucket de armazenamento para o host do Container Registry. Saiba mais sobre como conceder essas permissões.Gravador do Artifact Registry (
roles/artifactregistry.writer
) ou um papel com permissões equivalentes para o repositório do Artifact Registry. Saiba mais sobre como conceder essas permissões.
configurou o Docker para autenticação no Container Registry e no Artifact Registry.
Custos
Quando você extrai uma imagem, a transferência de dados de rede é cobrada. 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 vai ser a transferência de dados da rede no Google Cloud. Se você extrair uma imagem para uma máquina fora do Google Cloud, os preços da transferência geral de dados de 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 incluemaustralia-southeast1-docker.pkg.dev
,europe-north1-docker.pkg.dev
eeurope-docker.pkg.dev
. - Como o Artifact Registry oferece suporte a vários repositórios do Docker em um único projeto, é preciso 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 que você queira copiar 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 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.
Requisitos
Verifique os seguintes requisitos:
Você criou um repositório do Docker no Artifact Registry para as imagens que está copiando.
Você tem as permissões necessárias:
Leitor de objetos do Storage (
roles/storage.objectViewer
) ou um papel com permissões equivalentes no bucket de armazenamento para o host do Container Registry. Saiba mais sobre como conceder essas permissões.Gravador do Artifact Registry (
roles/artifactregistry.writer
) ou um papel com permissões equivalentes para o repositório do Artifact Registry. Saiba mais sobre como conceder essas permissões.
Custos
Se o Container Registry estiver em um local diferente do repositório do Artifact Registry, as cobranças de transferência de dados de rede serão aplicadas às imagens copiadas. Se os dois serviços estiverem no mesmo local, a transferência de dados de 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-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 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 é 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-docker.pkg.dev/new-project/my-repo/my-image:tag1
A seguir
- Saiba mais sobre a transição do Container Registry para o Artifact Registry, incluindo comparações de recursos e comandos da CLI gcloud.
- Saiba mais sobre as mudanças no Docker.
- Saiba mais sobre as Mudanças para criar e implantar no Google Cloud.