Docker
Docker surgiu em 2013 inicialmente como uma camada sobre a funcionalidade do Kernel do Linux chamada LXC (Linux Containers), que permite a execução de processos de maneira isolada e restrita. Posteriormente trocaram a LXC pela libcontainer, permitindo seu uso além do Linux.
A tecnologia de containers possibilita rodar processos, serviços e aplicativos de maneira isolada, ou seja, um não enxerga o outro, e de forma limitada, no qual cada um possui um limite dos recursos de hardware disponíveis como quantidade de memória e espaço em disco.
Containers são mais “leves” do que máquinas virtuais pois não precisam simular o hardware e não precisam carregar um sistema operacional completo antes de executar uma aplicação. Utilizam como base Imagens Docker que são arquivos compactados contendo um sistema de arquivos e a aplicação a ser executada.
Basicamente uma aplicação é empacotada na forma de uma Imagem Docker e cada instância em execução é chamada de container.
Kubernetes
Orquestração de containers é a capacidade de provisionar automaticamente a infraestrutura necessária para atender às solicitações das aplicações web por meio de de containers do Docker.
Kubernetes, também conhecido como k8s, é uma ferramenta open source criada pela Google e distribuída em 2014 para automatização de deploys e gerenciamento de containers. Com ele é possível criar um cluster de containers em clouds privadas ou públicas (AWS, Google Cloud, etc.).
Algumas vantagens do Kubernetes:
- Container sempre online: verifica a saúde da aplicação e recria o container se identificar alguma anomalia.
- Autoscaling: obtém métricas e verifica se há necessidade de crescer horizontalmente.
- Descoberta de Serviço: containers recebem um endereço IP e conseguem enxergar um ao outro por meio de uma rede virtual.
- Crescimento Horizontal: com um simples comando é possível aumentar o número de containers da mesma imagem.
- Balanceador de Carga: utiliza load balancer para dividir a carga de requisições recebidas entre os containers.
- Rollbacks automáticos: se algo der errado, Kubernetes volta automaticamente à versão anterior da aplicação.
- Execução em Batch: permite rodar comandos em batch como containers.
Openshift
Openshift é uma plataforma desenvolvida pela Red Hat que utiliza como base o Kubernetes. Atualmente há 3 distribuições:
- Openshift Origin: versão open source utilizada para quem deseja criar um cluster sem precisar pagar licenças.
- Openshift Enterprise: versão comercializada pela Red Hat baseada no Origin e suportada oficialmente pelo Red Hat Linux.
- Openshift Online: plataforma de serviço fornecida pela Red Hat concorrente do Heroku e Google App Engine.
Mas quais são as vantagens e diferenças entre o Openshift e Kubernetes? O Openshift introduziu algumas camadas que o tornam mais amigável e fácil de integrar com soluções de softwares utilizadas no mundo corporativo. Algumas das vantagens do Openshift em relação ao Kubernetes:
- Source to Image (S2I) e Build Config: capacidade de obter o código fonte da aplicação a partir de um repositório Git e criar uma Imagem Docker pronta para uso. Um Build é disparado quando há uma mudança no código do repositório através de um Webhook.
- Integrated Docker Registry: possui um Docker Registry privado utilizado para armazenar as Imagens Docker criadas pelo processo de Source to Image.
- Image Stream: o Openshift faz tracking das Imagens Docker e recria os containers quando detecta uma mudança na Imagem.
- Deployment Config: um macro serviço que detecta quando há uma alteração na configuração, por exemplo uma mudança no valor de uma variável de ambiente, e recria os containers.
- Policies: políticas de autorização para usuários, permitindo por exemplo que um determinado usuário consiga apenas visualizar logs dos containers.
- Webconsole: uma interface web amigável que possibilita escalar containers, visualizar logs de aplicações e containers e alterar configurações de pods, services, routes, deployments, etc.