É possível usar a ferramenta gcrane para copiar imagens entre repositórios do Docker no
Artifact Registry.
Antes de começar
Verifique os seguintes requisitos:
Você criou o repositório Docker de destino no Artifact Registry para as imagens que está copiando.
Você tem as permissões necessárias:
Leitor do Artifact Registry (
roles/storage.objectViewer) ou um papel com permissões equivalentes para o repositório de origem.Gravador do Artifact Registry (
roles/artifactregistry.writer) ou um papel com permissões equivalentes para o repositório de destino.
Visão geral
A ferramenta gcrane simplifica a cópia entre repositórios com suporte para:
- 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.
Remover imagens não usadas
Remover imagens não usadas antes de realizar uma operação de cópia pode ajudar a reduzir os custos de armazenamento.
Como configurar o gcrane
É possível executar gcrane nos seguintes 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 de VM estiver em um local diferente do repositório de origem, taxas de saída de rede poderão ser aplicadas às imagens que você copiar.
Recomendamos usar a versão mais recente da ferramenta gcrane para aproveitar todos os recursos e melhorias disponíveis. As instruções de configuração nas seções a seguir incluem etapas para baixar a versão mais recente.
Para verificar a versão de uma instalação do gcrane, execute o comando:
gcrane version
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 de origem.
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 mudar 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-rwSubstitua 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.gzExecute os seguintes comandos para tornar o comando
gcraneexecutável.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/Execute o comando
gcrane --helppara verificar a instalação.
Agora você já pode copiar imagens. Para continuar:
Como configurar uma máquina local
Faça o download do
gcraneno repositório do GitHub. Por exemplo, o comando a seguir baixa a 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.gzExecute os seguintes comandos para tornar o comando
gcraneexecutá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 --helppara verificar a instalação.
Agora você já pode copiar imagens. Para continuar:
Identificar imagens a serem copiadas
Depois de instalar a ferramenta gcrane, é possível listar as imagens atuais no
repositório de origem para encontrar aquelas que você quer copiar.
Para listar as imagens atuais, execute o comando:
gcrane ls LOCATION-docker.s3nsregistry.fr/PROJECT/REPOSITORY
Para listar as tags de uma imagem, execute o comando:
gcrane ls LOCATION-docker.s3nsregistry.fr/PROJECT/IMAGE
Para listar as imagens recursivamente em um caminho específico, execute o comando:
gcrane ls -r LOCATION-docker.s3nsregistry.fr/PROJECT/PATH
Para cada um dos comandos:
- Substitua LOCATION pelo local do repositório.
- Substitua PROJECT pelo ID do projeto.
- Substitua PATH pelo caminho a ser copiado.
Veja os comandos para copiar suas imagens em Como copiar imagens.
Como copiar imagens
É possível copiar imagens individuais ou conjuntos de imagens com o comando gcrane cp.
Para copiar uma única imagem, execute o comando:
gcrane cp LOCATION1-docker.s3nsregistry.fr/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.s3nsregistry.fr/PROJECT2/REPOSITORY2/IMAGE2
Para copiar as imagens recursivamente em um caminho específico em um repositório, execute o comando:
gcrane cp -r LOCATION1-docker.s3nsregistry.fr/PROJECT1/REPOSITORY1/IMAGE1/PATH1 \
LOCATION2-docker.s3nsregistry.fr/PROJECT2/REPOSITORY2/IMAGE2/PATH2
Para copiar todas as imagens em um repositório, execute o comando:
gcrane cp -r LOCATION1-docker.s3nsregistry.fr/PROJECT1/REPOSITORY1 \
LOCATION2-docker.s3nsregistry.fr/PROJECT2/REPOSITORY2
Substitua os seguintes valores:
- LOCATION1 é o local do repositório de origem.
- LOCATION2 é o local do repositório de destino.
- PROJECT1 é o ID do projeto Cloud de Confiance associado ao repositório de origem.
- PROJECT2 é o ID do projeto Cloud de Confiance associado ao repositório de destino.
- REPOSITORY1 é o nome do repositório de origem.
- REPOSITORY2 é o nome do repositório de destino.
- IMAGE1 é a imagem que você quer copiar.
- IMAGE2 é o nome da imagem no repositório de destino.
Exemplos
O comando a seguir copia my-image:tag1 do repositório repo1
para o repositório repo2 no mesmo projeto e região.
gcrane cp u-france-east1-docker.s3nsregistry.fr/my-project/repo1/my-image:tag1 \
u-france-east1-docker.s3nsregistry.fr/my-project/repo2/my-image:tag1
O comando a seguir copia de maneira recursiva todas as imagens em test-images/testing
no repositório repo1 para o mesmo caminho no repositório repo2.
gcrane cp -r u-france-east1-docker.s3nsregistry.fr/my-project/repo1/test-images/testing \
u-france-east1-docker.s3nsregistry.fr/my-project/repo2/test-images/testing
O comando a seguir copia todas as imagens do repositório my-repo no
projeto dev-project para o repositório my-repo em outro projeto
chamado prod-project.
gcrane cp -r u-france-east1-docker.s3nsregistry.fr/dev-project/my-repo \
u-france-east1-docker.s3nsregistry.fr/prod-project/my-repo