Empurrar e puxar imagens

O envio (carregamento) e a obtenção (transferência) de imagens são duas das tarefas mais comuns do Container Registry. Este documento foca-se no envio e na obtenção de imagens com o Docker.

Se estiver a usar o Cloud Build, consulte a documentação do Cloud Build para obter informações sobre a criação e o envio de contentores para o Container Registry.

Para ver instruções sobre como listar, etiquetar e eliminar imagens, consulte o artigo Gerir imagens.

Antes de começar

Certifique-se de que tem:

  1. O Container Registry está ativado no seu projeto.

  2. O Docker está instalado e configurado.

Adicionar um registo

Pode adicionar os seguintes registos do Container Registry a um projeto:

Nome do anfitrião Localização do armazenamento
gcr.io Armazena imagens em centros de dados nos Estados Unidos
asia.gcr.io Armazena imagens em centros de dados na Ásia
eu.gcr.io Armazena imagens em centros de dados nos Estados-Membros da União Europeia
us.gcr.io Armazena imagens em centros de dados nos Estados Unidos

O primeiro envio de uma imagem para um nome de anfitrião aciona a criação do registo num projeto e no contentor de armazenamento do Cloud Storage correspondente. Este envio inicial requer autorizações ao nível do projeto para criar contentores de armazenamento.

Assim que existir um anfitrião de registo no seu projeto, pode configurar autorizações no contentor de armazenamento para controlar o acesso às imagens no registo.

Para adicionar um registo e configurar autorizações:

  1. Verifique se tem as autorizações necessárias. Tem de ter a função de administrador de armazenamento (roles/storage.admin) ou uma função personalizada ou uma função predefinida com as mesmas autorizações.

    Para obter instruções sobre como conceder a função de administrador do armazenamento ao nível do projeto, consulte a documentação do IAM.

  2. Enviar uma imagem inicial para o anfitrião. Por exemplo, os seguintes comandos:

    • Extraia a imagem busybox do Docker Hub
    • Etiquete a imagem com o respetivo caminho de destino no Container Registry, incluindo o anfitrião do registo gcr.io e o ID do projeto my-project
    • Envie a imagem para o registo
    docker pull busybox
    docker tag busybox gcr.io/my-project/busybox
    docker push gcr.io/my-project/busybox
    

O Container Registry adiciona o registo ao seu projeto, cria um contentor de armazenamento para o registo e armazena a imagem.

Já pode configurar o controlo de acesso no contentor de armazenamento do registo para conceder acesso ao registo a outros utilizadores.

Enviar uma imagem para um registo

Para enviar qualquer imagem local para o Container Registry através do Docker ou de outra ferramenta de terceiros, tem de a etiquetar primeiro com o nome do registo e, em seguida, enviar a imagem.

Os seguintes fatores podem afetar os carregamentos de imagens grandes:

Hora de carregamento
Qualquer pedido enviado para o Container Registry tem um limite de tempo limite de 2 horas. Se fizer a autenticação no Container Registry através de um token de acesso, o token expira após 60 minutos. Se prevê que o tempo de carregamento exceda os 60 minutos, use um método de autenticação diferente.
Tamanho da imagem
O Container Registry usa o Cloud Storage para o armazenamento subjacente de cada registo. As quotas e os limites do armazenamento na nuvem aplicam-se a cada registo, incluindo o tamanho máximo de 5 TB para um objeto no armazenamento.
O
Container Registry não suporta carregamentos segmentados do Docker. Algumas ferramentas suportam o carregamento de imagens grandes com carregamentos segmentados ou um único carregamento monolítico. Tem de usar carregamentos monolíticos para enviar imagens para o Container Registry.

Autorizações necessárias

O envio de uma imagem requer uma das seguintes funções do Cloud Storage ou uma função com as mesmas autorizações:

Enviar a primeira imagem para um registo no seu projeto

Função: administrador do armazenamento (roles/storage.admin) ao Google Cloud nível do projeto. A função de proprietário predefinida inclui estas autorizações.

Quando envia uma imagem para um anfitrião de registo no seu projeto pela primeira vez (como gcr.io), o Container Registry cria um contentor de armazenamento para o registo. A função de administrador de armazenamento tem as autorizações necessárias para criar o contentor de armazenamento.

Enviar imagens para um registo existente no seu projeto

Função: Storage Legacy Bucket Writer (roles/storage.legacyBucketWriter) no contentor de armazenamento do registo.

Esta função tem autorizações para enviar e extrair imagens para anfitriões de registo existentes no seu projeto. Por exemplo, se o seu projeto contiver apenas o registo, um utilizador com a função Storage Legacy Bucket Writer pode enviar imagens para gcr.io, mas não pode enviar imagens para asia.gcr.io.gcr.io

Para obter informações sobre como conceder autorizações a um registo, consulte o artigo Configurar o controlo de acesso.

Etiquete a imagem local com o nome do registo

Para etiquetar uma imagem:

  1. Verifique se configurou a autenticação no Container Registry.
  2. Determine o nome da imagem no Container Registry:

    1. Escolha um nome de anfitrião, que especifica a localização onde vai armazenar a imagem.

      • O gcr.io aloja imagens em centros de dados nos Estados Unidos, mas a localização pode mudar no futuro
      • us.gcr.io aloja imagens em centros de dados nos Estados Unidos, num contentor de armazenamento separado das imagens alojadas pelo gcr.io
      • eu.gcr.io aloja as imagens na União Europeia
      • asia.gcr.io aloja imagens em centros de dados na Ásia

      Estas localizações correspondem às multirregiões para contentores de armazenamento do Cloud Storage. Quando envia uma imagem para um registo com um novo nome de anfitrião, o Container Registry cria um contentor de armazenamento na multirregião especificada. Este contentor é o armazenamento subjacente do registo. Num projeto, todos os registos com o mesmo nome de anfitrião partilham um contentor de armazenamento.

      Na consola, o nome do anfitrião das imagens é apresentado em Localização.

    2. Escolha um nome de imagem de destino, que pode ser diferente do nome da imagem no seu computador local. Por exemplo, a imagem local pode chamar-se web-image, mas quer armazená-la no Container Registry como web-site

    3. Combine o nome do anfitrião, o ID do projeto da Google Cloud consolae o nome da imagem de destino:

      HOSTNAME/PROJECT-ID/TARGET-IMAGE
      

      Considere o seguinte exemplo:

      • Nome do anfitrião: gcr.io
      • Google Cloud project: my-project
      • Nome da imagem alvo: web-site

      A combinação do nome do anfitrião, do projeto e da imagem de destino dá-lhe o caminho completo da imagem a usar para etiquetar:

      gcr.io/my-project/web-site

      Se o ID do projeto contiver dois pontos (:), consulte o artigo Projetos com âmbito de domínio.

  3. Etiquete a imagem local com o nome do passo anterior. Se quiser etiquetar esta versão da imagem com uma etiqueta, inclua o nome da etiqueta.

    docker tag SOURCE_IMAGE HOSTNAME/PROJECT-ID/TARGET-IMAGE:TAG
    

    Substitua o seguinte:

    • SOURCE_IMAGE é o nome da imagem local ou o ID da imagem.
    • HOSTNAME é o anfitrião do registo que escolheu no passo 2.
    • PROJECT é o Google Cloud ID do projeto.
    • TARGET-IMAGE é o nome da imagem quando está armazenada no Container Registry.
    • TAG é a etiqueta que quer associar a esta versão da imagem.

    Por exemplo, este comando etiqueta a imagem local web-image como gcr.io/my-project/web-site no Container Registry com a etiqueta v1.5

    docker tag web-image gcr.io/my-project/web-site:v1.5
    

    Se não especificar uma etiqueta, o Docker adiciona a etiqueta latest predefinida. Uma vez que latest é uma etiqueta predefinida, representa a versão da imagem etiquetada mais recentemente com a etiqueta latest e não necessariamente a versão mais recente de uma imagem.

O Docker etiqueta a sua imagem com o nome e a etiqueta da imagem que especificou no comando.

Envie a imagem etiquetada para o Container Registry

  1. Verifique se configurou a autenticação no Container Registry.

  2. Envie a imagem etiquetada para o Container Registry:

    Execute o seguinte comando para enviar uma imagem com uma etiqueta específica:

    docker push HOSTNAME/PROJECT-ID/IMAGE:TAG
    

    Se omitir :TAG, o Docker envia a versão da imagem etiquetada com latest.

    Por exemplo, este comando envia a imagem gcr.io/my-project/web-site com a etiqueta v1.5:

    docker push gcr.io/my-project/web-site:v1.5
    

Quando envia uma imagem para um anfitrião de registo que ainda não existe no seu projeto, o Container Registry cria um contentor de armazenamento para o anfitrião de registo.

Para ver a imagem que enviou:

  • Aceda à Google Cloud consola para ver o registo e a imagem.

  • Execute gcloud container images list-tags para ver a etiqueta de imagem e o resumo gerado automaticamente:

    gcloud container images list-tags HOSTNAME/PROJECT-ID/IMAGE
    

    O resultado do comando é semelhante ao seguinte:

    DIGEST        TAGS        TIMESTAMP
    44bde...      test        2017-..-..
    

Extrair imagens de um registo

A obtenção de uma imagem requer a função Storage Object Viewer para o contentor de armazenamento do registo ou uma função com as mesmas autorizações.

Para extrair do Container Registry, use o comando:

docker pull HOSTNAME/PROJECT-ID/IMAGE:TAG

ou

docker pull HOSTNAME/PROJECT-ID/IMAGE@IMAGE_DIGEST

where:

  • HOSTNAME está listado em Localização na consola. É uma das quatro opções: gcr.io, us.gcr.io, eu.gcr.io ou asia.gcr.io.
  • PROJECT-ID é o Google Cloud ID do projeto da consola. Se o ID do projeto contiver dois pontos (:), consulte o artigo Projetos com âmbito de domínio.
  • IMAGE é o nome da imagem no Container Registry.
  • TAG é a etiqueta aplicada à imagem. Num registo, as etiquetas são exclusivas de uma imagem.
  • IMAGE_DIGEST é o valor hash sha256 do conteúdo da imagem. Na Google Cloud consola, clique na imagem específica para ver os respetivos metadados. O resumo é apresentado como o Resumo da imagem.

Para obter o comando pull de uma imagem específica:

  1. Clique no nome de uma imagem para aceder ao registo específico.

  2. No registo, selecione a caixa junto à versão da imagem que quer extrair.

  3. Clique em MOSTRAR COMANDO PULL na parte superior da página.

  4. Copie o comando pull, que identifica a imagem através da etiqueta ou do resumo.

O que se segue?