Introdução
Este tutorial abrangente explora os fundamentos das imagens Docker, fornecendo a desenvolvedores e administradores de sistemas um conhecimento aprofundado sobre a criação de imagens, estrutura e técnicas de gestão. Compreendendo os fundamentos das imagens Docker, os profissionais podem otimizar o implantação de containers e melhorar os fluxos de trabalho de desenvolvimento de aplicações.
Fundamentos de Imagens Docker
Compreendendo Imagens Docker
Imagens Docker são componentes fundamentais na tecnologia de containers, servindo como modelos de leitura-somente que contêm tudo o que é necessário para executar uma aplicação. Estas imagens incluem o código da aplicação, o tempo de execução, bibliotecas, variáveis de ambiente e ficheiros de configuração.
Estrutura e Camadas da Imagem
Imagens Docker são construídas usando uma arquitetura em camadas, o que permite um armazenamento e transferência eficientes. Cada camada representa um conjunto de alterações no sistema de ficheiros.
graph TD
A[Camada Base da Imagem] --> B[Camada da Aplicação]
B --> C[Camada de Configuração]
C --> D[Camada de Tempo de Execução]
Componentes Principais da Imagem
| Componente | Descrição | Finalidade |
|---|---|---|
| Imagem Base | Sistema operativo fundamental | Fornece bibliotecas de sistema essenciais |
| Ficheiros da Aplicação | Código fonte e dependências | Define o conteúdo da aplicação |
| Metadados | Configuração da imagem | Controlam o arranque do container |
Criando uma Imagem Docker: Exemplo Prático
Aqui está um Dockerfile completo que demonstra a criação de uma imagem no Ubuntu 22.04:
## Utilizar a imagem base oficial do Ubuntu
FROM ubuntu:22.04
## Definir o diretório de trabalho
WORKDIR /app
## Atualizar os pacotes do sistema
RUN apt-get update && apt-get install -y \
python3 \
python3-pip
## Copiar os ficheiros da aplicação
COPY . /app
## Instalar dependências
RUN pip3 install -r requirements.txt
## Definir o comando de arranque
CMD ["python3", "app.py"]
Mecanismo de Camadas da Imagem
Ao construir imagens, o Docker cria camadas intermediárias para cada instrução. Esta abordagem permite:
- Armazenamento eficiente
- Tempos de construção mais rápidos
- Gestão de versões simplificada
Identificação da Imagem
Imagens Docker são identificadas de forma única por:
- Nome do repositório
- Tag
- ID da imagem (hash)
Exemplo: ubuntu:22.04 representa uma versão específica da imagem Ubuntu.
Técnicas de Gestão de Imagens
Listagem e Inspeção de Imagens Docker
O Docker fornece comandos abrangentes para gerir e analisar imagens de forma eficaz em sistemas Ubuntu 22.04.
Listando Imagens
## Listar todas as imagens locais
docker images
## Listar imagens com um formato específico
docker images --format "{{.Repository}}: {{.Tag}}"
Estratégias de Remoção de Imagens
graph TD
A[Remoção de Imagem] --> B[Remover Imagem Única]
A --> C[Remover Imagens Não Utilizadas]
A --> D[Remover Todas as Imagens Não Utilizadas]
Removendo Imagens Específicas
## Remover imagem específica
docker rmi ubuntu:22.04
## Forçar a remoção de imagem com containers em execução
docker rmi -f image_name
Técnicas de Limpeza de Imagens
| Comando | Finalidade | Âmbito |
|---|---|---|
docker image prune |
Remover imagens órfãs | Imagens não utilizadas |
docker image prune -a |
Remover todas as imagens não utilizadas | Todas as imagens sem tags |
docker system prune |
Remover dados não utilizados | Imagens, containers, redes |
Gestão Avançada de Imagens
## Remover imagens com mais de 24 horas
docker image prune -a --filter "until=24h"
## Obter informações detalhadas sobre a imagem
docker inspect ubuntu:22.04
Otimização do Tamanho da Imagem
A gestão eficiente de imagens envolve a redução do tamanho da imagem através de:
- Minimização do número de camadas
- Utilização de builds em várias etapas
- Seleção de imagens base leves
Etiquetagem e Versão de Imagens
## Etiquetar uma imagem
docker tag source_image:tag new_image:version
## Empurrar a imagem para o registo
docker push repository/image:tag
Melhores Práticas para Imagens Docker
Estratégias de Otimização de Dockerfile
A criação de imagens Docker requer uma consideração cuidadosa do desempenho, segurança e manutenibilidade.
graph TD
A[Melhores Práticas para Imagens] --> B[Minimizar Camadas]
A --> C[Utilizar Builds em Múltiplas Etapas]
A --> D[Implementar Medidas de Segurança]
Construção Eficiente de Dockerfile
## Estrutura recomendada de Dockerfile
FROM ubuntu:22.04
## Utilizar um utilizador específico em vez de root
RUN groupadd -r appuser && useradd -r -g appuser appuser
## Definir o diretório de trabalho
WORKDIR /application
## Copiar apenas os ficheiros necessários
COPY --chown=appuser:appuser ./src /application
## Instalar dependências mínimas
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
python3 \
&& rm -rf /var/lib/apt/lists/*
## Mudar para o utilizador não-root
USER appuser
## Definir parâmetros de tempo de execução
EXPOSE 8080
CMD ["python3", "app.py"]
Considerações de Segurança da Imagem
| Prática | Descrição | Impacto |
|---|---|---|
| Execução sem Root | Executar containers como utilizador não-root | Reduz vulnerabilidades de segurança |
| Imagem Base Mínima | Utilizar variantes Alpine ou slim | Diminui a superfície de ataque |
| Análise de Dependências | Integrar verificações de vulnerabilidades | Previne potenciais explorações |
Técnicas de Versão de Imagens
## Abordagem de versão semântica
docker build -t myapp:1.0.0 .
docker build -t myapp:latest .
## Etiquetagem com o hash do commit git
docker build -t myapp:$(git rev-parse --short HEAD) .
Otimização de Desempenho
Exemplo de Build em Múltiplas Etapas
## Fase de construção
FROM golang:1.17 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
## Fase de produção
FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]
Gestão de Cache e Camadas
Otimize as camadas da imagem Docker:
- Ordenando as instruções estrategicamente
- Aproveitando o cache de construção
- Minimizando cópias desnecessárias de ficheiros
Redução do Tamanho da Imagem
## Analisar o tamanho da imagem
docker history myimage
docker images --format "{{.Repository}}:{{.Tag}}: {{.Size}}"
Resumo
Imagens Docker são componentes cruciais da tecnologia de contentores, representando modelos de leitura-somente que encapsulam ambientes de aplicação. Compreendendo as camadas de imagem, os processos de criação e as técnicas de gestão, os desenvolvedores podem construir, implantar e manter aplicações em contentores de forma eficiente em diferentes ambientes de computação.



