- Data Hackers Newsletter
- Posts
- Docker: o que é uma imagem?
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:
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.
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
Abra o Docker Desktop Dashboard
Selecione a visualização Images no menu de navegação à esquerda
Clique em Search images to run
No campo de busca, digite "welcome-to-docker"
Selecione a imagem
docker/welcome-to-docker
Passo 2: Baixar a imagem
Clique em Pull para baixar a imagem
Aguarde o download ser concluído
Passo 3: Explorar os detalhes da imagem
Na visualização Images, clique na imagem
docker/welcome-to-dockerA 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.