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:
O Container Registry está ativado no seu projeto.
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:
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.
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 projetomy-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
- Extraia a imagem
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 paraasia.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:
- Verifique se configurou a autenticação no Container Registry.
Determine o nome da imagem no Container Registry:
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 pelogcr.io
eu.gcr.io
aloja as imagens na União Europeiaasia.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.
- O
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 comoweb-site
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.- Nome do anfitrião:
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
comogcr.io/my-project/web-site
no Container Registry com a etiquetav1.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 quelatest
é uma etiqueta predefinida, representa a versão da imagem etiquetada mais recentemente com a etiquetalatest
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
Verifique se configurou a autenticação no Container Registry.
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 comlatest
.Por exemplo, este comando envia a imagem
gcr.io/my-project/web-site
com a etiquetav1.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
ouasia.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:
Clique no nome de uma imagem para aceder ao registo específico.
No registo, selecione a caixa junto à versão da imagem que quer extrair.
Clique em MOSTRAR COMANDO PULL na parte superior da página.
Copie o comando pull, que identifica a imagem através da etiqueta ou do resumo.
O que se segue?
- Saiba como gerir as suas imagens, incluindo adicionar ou remover etiquetas e eliminar imagens.
- Saiba como configurar o controlo de acesso.
- Leia mais acerca dos componentes e funcionalidades do Container Registry.
- Se quiser executar contentores no Compute Engine, saiba mais sobre os contentores no Compute Engine.