Como usar o comando docker image tag para gerenciar aliases de imagens

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como gerenciar efetivamente os aliases de imagens Docker usando o comando docker image tag. Começaremos entendendo a estrutura e os componentes das referências de imagens Docker, que são essenciais para identificar e localizar versões específicas de imagens.

Após a compreensão fundamental das referências de imagens, você obterá experiência prática na marcação de imagens usando vários métodos: por seu ID, por seu nome existente e por sua combinação de nome e tag. Finalmente, você aprenderá como marcar uma imagem especificamente para uso com um registro Docker privado, permitindo que você envie (push) e puxe (pull) imagens de locais personalizados.

Entenda as referências de imagens Docker

Nesta etapa, aprenderemos sobre as referências de imagens Docker. Uma referência de imagem Docker é um nome que aponta para uma versão específica de uma imagem Docker. É como você diz ao Docker qual imagem deseja usar ao executar um contêiner ou realizar outras operações relacionadas à imagem.

Uma referência de imagem completa normalmente consiste em várias partes:

[registry_hostname[:port]/]image_name[:tag]

Vamos detalhar essas partes:

  • registry_hostname[:port]: Este é o nome do host e a porta opcional do registro Docker onde a imagem é armazenada. Se esta parte for omitida, o Docker assume o Docker Hub (docker.io).
  • image_name: Este é o nome da imagem. Pode incluir um namespace (por exemplo, library/ubuntu ou myuser/myapp). Se nenhum namespace for especificado para imagens oficiais no Docker Hub, o namespace library/ é implícito (por exemplo, ubuntu é equivalente a library/ubuntu).
  • tag: Esta é uma tag opcional que especifica uma versão ou variante específica da imagem. Se nenhuma tag for especificada, o Docker assume a tag latest.

Vamos analisar alguns exemplos:

  • ubuntu: Isso se refere à tag latest da imagem oficial ubuntu no Docker Hub.
  • ubuntu:20.04: Isso se refere à tag 20.04 da imagem oficial ubuntu no Docker Hub.
  • myuser/myapp: Isso se refere à tag latest da imagem myapp no repositório myuser no Docker Hub.
  • myuser/myapp:v1.0: Isso se refere à tag v1.0 da imagem myapp no repositório myuser no Docker Hub.
  • myregistry.example.com:5000/myuser/myapp:v1.0: Isso se refere à tag v1.0 da imagem myapp no repositório myuser no registro privado localizado em myregistry.example.com na porta 5000.

Para ver como as referências de imagens funcionam na prática, vamos puxar uma imagem usando sua referência. Vamos puxar a imagem hello-world, que é uma imagem muito pequena usada para testar instalações Docker.

docker pull hello-world

Você deve ver uma saída indicando que o Docker está puxando a imagem.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Este comando puxou a tag latest da imagem hello-world do Docker Hub. A saída confirma a referência completa docker.io/library/hello-world:latest.

Agora, vamos listar as imagens que você baixou.

docker images

Você deve ver a imagem hello-world listada.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    <image_id>     <created_time>   <size>

A saída mostra o REPOSITORY (nome da imagem), TAG, IMAGE ID, tempo CREATED e SIZE da imagem. O IMAGE ID é um identificador único para o conteúdo da imagem.

Entender as referências de imagens é crucial para trabalhar com o Docker, pois permite que você especifique exatamente qual imagem deseja usar.

Marcar uma imagem usando seu ID

Nesta etapa, aprenderemos como marcar uma imagem Docker usando seu Image ID. Marcar uma imagem permite que você lhe dê um novo nome e/ou tag, criando uma nova referência que aponta para o mesmo conteúdo da imagem. Isso é útil para criar aliases, versionamento ou preparar uma imagem para ser enviada para um registro diferente.

O comando básico para marcar uma imagem é docker tag. A sintaxe é:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Você pode especificar a imagem de origem usando seu Image ID, seu nome ou seu nome e tag. Nesta etapa, usaremos o Image ID.

Primeiro, vamos listar as imagens novamente para obter o Image ID da imagem hello-world que puxamos na etapa anterior.

docker images

Encontre a imagem hello-world na saída e anote seu IMAGE ID. Será uma string de caracteres hexadecimais, por exemplo, bf756fb1cdb1. Você só precisa usar os primeiros caracteres do ID, desde que sejam únicos entre suas imagens.

Agora, vamos marcar a imagem hello-world usando seu Image ID. Vamos marcá-la com um novo nome, my-hello-world, e uma tag v1.0. Substitua <image_id> pelo Image ID real que você anotou na saída de docker images.

docker tag < image_id > my-hello-world:v1.0

Não haverá saída se o comando for bem-sucedido.

Agora, vamos listar as imagens novamente para ver a nova tag.

docker images

Você deve agora ver uma nova entrada com o repositório my-hello-world e a tag v1.0. Observe que ela tem o mesmo IMAGE ID que a imagem original hello-world. Isso confirma que a nova tag é apenas um ponteiro para o mesmo conteúdo da imagem.

REPOSITORY       TAG       IMAGE ID       CREATED        SIZE
hello-world      latest    <image_id>     <created_time>   <size>
my-hello-world   v1.0      <image_id>     <created_time>   <size>

Você marcou com sucesso uma imagem usando seu Image ID. Esta é uma operação fundamental no gerenciamento de imagens Docker.

Marcar uma imagem usando seu Nome

Nesta etapa, aprenderemos como marcar uma imagem Docker usando seu Nome. Esta é outra forma comum de referenciar uma imagem ao marcar. Quando você usa apenas o nome da imagem sem uma tag, o Docker assume que você está se referindo à imagem com a tag latest.

A sintaxe para marcar usando o nome da imagem é a mesma de antes:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Desta vez, nossa SOURCE_IMAGE será o nome da imagem. Usaremos a imagem hello-world novamente. Como não especificamos uma tag para a origem, o Docker usará hello-world:latest.

Vamos marcar a imagem hello-world com um novo nome, another-hello-world, e uma tag v2.0.

docker tag hello-world another-hello-world:v2.0

Novamente, não haverá saída se o comando for bem-sucedido.

Agora, vamos listar as imagens para ver a nova tag.

docker images

Você deve agora ver uma nova entrada com o repositório another-hello-world e a tag v2.0. Como na etapa anterior, esta nova tag também aponta para o mesmo IMAGE ID que a imagem original hello-world.

REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
hello-world         latest    <image_id>     <created_time>   <size>
my-hello-world      v1.0      <image_id>     <created_time>   <size>
another-hello-world v2.0      <image_id>     <created_time>   <size>

Você marcou com sucesso uma imagem usando seu nome. Esta é uma maneira conveniente de criar novas tags para a versão latest de uma imagem.

Marcar uma imagem usando seu Nome e Tag

Nesta etapa, aprenderemos como marcar uma imagem Docker usando seu Nome e Tag. Esta é a maneira mais específica de referenciar uma versão específica de uma imagem ao marcar.

A sintaxe permanece a mesma:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Desta vez, nossa SOURCE_IMAGE será especificada com seu nome e tag. Usaremos a imagem my-hello-world:v1.0 que criamos em uma etapa anterior.

Vamos marcar a imagem my-hello-world:v1.0 com um novo nome, yet-another-hello-world, e uma tag release.

docker tag my-hello-world:v1.0 yet-another-hello-world:release

Não haverá saída se o comando for bem-sucedido.

Agora, vamos listar as imagens para ver a nova tag.

docker images

Você deve agora ver uma nova entrada com o repositório yet-another-hello-world e a tag release. Esta nova tag também aponta para o mesmo IMAGE ID que a imagem original hello-world e as outras tags que criamos.

REPOSITORY              TAG       IMAGE ID       CREATED        SIZE
hello-world             latest    <image_id>     <created_time>   <size>
my-hello-world          v1.0      <image_id>     <created_time>   <size>
another-hello-world     v2.0      <image_id>     <created_time>   <size>
yet-another-hello-world release   <image_id>     <created_time>   <size>

Você marcou com sucesso uma imagem usando seu nome e tag. Este método é útil quando você deseja criar uma nova tag com base em uma versão específica e já marcada de uma imagem.

Marcar uma imagem para um registro privado

Nesta etapa, aprenderemos como marcar uma imagem Docker para que ela possa ser enviada para um registro privado. Ao marcar uma imagem para um registro privado, você precisa incluir o nome do host e a porta opcional do registro na referência da imagem de destino.

A sintaxe para marcar permanece:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

A TARGET_IMAGE agora incluirá as informações do registro:

[registry_hostname[:port]/]image_name[:tag]

Vamos imaginar que temos um registro privado em execução em myregistry.example.com na porta 5000. Marcaremos a imagem hello-world (usando sua tag latest) para prepará-la para enviar para este registro hipotético. Daremos a ela o nome my-hello-world e a tag prod.

docker tag hello-world:latest myregistry.example.com:5000/my-hello-world:prod

Não haverá saída se o comando for bem-sucedido.

Agora, vamos listar as imagens para ver a nova tag com o nome do registro.

docker images

Você deve agora ver uma nova entrada com o repositório myregistry.example.com:5000/my-hello-world e a tag prod. Esta tag também aponta para o mesmo IMAGE ID que a imagem original hello-world.

REPOSITORY                                TAG       IMAGE ID       CREATED        SIZE
hello-world                               latest    <image_id>     <created_time>   <size>
my-hello-world                            v1.0      <image_id>     <created_time>   <size>
another-hello-world                       v2.0      <image_id>     <created_time>   <size>
yet-another-hello-world                   release   <image_id>     <created_time>   <size>
myregistry.example.com:5000/my-hello-world prod      <image_id>     <created_time>   <size>

Você marcou com sucesso uma imagem com uma referência que inclui um nome de host e porta de registro privado. Esta é uma etapa necessária antes de poder enviar a imagem para esse registro usando o comando docker push.

Resumo

Neste laboratório, aprendemos sobre as referências de imagens Docker, entendendo sua estrutura, incluindo o nome do host do registro opcional, o nome da imagem e a tag. Vimos como essas referências são usadas para identificar de forma exclusiva e extrair versões específicas de imagens de registros Docker.

Em seguida, exploramos como usar o comando docker image tag para criar aliases para imagens existentes. Praticamos a marcação de uma imagem usando seu ID, seu nome existente e sua combinação de nome e tag existentes. Finalmente, aprendemos como marcar uma imagem com uma referência que inclui um nome de host de registro privado, preparando-a para enviar para um registro personalizado.