Docker: o que é uma imagem?

Entenda de uma vez por todas as imagens de container, e como os arquivos e as configurações são configurados

Se você já ouviu falar de containers Docker, provavelmente se perguntou: de onde vêm os arquivos e configurações que um container utiliza? Como esses ambientes são compartilhados entre desenvolvedores? A resposta está nas imagens de container.

Neste artigo, vamos explorar o conceito de imagens Docker, entender como elas funcionam e aprender a buscar e utilizar imagens para seus projetos.

O que é uma imagem Docker?

Uma imagem de container é um pacote padronizado que inclui todos os arquivos, binários, bibliotecas e configurações necessários para executar um container. Pense nela como um snapshot completo de um ambiente de software, pronto para ser executado em qualquer lugar.

Por exemplo:

  • Uma imagem do PostgreSQL incluirá os binários do banco de dados, arquivos de configuração e todas as dependências necessárias

  • Uma imagem de uma aplicação Python web conterá o runtime do Python, o código da sua aplicação e todas as suas dependências

Princípios fundamentais das imagens

Existem dois princípios importantes que você precisa conhecer sobre imagens Docker:

  1. Imagens são imutáveis: Uma vez criada, uma imagem não pode ser modificada. Você só pode criar uma nova imagem ou adicionar mudanças em cima dela.

  2. Imagens são compostas por camadas (layers): Cada camada representa um conjunto de mudanças no sistema de arquivos que adiciona, remove ou modifica arquivos.

Esses dois princípios permitem que você estenda ou adicione funcionalidades a imagens existentes. Se você está desenvolvendo uma aplicação Python, pode começar a partir da imagem oficial do Python e adicionar camadas extras para instalar as dependências da sua aplicação e adicionar seu código. Isso permite que você foque na sua aplicação, ao invés de se preocupar com a instalação e configuração do Python.

Onde encontrar imagens Docker?

O Docker Hub é o marketplace global padrão para armazenar e distribuir imagens. Com mais de 100.000 imagens criadas por desenvolvedores, você pode buscar e executar essas imagens localmente através do Docker Desktop.

Docker Trusted Content

O Docker Hub oferece uma variedade de conteúdo confiável gerenciado e endossado pelo Docker, conhecido como Docker Trusted Content. Essas imagens fornecem serviços totalmente gerenciados ou ótimos pontos de partida para criar suas próprias imagens:

Tipo de Imagem

Descrição

Docker Official Images

Conjunto curado de repositórios Docker que servem como ponto de partida para a maioria dos usuários. São algumas das imagens mais seguras do Docker Hub.

Docker Hardened Images

Imagens mínimas, seguras e prontas para produção, com CVEs praticamente zero. Projetadas para reduzir a superfície de ataque e simplificar a conformidade. Gratuitas e open source sob Apache 2.0.

Docker Verified Publishers

Imagens de alta qualidade de editores comerciais verificados pelo Docker.

Docker-Sponsored Open Source

Imagens publicadas e mantidas por projetos open source patrocinados pelo Docker.

Por exemplo, Redis e Memcached são imagens oficiais prontas para uso. Você pode baixar essas imagens e ter esses serviços funcionando em questão de segundos. Também existem imagens base, como a imagem do Node.js, que você pode usar como ponto de partida e adicionar seus próprios arquivos e configurações.

Guia prático: buscando e baixando imagens

Opção 1: Usando a interface gráfica do Docker Desktop

Passo 1: Buscar uma imagem

  1. Abra o Docker Desktop Dashboard

  2. Selecione a visualização Images no menu de navegação à esquerda

  3. Clique em Search images to run

  4. No campo de busca, digite "welcome-to-docker"

  5. Selecione a imagem docker/welcome-to-docker

Passo 2: Baixar a imagem

  1. Clique em Pull para baixar a imagem

  2. Aguarde o download ser concluído

Passo 3: Explorar os detalhes da imagem

  1. Na visualização Images, clique na imagem docker/welcome-to-docker

  2. A página de detalhes mostrará informações sobre:

    • Camadas da imagem

    • Pacotes e bibliotecas instalados

    • Vulnerabilidades descobertas

Opção 2: Usando a linha de comando (CLI)

Passo 1: Buscar uma imagem

docker search docker/welcome-to-docker

Você verá uma saída semelhante a:

NAME                       DESCRIPTION                                     STARS     OFFICIAL
docker/welcome-to-docker   Docker image for new users getting started w…   20

Passo 2: Baixar a imagem

docker pull docker/welcome-to-docker

A saída mostrará o progresso do download de cada camada:

Using default tag: latest
latest: Pulling from docker/welcome-to-docker
579b34f0a95b: Download complete
d11a451e6399: Download complete
1c2214f9937c: Download complete
b42a2f288f4d: Download complete
54b19e12c655: Download complete
1fb28e078240: Download complete
94be7e780731: Download complete
89578ce72c35: Download complete
Digest: sha256:eedaff45e3c78538087bdd9dc7afafac7e110061bbdd836af4104b10f10ab693
Status: Downloaded newer image for docker/welcome-to-docker:latest
docker.io/docker/welcome-to-docker:latest

Cada linha representa uma camada diferente da imagem sendo baixada. Lembre-se que cada camada é um conjunto de mudanças no sistema de arquivos e fornece funcionalidade à imagem.

Passo 3: Listar imagens baixadas

docker image ls

Saída esperada:

REPOSITORY                 TAG       IMAGE ID       CREATED        SIZE
docker/welcome-to-docker   latest    eedaff45e3c7   4 months ago   29.7MB

Nota sobre o tamanho da imagem: O tamanho mostrado aqui representa o tamanho descompactado da imagem, não o tamanho do download das camadas.

Passo 4: Visualizar as camadas da imagem

docker image history docker/welcome-to-docker

Este comando mostrará todas as camadas, seus tamanhos e o comando usado para criar cada camada:

IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
648f93a1ba7d   4 months ago   COPY /app/build /usr/share/nginx/html # buil…   1.6MB     buildkit.dockerfile.v0
<missing>      5 months ago   /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B
<missing>      5 months ago   /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B
<missing>      5 months ago   /bin/sh -c #(nop)  EXPOSE 80                    0B

Dica: Adicione a flag --no-trunc ao comando para ver o comando completo de cada camada, embora isso possa tornar a saída mais difícil de navegar.

Perguntas frequentes sobre imagens Docker

P: Qual a diferença entre uma imagem e um container?
R: Uma imagem é um pacote estático com todas as dependências e configurações, enquanto um container é uma instância em execução dessa imagem.

P: Posso modificar uma imagem existente?
R: Não diretamente. As imagens são imutáveis. Você pode criar uma nova imagem baseada em uma existente, adicionando novas camadas.

P: Por que as imagens são compostas por camadas?
R: As camadas permitem reutilização eficiente de recursos e otimizam o armazenamento e a transferência de imagens.

P: Como escolher a melhor imagem base para meu projeto?
R: Prefira imagens oficiais e de publishers verificados. Para produção, considere Docker Hardened Images que oferecem segurança reforçada.

Conclusão

Neste artigo, exploramos o conceito fundamental de imagens Docker, aprendemos como buscá-las e baixá-las, e entendemos sua estrutura em camadas. As imagens são a base para trabalhar com containers, e dominar esse conceito é essencial para qualquer desenvolvedor que trabalhe com Docker.

Agora que você compreende o básico sobre imagens, o próximo passo é aprender sobre registries e como distribuir suas próprias imagens. Continue sua jornada de aprendizado explorando os recursos adicionais mencionados neste artigo.

Recursos adicionais