Tópicos
Introdução
Um container é um ambiente virtual, por norma bastante leve, que agrupa e isola um conjunto de processos e de recursos. O isolamento é feito ao nível do container.
Estes containers não requerem uma virtualização completa dos recursos físicos.
Containers em Linux
Cada container partilha o hardware e o kernel (e OS) com o Host.
Namespaces Os recursos do Host são particionados em recursos dedicados que são apenas acessíveis por um certo grupo de processos (debaixo do mesmo namespace). Por norma, um namespace compreende um container ou um conjunto de containers muito equivalentes.
Grupos de Controlo Limitam a quantidade de recursos por container.
SELinux Providencia segurança adicional em cima dos namespaces, fazendo com que um container não consiga, de nenhuma forma, comprometer o Host ou outros containers.
Faz uso, ainda, de políticos de controlo de acesso já conhecidas do Linux.
Docker
Possui diversos componentes: cliente, daemon, volumes, networks e registry.
Cliente
Componente utilizado pelos utilizadores para interagir com o Docker (daemon).
Expõe uma API com diversas capacidades, tais como: correr e manusear containers; manusear redes e volumes; visualizar logs e métricas, entre outros.
Daemon
Recebe pedidos vindos de clientes, através da API.
É responsável pela gestão interna das imagens, containers, volumes e networks existentes no Host.
Volumes
O estado interno dos containers é efémero, isto é, desaparece quando o container é removido.
Assim, se for necessário persistir estado, deverão ser utilizados volumes. Estes volumes consistem em porções do armazenamento do Host.
Network
Existem dois modos de redes em Docker.
Host
- Namespace de redes é partilhado com o Host
- Os serviços a correr são apresentados como se do Host, nativamente, tratassem
- Portas são partilhadas
Bridge
- O container é visto como outro nó físico (IP diferente, etc)
Registry
Repositório onde constam imagens de Docker.
Exemplo: Docker Hub, onde as imagens podem ser públicas.
Kubernetes
Esta ferramenta é capaz de automatizar o deployment, escalabilidade e gestão de vários containers Docker.
Possui algumas características, de “borla”, muito interessantes:
- Gestão de redes (service discovery e load balancing)
- Escalonamento de cargas de trabalho performante e com self-healing
Containers vs VMs
Containers são mais fáceis de testar e configurar. Possuem, também, uma utilização de recursos mais leve e, por consequência, uma melhor performance. Podem ser facilmente deployed tanto em máquinas físicas como virtuais.
No entanto, containers têm um nível de isolamento e segurança inferior (OS e kernel são partilhados).