É possível usar a ferramenta gcrane
para copiar imagens entre repositórios do Docker em
o Artifact Registry.
Antes de começar
Verifique os seguintes requisitos:
Você criou o repositório de destino do Docker 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 do qual você está copiando.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 em repositórios com suporte para:
- Copiar conjuntos de imagens com um único comando, incluindo todas as imagens em um o caminho especificado ou todas as imagens armazenadas no host multirregional no seu projeto.
- Pulando camadas de imagens que já foram enviadas.
Como remover imagens não usadas
Remover imagens não usadas antes de realizar uma operação de cópia pode ajudar você a e reduzir os custos de armazenamento.
Há várias ferramentas disponíveis para identificar e automatizar a remoção de
imagens que você não precisa mais. Por exemplo, o
gcr-cleaner
ajuda você a encontrar e remover imagens antigas com base em diferentes critérios.
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 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 de VM do Compute Engine. Se a instância da VM estiver em um local diferente do repositório de origem, cobranças de saída de rede poderão ser aplicadas às imagens que você copiar.
Cloud Shell: uma opção para copiar pequenos conjuntos de cerca de 40 GB ou menos. Como a ferramenta
gcrane
pula o upload de camadas de imagem que já foram enviadas, esse limite é para 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: se a instância do Cloud Shell estiver em um local diferente que o repositório de origem, cobranças de saída de rede podem ser aplicadas as imagens copiadas. 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
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 fazer o download da 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 que o 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. É preciso alterar o escopo de acesso para que a instância de VM poderá 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 comando a seguir 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 na 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:
Identificar imagens a serem copiadas
Depois de instalar a ferramenta gcrane
, é possível listar as imagens existentes em
repositório de origem para encontrar aqueles que você quer copiar.
Para listar as imagens atuais, execute o comando:
gcrane ls LOCATION-docker.pkg.dev/PROJECT/REPOSITORY
Para listar as tags de uma imagem, execute o comando:
gcrane ls LOCATION-docker.pkg.dev/PROJECT/IMAGE
Para listar as imagens recursivamente em um caminho específico, execute o comando:
gcrane ls -r LOCATION-docker.pkg.dev/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.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2
Para copiar imagens recursivamente em um caminho específico de um repositório, execute o comando:
gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1/PATH1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2/PATH2
Para copiar todas as imagens em um repositório, execute o comando:
gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1 \
LOCATION2-docker.pkg.dev/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 do Google Cloud associado ao repositório de origem.
- PROJECT2 é o ID do projeto do Google Cloud 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 us-west1-docker.pkg.dev/my-project/repo1/my-image:tag1 \
us-west1-docker.pkg.dev/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 us-west1-docker.pkg.dev/my-project/repo1/test-images/testing \
us-west1-docker.pkg.dev/my-project/repo2/test-images/testing
O comando a seguir copia todas as imagens do repositório my-repo
na
projeto dev-project
para o repositório my-repo
em outro projeto
chamada prod-project
.
gcrane cp -r us-west1-docker.pkg.dev/dev-project/my-repo \
us-west1-docker.pkg.dev/prod-project/my-repo