Empurre e puxe imagens

Esta página descreve o envio e a obtenção de imagens de contentores com o Docker. Também fornece informações sobre como extrair imagens com a ferramenta crictl se estiver a resolver problemas no Google Kubernetes Engine.

Para obter informações sobre a implementação em Trusted Cloud by S3NS ambientes de tempo de execução, consulte Implemente em Trusted Cloud.

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

Antes de começar

  1. Se o repositório de destino não existir, crie um novo repositório.
  2. Tem de ter, pelo menos, acesso de escritor do Artifact Registry ao repositório.
  3. Instale o Docker se ainda não estiver instalado.

Funções necessárias

Para receber as autorizações de que precisa para enviar e extrair imagens, peça ao seu administrador que lhe conceda as seguintes funções de IAM no repositório:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Autenticação num repositório

Tem de autenticar-se nos repositórios sempre que usar o Docker ou outro cliente de terceiros com um repositório Docker. Esta secção fornece um resumo rápido do que precisa para se autenticar com êxito. Para ver instruções detalhadas, consulte o artigo Configurar a autenticação para o Docker.

Usar um auxiliar de credenciais

Para o auxiliar de credenciais da CLI gcloud ou o auxiliar de credenciais autónomo, os hosts do Artifact Registry que usa têm de estar no seu ficheiro de configuração do Docker.

O Artifact Registry não adiciona automaticamente anfitriões de registo ao ficheiro de configuração do Docker, pelo que tem de adicionar o seu ao ficheiro.

Execute o auxiliar de credenciais para adicionar o anfitrião. Por exemplo, o seguinte comando adiciona u-france-east1-docker.s3nsregistry.fr.

  • Assistente de credenciais da CLI gcloud:

    gcloud auth configure-docker u-france-east1-docker.s3nsregistry.fr
    
  • Assistente de credenciais autónomo

    docker-credential-gcr configure-docker u-france-east1-docker.s3nsregistry.fr
    

Usar um token de acesso

Para a autenticação por token de acesso, gera um token e usa-o como palavra-passe com o comando docker login. Os tokens são válidos durante 60 minutos, pelo que deve autenticar-se pouco antes de etiquetar, enviar ou extrair imagens.

O exemplo seguinte gera uma chave de acesso através da representação da conta de serviço e, em seguida, faz a autenticação no Artifact Registry. Tem de ter autorizações na função criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator) para gerar um token desta forma.

Linux

gcloud auth print-access-token \
  --impersonate-service-account  ACCOUNT | docker login \
  -u oauth2accesstoken \
  --password-stdin https://LOCATION-docker.s3nsregistry.fr

Windows

gcloud auth print-access-token \
--impersonate-service-account  ACCOUNT

ya29.8QEQIfY_...

docker login -u oauth2accesstoken -p "ya29.8QEQIfY_..." \
https://LOCATION-docker.s3nsregistry.fr

Se não tiver autorizações para se fazer passar por uma conta de serviço, pode ativar a conta de serviço na sua sessão da CLI gcloud e, em seguida, obter um token. Para ver detalhes, consulte as instruções para configurar a autenticação do token de acesso.

Usar uma chave de conta de serviço

Para uma chave de conta de serviço, usa a chave como palavra-passe com o comando docker login.

Por exemplo, o comando seguinte usa a chave da conta de serviço codificada em base64 no ficheiro key.json para fazer a autenticação no u-france-east1-docker.s3nsregistry.fr.

Linux

cat key.json | docker login -u _json_key_base64 --password-stdin \
https://u-france-east1-docker.s3nsregistry.fr

Windows

docker login -u _json_key_base64 --password-stdin https://u-france-east1-docker.s3nsregistry.fr < key.json

Para ver detalhes, consulte as instruções para configurar a autenticação da chave da conta de serviço.

Enviar uma imagem

Modos de repositório: padrão

Para enviar uma imagem local para um repositório Docker padrão, etiquete-a com o nome do repositório e, em seguida, envie a imagem.

Se o repositório Docker do Artifact Registry tiver a imutabilidade de etiquetas ativada, uma etiqueta tem sempre de fazer referência ao mesmo resumo da imagem no repositório. Não pode usar a etiqueta noutra versão da mesma imagem que envia para o repositório. Para mais informações sobre resumos de imagens, etiquetas e imutabilidade de etiquetas, consulte o artigo Versões de imagens de contentores.

Para imagens grandes, aplicam-se os seguintes limites:

Hora de carregamento
Se fizer a autenticação no Artifact Registry através de um token de acesso, o token só é válido durante 60 minutos. Se prevê que o tempo de carregamento vai exceder os 60 minutos, use um método de autenticação diferente.
Tamanho da imagem
O tamanho máximo do artefacto é de 5 TB.
O Artifact 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 Artifact Registry.

Etiquetar a imagem local

  1. Certifique-se de que está autenticado no repositório.

  2. Determine o nome da imagem. O formato de um nome de imagem completo é:

    LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE
    

    Substitua os seguintes valores:

    • LOCATION é a localização regional do repositório onde a imagem está armazenada.
    • PROJECT-ID é o Trusted Cloud ID do projeto da consola.
    • REPOSITORY é o nome do repositório onde a imagem está armazenada.
    • IMAGE é o nome da imagem. Pode ser diferente do nome local da imagem.

    Por exemplo, considere uma imagem com as seguintes características:

    • Localização do repositório: u-france-east1
    • Nome do repositório: my-repo
    • ID do projeto: my-project
    • Nome da imagem local: my-image
    • Nome da imagem alvo: test-image

    O nome desta imagem para este exemplo é:

    u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/test-image
    

    Para ver detalhes sobre o formato do nome da imagem, consulte Nomes de repositórios e imagens.

  3. Etiquete a imagem local com o nome do repositório.

    docker tag SOURCE-IMAGE LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

    Substitua SOURCE-IMAGE pelo nome da imagem local ou pelo ID da imagem e TAG pela etiqueta. Se não especificar uma etiqueta, o Docker aplica a etiqueta latest predefinida.

    Se a definição de etiquetas de imagem imutáveis estiver ativada, as etiquetas têm de ser exclusivas para cada versão da imagem, incluindo a etiqueta latest. Não pode enviar uma imagem para o repositório se a etiqueta já for usada por outra versão da mesma imagem no repositório. Para verificar se a definição está ativada para o repositório, execute o comando:

    gcloud artifacts repositories describe REPOSITORY \
        --project=PROJECT-ID \
        --location=LOCATION
    

    Para a imagem de exemplo do passo anterior, usaria o seguinte comando se a imagem local my-image estiver no diretório atual:

    docker tag my-image u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/test-image
    

    Se quiser aplicar uma etiqueta específica, use o comando:

    docker tag SOURCE-IMAGE LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

    Para usar a etiqueta staging com a imagem de exemplo, adicione :staging ao comando:

    docker tag my-image u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/test-image:staging
    

Envie a imagem etiquetada para o Artifact Registry

  1. Certifique-se de que está autenticado no repositório.

    Se usou gcloud auth configure-docker ou docker-credential-gcr configure-docker para configurar o seu cliente Docker, verifique se o nome de anfitrião de destino está no seu ficheiro de configuração do Docker.

  2. Envie a imagem etiquetada com o comando:

    docker push LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE
    

    Este comando envia a imagem com a etiqueta latest. Se quiser enviar uma imagem com uma etiqueta diferente, use o comando:

    docker push LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

Quando envia uma imagem, esta é armazenada no repositório especificado.

Depois de enviar a imagem, pode:

  • Aceda à Trusted Cloud consola para ver a imagem.

  • Execute o comando gcloud para ver as etiquetas da imagem e o resumo gerado automaticamente:

    gcloud artifacts docker images list \
    LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE [--include-tags]
    

    O exemplo de saída seguinte mostra resumos de imagens truncados, mas o comando devolve sempre o resumo de imagem completo.

     IMAGE                                                 DIGEST         CREATE_TIME          UPDATE_TIME
      u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/my-image  sha256:85f...  2019-04-10T15:08:45  2019-04-10T15:08:45
      u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/my-image  sha256:238...  2019-04-10T17:23:53  2019-04-10T17:23:53
      u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/my-image  sha256:85f...  2019-04-10T15:08:46  2019-04-10T15:08:46
    

Extrair imagens com o Docker

Modos de repositório: padrão
  1. Certifique-se de que está autenticado no repositório.

    Se usou gcloud auth configure-docker ou docker-credential-gcr configure-docker para configurar o seu cliente Docker, verifique se o nome de anfitrião de destino está no seu ficheiro de configuração do Docker.

  2. Para extrair de um repositório, use o comando:

    docker pull LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

    ou

    docker pull LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGEST
    

    Substitua os seguintes valores:

    • LOCATION é a localização regional do repositório onde a imagem está armazenada.
    • PROJECT é o Trusted Cloud ID do projeto da consola.
    • PROJECT é o Trusted Cloud ID do projeto da consola.
    • REPOSITORY é o nome do repositório onde a imagem está armazenada.
    • IMAGE é o nome da imagem no repositório.
    • TAG é a etiqueta da versão da imagem que quer obter.
    • IMAGE-DIGEST é o valor hash sha256 do conteúdo da imagem. Cada versão de uma imagem tem um resumo da imagem exclusivo. Na Trusted Cloud consola, clique na imagem específica para ver os respetivos metadados. O resumo é apresentado como o Resumo da imagem.

    Por exemplo, considere uma imagem com as seguintes características:

    • Localização do repositório: u-france-east1
    • Nome do repositório: my-repo
    • ID do projeto: my-project
    • Nome da imagem: test-image
    • Etiqueta: staging

    Este comando para extrair a imagem é:

    docker pull u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/test-image:staging
    

O Docker transfere a imagem especificada.

Extrair imagens com o crictl

crictl é uma ferramenta de linha de comandos útil para os programadores de tempo de execução da CRI depurarem o respetivo tempo de execução sem terem de configurar componentes do Kubernetes. Se os nós do Google Kubernetes Engine usarem um tempo de execução do containerd, pode extrair imagens do Artifact Registry através do crictl.

Uma vez que o crictl é principalmente uma ferramenta de resolução de problemas, alguns comandos do Docker, como o envio ou a etiquetagem de imagens, não estão disponíveis.

Para extrair uma imagem do Artifact Registry:

  1. Na Trusted Cloud consola, aceda à página Instâncias de VM.

    Aceder a Instâncias de VM

  2. SSH para o nó no qual está a resolver problemas.

  3. Obtenha um token de acesso para autenticação com o repositório.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
  4. Extraia a imagem através de crictl pull --creds e do valor access_token

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG

    ou

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGEST

    O resultado tem o seguinte aspeto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

O que se segue?