Copie imagens entre repositórios

Pode usar a ferramenta gcrane para copiar imagens entre repositórios do Docker no Artifact Registry.

Antes de começar

Valide os seguintes requisitos:

  1. Criou o repositório Docker de destino no Artifact Registry para as imagens que está a copiar.

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

    • Leitor do Artifact Registry (roles/storage.objectViewer) ou uma função com autorizações equivalentes para o repositório a partir do qual está a copiar.

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

Vista 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 num caminho especificado ou todas as imagens armazenadas no anfitrião multirregional no seu projeto.
  • Ignorar camadas de imagens que já foram carregadas.

Remover imagens não usadas

A remoção de imagens não usadas antes de realizar uma operação de cópia pode ajudar a reduzir os custos de armazenamento.

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.

Configurar o gcrane

Pode executar o gcrane nos seguintes 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. Se a instância de VM estiver numa localização diferente da do repositório de origem, podem aplicar-se custos de saída da rede às imagens que copiar.

Recomendamos que use a versão mais recente da ferramenta gcrane para tirar partido de todas as funcionalidades e melhorias disponíveis. As instruções de configuração nas secções seguintes 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

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 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 a ferramenta gcrane, pode listar as imagens existentes no repositório de origem para encontrar as que quer copiar.

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

gcrane ls LOCATION-docker.s3nsregistry.fr/PROJECT/REPOSITORY

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

gcrane ls LOCATION-docker.s3nsregistry.fr/PROJECT/IMAGE

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

gcrane ls -r LOCATION-docker.s3nsregistry.fr/PROJECT/PATH

Para cada um dos comandos:

  • Substitua LOCATION pela localização do repositório.
  • Substitua PROJECT pelo ID do projeto.
  • Substitua PATH pelo caminho a copiar.

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

Copiar imagens

Pode 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 imagens recursivamente num caminho específico de 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 num 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 é a localização do repositório de origem.
  • LOCATION2 é a localização do repositório de destino.
  • PROJECT1 é o Trusted Cloud ID do projeto associado ao repositório de origem.
  • PROJECT2 é o Trusted Cloud ID do projeto 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 quer copiar.
  • IMAGE2 é o nome da imagem no repositório de destino.

Exemplos

O comando seguinte 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 seguinte copia recursivamente 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 seguinte copia todas as imagens do repositório my-repo no projeto dev-project para o repositório my-repo noutro projeto denominado 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