Como usar o comando docker image ls para listar e filtrar imagens

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar efetivamente o comando docker images para listar e filtrar imagens Docker em seu sistema. Você começará listando todas as imagens de nível superior e, em seguida, explorará como listar imagens por nome e tag específicos.

Além disso, você se aprofundará na filtragem de imagens com base em seu status de "dangling" (pendente) e pela aplicação de labels (rótulos). Por fim, você aprenderá como personalizar o formato de saída do comando docker images usando um template (modelo) personalizado para uma exibição de informações mais adaptada.

Listar todas as imagens de nível superior

Nesta etapa, você aprenderá como listar todas as imagens Docker de nível superior em seu sistema. As imagens de nível superior são as imagens que você explicitamente faz o pull (puxa) ou constrói. Elas não são imagens intermediárias criadas durante o processo de build (construção).

Para listar todas as imagens de nível superior, você pode usar o comando docker images. Este comando exibirá uma tabela com informações sobre cada imagem, incluindo o repositório, a tag, o ID da imagem, o tempo de criação e o tamanho.

Vamos tentar listar as imagens. Como este é um ambiente novo, pode não haver muitas imagens inicialmente. Faremos o pull de uma imagem em uma etapa posterior.

Abra seu terminal no diretório ~/project e execute o seguinte comando:

docker images

Você deve ver uma saída semelhante a esta (a saída exata pode variar dependendo das imagens presentes):

REPOSITORY    TAG       IMAGE ID       CREATED       SIZE

Esta saída indica que atualmente não há imagens de nível superior em seu sistema.

Listar imagens por nome e tag

Nesta etapa, você aprenderá como listar imagens Docker específicas por seu nome e tag. Isso é útil quando você tem muitas imagens e deseja encontrar uma em particular.

O comando docker images permite que você especifique um nome de repositório e, opcionalmente, uma tag para filtrar a saída. O formato é docker images [REPOSITORY[:TAG]].

Primeiro, vamos fazer o pull (puxar) de uma imagem para que tenhamos algo para listar. Faremos o pull da imagem hello-world, que é uma imagem muito pequena usada para testes.

Execute o seguinte comando para fazer o pull da imagem hello-world:

docker pull hello-world

Você deve ver uma saída indicando que a imagem está sendo puxada e baixada:

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

Agora que temos a imagem hello-world, vamos listar apenas esta imagem usando seu nome.

Execute o seguinte comando:

docker images hello-world

A saída deve mostrar apenas a imagem hello-world:

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

Você também pode especificar uma tag. Como fizemos o pull da tag latest, vamos listar a imagem hello-world com a tag latest.

Execute o seguinte comando:

docker images hello-world:latest

A saída será a mesma do comando anterior, pois latest é a tag padrão se nenhuma for especificada:

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

Se você tentar listar uma imagem que não existe, obterá uma saída vazia. Por exemplo:

docker images non-existent-image

Saída:

REPOSITORY    TAG       IMAGE ID       CREATED       SIZE

Isso confirma que você pode filtrar imagens por seu nome e tag.

Filtrar imagens por status 'dangling'

Nesta etapa, você aprenderá como filtrar imagens Docker com base em seu status "dangling" (pendente). Imagens "dangling" são camadas que não têm relação com nenhuma imagem marcada. Elas são frequentemente o resultado da construção de novas versões de uma imagem, o que deixa as camadas antigas sem uma tag. Essas imagens "dangling" consomem espaço em disco e podem ser limpas.

Para filtrar imagens por seu status "dangling", você pode usar a flag --filter com a chave dangling. O valor pode ser true para mostrar apenas imagens "dangling" ou false para mostrar apenas imagens não "dangling".

Primeiro, vamos criar uma imagem "dangling". Podemos fazer isso construindo uma nova imagem que substitui uma existente. Usaremos um Dockerfile simples para isso.

Crie um arquivo chamado Dockerfile em seu diretório ~/project com o seguinte conteúdo:

FROM alpine
CMD ["echo", "Hello, world!"]

Este Dockerfile é muito simples. Ele usa a imagem alpine como base e apenas imprime "Hello, world!" quando um container é executado a partir dele.

Agora, vamos construir uma imagem a partir deste Dockerfile e marcá-la.

Execute o seguinte comando para construir a imagem e marcá-la como my-image:latest:

docker build -t my-image:latest .

Você deve ver a saída indicando o processo de construção:

[+] Building
...
Successfully built <image_id>
Successfully tagged my-image:latest

Agora, vamos modificar o Dockerfile ligeiramente e construí-lo novamente com a mesma tag. Isso criará uma nova imagem com a tag my-image:latest, e a imagem anterior que tinha essa tag se tornará "dangling".

Edite o Dockerfile em seu diretório ~/project para alterar o comando:

FROM alpine
CMD ["echo", "Hello again!"]

Agora, construa a imagem novamente com a mesma tag:

docker build -t my-image:latest .

Você verá uma saída semelhante à construção anterior, mas um novo ID de imagem será gerado. A imagem anterior com a tag my-image:latest agora é "dangling".

Vamos listar todas as imagens para ver a imagem "dangling".

Execute o comando:

docker images

Você pode ver uma imagem com <none> nas colunas REPOSITORY e TAG. Esta é uma imagem "dangling".

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
my-image      latest    <new_image_id> <created_time>   <size>
<none>        <none>    <old_image_id> <created_time>   <size>
hello-world   latest    <image_id>     <created_time>   <size>

Agora, vamos filtrar para mostrar apenas as imagens "dangling" usando a flag --filter dangling=true.

Execute o comando:

docker images --filter dangling=true

Você deve ver apenas a imagem "dangling":

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
<none>        <none>    <old_image_id> <created_time>   <size>

Para ver apenas imagens não "dangling", você pode usar --filter dangling=false.

Execute o comando:

docker images --filter dangling=false

Isso listará todas as imagens que não são "dangling":

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

Isso demonstra como filtrar imagens com base em seu status "dangling".

Filtrar imagens por 'label' (rótulo)

Nesta etapa, você aprenderá como filtrar imagens Docker com base em labels (rótulos). Labels são pares chave-valor que você pode anexar a objetos Docker, incluindo imagens. Eles são úteis para organizar e identificar imagens.

Para filtrar imagens por label, você usa a flag --filter com a chave label. O valor pode ser um único label (label=<key>=<value>) ou apenas a chave do label (label=<key>) para encontrar imagens com esse label, independentemente de seu valor.

Primeiro, vamos criar um novo Dockerfile que inclua labels.

Crie um arquivo chamado Dockerfile.labeled em seu diretório ~/project com o seguinte conteúdo:

FROM alpine
LABEL maintainer="LabEx User"
LABEL version="1.0"
CMD ["echo", "Image with labels!"]

Este Dockerfile é semelhante ao anterior, mas inclui duas instruções LABEL.

Agora, vamos construir uma imagem a partir deste Dockerfile e marcá-la.

Execute o seguinte comando para construir a imagem e marcá-la como labeled-image:latest:

docker build -t labeled-image:latest -f Dockerfile.labeled .

Você deve ver a saída indicando o processo de construção e a marcação bem-sucedida da imagem.

Agora, vamos listar todas as imagens para ver a imagem recém-criada.

Execute o comando:

docker images

Você deve ver labeled-image na lista junto com as outras imagens.

REPOSITORY      TAG       IMAGE ID       CREATED        SIZE
labeled-image   latest    <image_id>     <created_time>   <size>
my-image        latest    <new_image_id> <created_time>   <size>
<none>          <none>    <old_image_id> <created_time>   <size>
hello-world     latest    <image_id>     <created_time>   <size>

Agora, vamos filtrar imagens pelo label maintainer. Vamos filtrar por imagens onde o label maintainer tem o valor "LabEx User".

Execute o comando:

docker images --filter label=maintainer=LabEx User

Você deve ver apenas a labeled-image:

REPOSITORY      TAG       IMAGE ID       CREATED        SIZE
labeled-image   latest    <image_id>     <created_time>   <size>

Você também pode filtrar apenas pela chave do label, independentemente do valor. Vamos filtrar por imagens que possuem o label version.

Execute o comando:

docker images --filter label=version

Você deve novamente ver apenas a labeled-image:

REPOSITORY      TAG       IMAGE ID       CREATED        SIZE
labeled-image   latest    <image_id>     <created_time>   <size>

Isso demonstra como filtrar imagens usando labels.

Formatar a saída usando um template (modelo) personalizado

Nesta etapa, você aprenderá como formatar a saída do comando docker images usando um template (modelo) personalizado. Isso é útil quando você deseja extrair informações específicas sobre imagens em um formato legível por máquina ou em um formato personalizado legível por humanos.

O comando docker images suporta a flag --format, que permite que você especifique um template Go para controlar a saída. Você pode usar vários placeholders (espaços reservados) dentro do template para acessar diferentes atributos da imagem.

Vamos tentar formatar a saída para mostrar apenas o ID da imagem e o nome do repositório, separados por dois pontos.

Execute o seguinte comando:

docker images --format "{{.ID}}: {{.Repository}}"

Você deve ver uma saída semelhante a esta, listando o ID da imagem e o repositório para cada imagem:

<image_id>: hello-world
<new_image_id>: my-image
<old_image_id>: <none>
<image_id>: labeled-image

Observe que a imagem "dangling" (pendente) ainda mostra <none> para o repositório.

Você também pode incluir outros atributos, como a tag e o tamanho. Vamos formatar a saída para mostrar o repositório, a tag e o tamanho, separados por tabulações.

Execute o seguinte comando:

docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

Usar table no início da string de formatação cria uma saída semelhante a uma tabela com cabeçalhos.

Você deve ver uma saída semelhante a esta:

REPOSITORY          TAG                 SIZE
hello-world         latest              <size>
my-image            latest              <size>
<none>              <none>              <size>
labeled-image       latest              <size>

Você pode encontrar uma lista de placeholders (espaços reservados) disponíveis na documentação do Docker para o comando docker images. Alguns comuns incluem:

  • .ID: ID da imagem
  • .Repository: Nome do repositório da imagem
  • .Tag: Tag da imagem
  • .Created: Tempo em que a imagem foi criada
  • .Size: Tamanho da imagem
  • .Containers: Número de containers usando a imagem

Experimente com diferentes templates para ver como você pode personalizar a saída. Por exemplo, para listar o ID da imagem e o tempo de criação:

docker images --format "{{.ID}} created at {{.Created}}"

Esta etapa conclui o laboratório sobre listagem e filtragem de imagens Docker. Você aprendeu como listar todas as imagens, filtrar por nome, tag, status "dangling" (pendente) e labels (rótulos), e formatar a saída usando templates personalizados.

Resumo

Neste laboratório, você aprendeu como usar o comando docker images para listar e filtrar imagens Docker. Você começou listando todas as imagens de nível superior em seu sistema. Em seguida, você praticou a listagem de imagens específicas por seus nomes e tags após baixar a imagem hello-world.

Você também explorou como filtrar imagens com base em seu status "dangling" (pendente) e por labels (rótulos) específicos. Por fim, você aprendeu como personalizar o formato de saída do comando docker images usando um template (modelo) personalizado, permitindo que você exiba apenas as informações necessárias.