O que são Containers
Containers são ambientes de execução leves que empacotam uma aplicação e todas as suas dependências. Eles executam processos isolados enquanto compartilham o kernel do sistema operacional host.
Vantagens dos containers: Leves, inicialização rápida, consistência de ambiente, boa eficiência de recursos
Diferenças em Relação às Máquinas Virtuais
Máquina Virtual (VM)
- Virtualiza completamente um SO guest em cima de um hypervisor
- Cada VM possui seu próprio kernel
- Leva minutos para iniciar
- Consome recursos na ordem de GB
Container
- Compartilha o kernel do SO host
- Isolamento a nível de processo
- Inicia em segundos
- Consome recursos na ordem de MB
Tecnologias do Kernel Linux
Os containers Docker utilizam duas funcionalidades principais do kernel Linux:
1. Namespaces
Funcionalidade que isola o escopo visível dos processos:
- PID namespace: Isola IDs de processo
- Network namespace: Isola a pilha de rede
- Mount namespace: Isola o sistema de arquivos
- UTS namespace: Isola o hostname
- User namespace: Isola IDs de usuário
2. cgroups (Control Groups)
Funcionalidade que limita os recursos que um processo pode usar:
- Limite de uso de CPU
- Limite de uso de memória
- Limite de I/O de disco
- Limite de largura de banda de rede
# Exemplo de limitação de recursos em container
docker run -d \
--cpus="1.5" \
--memory="512m" \
nginx
Estrutura das Imagens Docker
Imagens Docker são compostas por camadas somente leitura:
- Imagem base: SO (ubuntu, alpine, etc.)
- Dependências: Bibliotecas e runtimes
- Aplicação: Código a ser executado
Vantagem das camadas: Camadas comuns são compartilhadas entre múltiplas imagens, melhorando a eficiência de armazenamento.
Resumo
Containers Docker utilizam namespaces e cgroups do Linux para fornecer ambientes isolados leves e rápidos. Comparados às máquinas virtuais, têm overhead significativamente menor, sendo ideais para arquiteturas modernas de microsserviços.
← Voltar para a lista