Qual é a diferença entre o Docker e o Kubernetes ou k8s? Costumo dizer que o Kubernetes não se compara ao Docker mas sim ao Docker Swarm por ambos serem gerenciadores de containers, enquanto o Docker fica mais próximo de um container runtime. Vamos nesse artigo esclarecer a diferença entre eles e emitir minha opinião sobre o uso prático para dos dias de hoje.
Docker
O Docker é container runtime mais popular do mercado. É verdade que há concorrentes no momento atual que surgiram mas não conseguiram destronar esse gigante. O própósito do Docker é isolar um processo na memória do computador. Desse modo ele pode ser utilizado como sendo um sistema operacional em particular. Isso não é novidade mas com o Docker ela ganhou uma roupagem que tornou tudo muito fácil para adoção em massa.
Após instalar o Docker no seu Linux ou mesmo no Windows é possível instalar com muita facilidade ferramentas como RabbitMQ, SonarQube, Ningx, entre outros, apenas utilizando imagens prontas. Para tal há o docker hub: uma rede social de imagens de container.
Um desenvolvedor pode, por exemplo, programar em javascript com a plataforma NodeJS sem te-la efetivamente instalada em seu computador, tendo-a apenas em container. Isso pode ser muito prático quando se trabalha com projetos diferentes com versões diferentes. Ou mesmo quando não quer poluir seu computador com instalação de várias tecnologias diretamente nele.
Já um profissional de operações pode se valer da praticidade de construir ambientes completos para lidar com situações que poderiam exigir muito esforço. Use o docker-compose nesses cenários. Imagine, por exemplo, uma aplicação Angular, um backend escrito em Go (Golang) e um Mysql: é possível empacotar toda essa estrutura em um docker-compose e subir todo o ambiente com apenas uma linha de comando (que se vale de um arquivo docker-compose.yaml que dá as instruções necessárias).
Outra aplicação interessante para o Docker é na criação automática de imagens no processo de build em uma esteira (ou pipeline) de CI/CD. Imagine uma aplicação em .NET Core que precisa passar por testes unitários, testes de carga, análise estática de segurança (SAST) ou dinâmica (DAST). É possível definir que na esteira uma imagem seja gerada após todas as análises indicadas acima.
Docker Swarm
O Docker é , sem dúvidas, o mais popular sistema de gerenciamento de containers que existe. A Docker Inc. possui produtos que auxiliam no ciclo de vida dos contêineres como o Docker Swarm. Ele é a ferramenta responsável pela orquestração dos contêineres em ambiente de produção. Entenda que isso é garantir que o ciclo de vida dos contêineres seja gerenciado. Ou seja, a criação, atualização, deploy, escalabilidade, configuração e afins dos contêineres ocorram conforme as expectativas.
Imagine, por exemplo, a seguinte necessidade: uma aplicação deve estar em 5 containers ao mesmo tempo (se um cair, os outros estarão no ar), os containers devem estar em 5 computadores diferenetes pelo mesmo motivo. A aplicação deve possuir senhas e precisam ter uma estrutura especializada para lidar com essas secrets. E por fim a aplicação guarda arquivos. Por conta disso volumes de disco precisam ser gerenciados suportá-los. É para esse tipo de propósito de o Docker Swarm existe.
Kubernetes
O Kubernetes conceitualmente pode concorrer com o Docker Swarm mas ele tem uma quantidade muito maior de capacidades que, normalmente, tiram o Docker Swarm do páreo. O ponto mais importante para se entender a diferença entre o Docker (Docker comum, sem ser o Docker Swarm) para o Kubernetes é que, na verdade, o Kubernetes não é um runtime: ou seja, para funcionar ele precisa de um container runtime. Na prática é possível instalar o Docker no Kubernetes para a execução dos containers. Entretanto as empresas brigaram e hoje a Kubernetes não recomenda mais o uso do Docker como runtime, mas pode, em alguns casos, até funcionar.
Com o Kubernetes é possível, por exemplo, utilizar uma tecnologia chamada HPA (horizontal pod autoscaler), capaz de aumentar ou reduzir a quantidade de containers dinâmicamente de acordo com CPU, memória e afins. Além disso há uma conjunto enorme de plugins para o Kubernetes, como o Keda, por exemplo, que oferece uma capacidade semelhante ao HPA mas com sensibilidade ao eventos de programação internos da aplicação hospedada.
Conclusão
O Docker é excelente para o seu ambiente de desenvolvimento local ou mesmo para o time de operações fazer experimentos, rodar pequenos testes e afins. O Docker Swarm não tem muito uso no mercado, mas pode ser adequado para ambientes produtivos que não exigem grande escala. Já o Kubernetes é adequado para ambientes médios e de grande escala. Pessoalmente prefico o uso de serviços gerenciados dos grandes players de nuvem (AKS, EKS, GKE e outros) que reduzem o esforço, uma vez que a gestão do Kubernetes é a mais complexa.
Ele atua/atuou como Dev Full Stack C# .NET / Angular / Kubernetes e afins. Ele possui certificações Microsoft MCTS (6x), MCPD em Web, ITIL v3 e CKAD (Kubernetes) . Thiago é apaixonado por tecnologia, entusiasta de TI desde a infância bem como amante de aprendizado contínuo.