Nesta página, descrevemos como enviar e extrair imagens de contêiner com o Docker. Ele também
fornece informações sobre como extrair imagens com a ferramenta crictl
se você estiver
solucionando problemas no Google Kubernetes Engine.
Para informações sobre como implantar em ambientes de execução do Trusted Cloud by S3NS , consulte Implantar no Trusted Cloud.
Para instruções sobre como listar, incluir tags e excluir imagens, consulte Como gerenciar imagens.
Antes de começar
- Se não existir um repositório de destino, crie um novo repositório.
- É preciso ter pelo menos o acesso de Gravador do Artifact Registry ao repositório.
- Instale o Docker se ele ainda não estiver instalado.
Funções exigidas
Para receber as permissões necessárias para enviar e extrair imagens, peça ao administrador para conceder a você os seguintes papéis do IAM no repositório:
-
Extrair imagens:
Leitor do Artifact Registry (
roles/artifactregistry.reader
) -
Adicione tags e envie imagens:
Gravador do Artifact Registry (
roles/artifactregistry.writer
)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Como autenticar em um repositório
É necessário se autenticar nos repositórios sempre que usar o Docker ou outro cliente de terceiros com um repositório do Docker. Esta seção fornece um resumo rápido do que você precisa para se autenticar. Para instruções detalhadas, consulte Como configurar a autenticação para o Docker.
Como usar um auxiliar de credenciais
Para o auxiliar de credenciais da CLI gcloud ou o auxiliar de credenciais independente, os hosts do Artifact Registry que você usa precisam estar no arquivo de configuração do Docker.
O Artifact Registry não adiciona automaticamente hosts de registro ao arquivo de configuração do Docker. Portanto, você precisa adicionar os seus ao arquivo.
Execute o auxiliar de credenciais para adicionar o host. Por exemplo, o comando a seguir
adiciona u-france-east1-docker.s3nsregistry.fr
.
Auxiliar de credenciais da CLI gcloud:
gcloud auth configure-docker u-france-east1-docker.s3nsregistry.fr
Auxiliar de credenciais independente
docker-credential-gcr configure-docker u-france-east1-docker.s3nsregistry.fr
Usar um token de acesso
Para a autenticação de token de acesso, gere um token e use-o como senha
com o comando docker login
. Os tokens são válidos por 60 minutos. Portanto, faça a autenticação pouco antes de marcar, enviar ou extrair imagens.
O exemplo a seguir gera um token de acesso usando a representação da conta de serviço e, em seguida, faz a autenticação no Artifact Registry. Você precisa ter permissões no papel Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator
) para gerar um token dessa 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 você não tiver permissões para representar uma conta de serviço, ative a conta na sua sessão da CLI gcloud e receba um token. Para mais detalhes, consulte as instruções para configurar a autenticação de token de acesso.
Como usar uma chave de conta de serviço
Para uma chave de conta de serviço, use a chave como uma senha com o comando docker login
.
Por exemplo, o comando a seguir usa a chave de conta de serviço codificada em base64
no arquivo key.json
para autenticar em 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 mais detalhes, consulte as instruções para configurar a autenticação de chave de conta de serviço.
Como enviar uma imagem
Modos de repositório: padrão
Para enviar uma imagem local a um repositório padrão do Docker, marque-a com o nome do repositório e envie a imagem.
Se a imutabilidade de tag estiver ativada no repositório do Docker do Artifact Registry, uma tag sempre vai referenciar o mesmo resumo de imagem no repositório. Não é possível usar a tag em outra versão da mesma imagem enviada para o repositório. Para mais informações sobre resumos, tags e imutabilidade de tags de imagens, consulte Versões de imagens de contêiner.
Para imagens grandes, os seguintes limites se aplicam:
- Tempo de upload
- Se você usar um token de acesso para autenticar o Artifact Registry, ele só será válido por 60 minutos. Se você acha que o tempo de upload vai ser maior que 60 minutos, use um método de autenticação diferente.
- Tamanho da imagem
- O tamanho máximo do artefato é de 5 TB.
- O Artifact Registry não é compatível com uploads em partes do Docker. Algumas ferramentas suportam o upload de imagens grandes com uploads em partes ou um único upload monolítico. Use uploads monolíticos para enviar imagens ao Artifact Registry.
Como marcar a imagem local
Verifique se você está autenticado no repositório.
Determine o nome da imagem. O formato do nome completo de uma imagem é:
LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE
Substitua os seguintes valores:
LOCATION
é o local regional do repositório em que a imagem está armazenada.PROJECT-ID
é o ID do projeto do seu Trusted Cloud console.REPOSITORY
é o nome do repositório em que a imagem está armazenada.IMAGE
é o nome da imagem. Ele pode ser diferente do nome local da imagem.
Por exemplo, considere uma imagem com as seguintes características:
- Local 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 de destino:
test-image
O nome da imagem deste exemplo é:
u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/test-image
Para detalhes sobre o formato do nome da imagem, consulte Nomes de repositório e imagens.
Marque 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 ID da imagem e TAG pela tag. Se você não especificar uma tag, o Docker vai aplicar a tag padrão
latest
.Se a configuração de tags de imagem imutáveis estiver ativada, as tags precisarão ser exclusivas para cada versão de imagem, incluindo a tag
latest
. Não é possível enviar uma imagem para o repositório se a tag já estiver sendo usada por outra versão da mesma imagem no repositório. Para verificar se a configuração está ativada para o repositório, execute o comando:gcloud artifacts repositories describe REPOSITORY \ --project=PROJECT-ID \ --location=LOCATION
No exemplo de imagem da etapa anterior, use o comando a seguir 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 você quiser aplicar uma tag específica, use o comando:
docker tag SOURCE-IMAGE LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG
Para usar a tag
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 marcada para o Artifact Registry
Verifique se você está autenticado no repositório.
Se você usou
gcloud auth configure-docker
oudocker-credential-gcr configure-docker
para configurar o cliente Docker, verifique se o nome do host de destino está no arquivo de configuração do Docker.Envie a imagem marcada com o comando:
docker push LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE
Este comando envia a imagem que tem a tag
latest
. Se você quiser enviar uma imagem com uma tag diferente, use o comando:docker push LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG
Quando você envia uma imagem, ela é armazenada no repositório especificado.
Depois de enviar a imagem, você pode:
Acesse o console doTrusted Cloud para ver a imagem.
Execute o comando
gcloud
para visualizar as tags da imagem e o resumo gerado automaticamente:gcloud artifacts docker images list \ LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE [--include-tags]
A saída de exemplo a seguir mostra resumos de imagens truncados, mas o comando sempre retorna 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
Como extrair imagens com o Docker
Modos de repositório: padrãoVerifique se você está autenticado no repositório.
Se você usou
gcloud auth configure-docker
oudocker-credential-gcr configure-docker
para configurar o cliente Docker, verifique se o nome do host de destino está no arquivo 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
é o local regional do repositório em que a imagem está armazenada.PROJECT
é o ID do projeto do seu Trusted Cloud console.PROJECT
é o ID do projeto do seu Trusted Cloud console.REPOSITORY
é o nome do repositório em que a imagem está armazenada.IMAGE
é o nome da imagem no repositório.TAG
é a tag da versão de imagem que você quer extrair.IMAGE-DIGEST
é o valor de hash sha256 do conteúdo da imagem. Cada versão de uma imagem tem um resumo de imagem exclusivo. No Trusted Cloud console, clique na imagem específica para ver os metadados dela. O resumo é listado como Resumo da imagem.
Por exemplo, considere uma imagem com as seguintes características:
- Local do repositório:
u-france-east1
- Nome do repositório:
my-repo
- ID do projeto:
my-project
- Nome da imagem:
test-image
- Tag:
staging
Use este comando para extrair a imagem:
docker pull u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/test-image:staging
O Docker faz o download da imagem especificada.
Como extrair imagens com o crictl
O crictl
é uma ferramenta de linha de comando útil para desenvolvedores de ambiente de execução do CRI depurarem
o ambiente de execução sem precisar configurar componentes do Kubernetes. Se os nós do Google Kubernetes Engine usarem um ambiente de execução containerd, será possível extrair imagens do Artifact Registry usando crictl
.
Como crictl
é principalmente uma ferramenta de solução de problemas, alguns comandos do Docker, como
enviar ou marcar imagens, não estão disponíveis.
Para extrair uma imagem do Artifact Registry:
No console Trusted Cloud , acesse a página Instâncias de VM.
Use SSH para acessar o nó em que você está resolvendo problemas.
Receba 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 usando
crictl pull --creds
e o 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
A saída será assim:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
A seguir
- Saiba mais sobre como gerenciar tags e excluir imagens.
- Saiba mais sobre como executar contêineres no Compute Engine.
- Usar
crictl
para depurar nós do Kubernetes - Saiba como usar o
crictl
para extrair imagens de repositórios privados do Artifact Registry - Saiba mais sobre como configurar
crictl
registros de imagens.