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
- Se o repositório de destino não existir, crie um novo repositório.
- Tem de ter, pelo menos, acesso de escritor do Artifact Registry ao repositório.
- 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:
-
Extrair imagens:
Leitor do Artifact Registry (
roles/artifactregistry.reader
) -
Etiquete e envie imagens:
Escritor do Artifact Registry (
roles/artifactregistry.writer
)
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
Certifique-se de que está autenticado no repositório.
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.
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
Certifique-se de que está autenticado no repositório.
Se usou
gcloud auth configure-docker
oudocker-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.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ãoCertifique-se de que está autenticado no repositório.
Se usou
gcloud auth configure-docker
oudocker-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.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:
Na Trusted Cloud consola, aceda à página Instâncias de VM.
SSH para o nó no qual está a resolver problemas.
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"
Extraia a imagem através de
crictl pull --creds
e do valoraccess_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?
- Saiba como gerir etiquetas e eliminar imagens.
- Se quiser executar contentores no Compute Engine, saiba mais sobre os contentores no Compute Engine.
- Use
crictl
para depurar nós do Kubernetes - Saiba como usar o comando
crictl
para extrair imagens de repositórios privados do Artifact Registry - Saiba mais sobre a configuração de
crictl
registos de imagens