Vamos começar pelos fundamentos. Uma vez que você entende o básico o resto se torna nota de rodapé.
O que são containers?
Tudo começa com um conceito chamado containers. Container é uma tecnologia que nos permite isolar um software e todas as suas dependências. Dessa forma não precisamos nos preocupar com as configurações especificas do servidor que ele está rodando. Ele cria uma espécie de ambiente que não depende das configurações específicas do servidor onde ele será executado.
Imagine, por exemplo, uma máquina virtual rodando uma aplicação que requer o Node.js 8. Se o time decidir implantar no mesmo servidor outra aplicação que dependa do Node.js 16, existe o risco de a nova versão do Node.js comprometer o funcionamento da aplicação que utiliza a versão anterior, certo?
É exatamente nesse tipo de cenário que os containers vão brilhar. Essa capacidade de isolamento e portabilidade é o principal motivo para a rápida popularização dos containers.
Qual a diferença entre containers e máquinas virtuais (VM) ?
É comum confundir containers com máquinas virtuais (VMs). As VMs emulam um hardware completo, permitindo a execução de múltiplos sistemas operacionais em um único servidor físico. Isso gera um overhead, pois os recursos do servidor, como CPU, memória, placa de rede e armazenamento, precisam ser compartilhados entre as VMs. Além disso, o tempo de inicialização é maior, uma vez que o sistema operacional precisa ser carregado, para depois carregar as aplicações.
Já os containers utilizam o kernel do sistema operacional para isolar apenas a aplicação e suas dependências, sem necessidade de um sistema operacional completo. Em outros posts, vamos explorar como os namespaces e cgroups do Linux possibilitam essa abordagem.
Com essa diferença, os containers dispensam a maioria dos recursos exigidos por uma máquina virtual, tornando o consumo de recursos menor e o tempo de inicialização mais rápido, levando apenas alguns segundos. Enquanto as VMs virtualizam o hardware, os containers virtualizam o sistema operacional. Só essa abordagem já vai gerar um impacto gigante na escalabilidade horizontal para atender a demandas não previstas.
O que é Docker e containers?
Docker é a empresa que popularizou o uso de containers. Embora a tecnologia de containers já existisse antes, foi a Docker que simplificou o processo e tornou essa abordagem acessível. A empresa surge a partir de uma plataforma que facilita a criação, distribuição e execução de containers. Em seguida a Docker padronizou o formato de containers.
O principal diferencial do Docker foi proporcionar uma forma simples de lidar com containers, resolvendo problemas de compatibilidade entre ambientes de desenvolvimento, teste e produção. Arrisco a dizer que Docker é um Game Change na indústria de software. Existe sistemas antes do Docker e depois da Docker.
Gerenciadores de Containers
Naturalmente uma nova tecnologia, traz com ela novos desafio: Agora os servidores passaram a hospedar muito mais aplicações simultaneamente. Esse aumento no número de containers trouxe à tona a necessidade de soluções para gerenciar, orquestrar e monitorar essa quantidade de aplicações em execução em containers.
E é ai que novas ferramentas surgem para lidar com esse problema. Ferramentas como Docker Swarm, Kubernetes, Amazon ECS e Azure Container Apps. Todas com o objetivo de oferecer funcionalidades para coordenar e automatizar a gestão dos containers em larga escala.
Por que aprender Docker?
Se você está começando na área da TI, aprender Docker é algo que inevitavelmente vai se tornar necessário. A ferramenta se tornou um padrão no desenvolvimento de software. Docker é o que está no coração das práticas de DevOps e pipelines de CI/CD.
As empresas buscam profissionais e praticamente já não existe mais espaço para quem não conhece docker e container. Portante dominar Docker não é apenas um diferencial – é essencial para crescer na carreira.
Resumo
Em resumo, containers são tecnologias que isolam aplicações e suas dependências, garantindo consistência em diferentes ambientes e tornando o consumo de recursos mais eficiente. Docker é a empresa que popularizou essa abordagem, facilitando o uso de containers e padronizando o formato. Com a popularização dos containers, surgem ferramentas como Kubernetes para gerenciar e orquestrar essas aplicações em larga escala.