Kubernetes vs Docker
Tags: beginners, devops, docker, kubernetes
Published: 2023-07-18 12:00:37

O uso dessas ferramentas não é uma equação ou um ou outro. Vamos detalhar sua origem, finalidade e como usar a ferramenta certa para o trabalho.

Tenha em mente estas definições:
- **Docker Engine é um "contêiner em tempo de execução".** Ele sabe como executar e gerenciar contêineres em um único host. Você deve controlar cada host separadamente.
- **Kubernetes (K8s) é uma "plataforma de orquestração de contêineres" de código aberto (também conhecido como orquestrador).** Ele sabe como gerenciar contêineres em muitos hosts.

___

## Origem do Docker
Em 2013, Solomon Hykes, CEO da Dotcloud, anunciou o projeto de código aberto Docker. Quando chegou a sua versão 1.0 em 2014.

O conceito de aplicativos em contêineres, é para isolar muitos aplicativos uns dos outros em um único servidor, existe há décadas. Não havia uma ferramenta fácil para usar focada no ciclo de vida completo do aplicativo, até o Docker.
![Traditional Servers vs Container Apps](https://raw.githubusercontent.com/diegodmitry/annotation/main/courses/Docker%20Mastery/images/TraditionalServers_vs_ContainerApps.png)
A equipe que criou o Docker pegou ferramentas complexas e as envolveu em uma interface de linha de comando (CLI) que meros mortais, como eu, poderia entender.
___
## O que o Docker Engine tem a ver com o Docker?
Logo após o lançamento do Docker, os fundadores descartaram o Dotcloud e criaram o Docker Inc.

Neste post, vamos focar no projeto original, agora chamado de Docker Engine. É sobre isso que as pessoas geralmente falam quando dizem “Docker” e ao qual vou me referir neste artigo.

Observe que o Docker também faz o [Docker Desktop](https://www.docker.com/products/docker-desktop/), um pacote de produtos para Windows e Mac. **O Docker Desktop é a maneira mais fácil de executar Docker e Kubernetes em sua máquina local para aplicativos de desenvolvimento e teste de servidor. Milhões de pessoas o usam todos os meses, e eu recomendo.**
___
## Principais inovações do Docker
1. **Easy Packing** -> O Docker pega seu aplicativo e todas as suas dependências de software – menos o kernel do sistema operacional e os drivers de hardware – e os agrupa em um conjunto de tarballs (semelhantes a arquivos zip). **O(s) tarball(s) do aplicativo e os metadados são conhecidos juntos como uma imagem de contêiner. Isso agora é considerado a maneira moderna de empacotar aplicativos no servidor.**

2. **Fácil execução do aplicativo** -> O Docker executa cada contêiner em um sistema de arquivos isolado. Cada contêiner obtém sua própria rede e recursos.

3. **Fácil distribuição de aplicativos** -> O Docker criou a ideia de um “registro de imagem de contêiner”, que permite armazenar imagens em um servidor HTTP/S e enviá-las/baixá-las tão facilmente quanto um git commit. O registro mais popular é o [Docker Hub](https://hub.docker.com/) e você pode encontrar muitos projetos de código aberto com imagens oficiais.
___
## Por que precisamos do Kubernetes?
Você descobrirá que, assim que começar a usar contêineres, desejará usá-los em todos os lugares - e, depois de ter mais do que alguns servidores, começará a desejar uma maneira mais fácil de executar vários contêineres relacionados para seus aplicativos.

Com o Docker, você ainda precisa configurar redes manualmente entre servidores, incluindo políticas de segurança, DNS, armazenamento, balanceadores de carga, backups, monitoramento e muito mais. Quando se trata de dezenas de contêineres relacionados, isso cria tanto trabalho (se não mais) quanto antes dos aplicativos em contêineres.

Esse problema de vários servidores é o que os fundadores do Kubernetes queriam resolver. Eles sabiam que, para tornar os sistemas de contêineres de produção tão fáceis quanto o Docker para uma única máquina, eles precisavam abordar o hardware subjacente e os recursos de rede. **O Kubernetes é um sistema de cluster multiservidor de código aberto. Ele orquestra todas as ferramentas necessárias para uma solução do mundo real que hospeda dezenas, centenas ou até milhares de aplicativos.**

**Assim como o Kubernetes é para um grupo de servidores, o Docker é para um único servidor.** É um conjunto de programas e APIs que controlam muitos Docker Engines a partir de uma CLI.

**O principal trabalho do Kubernetes é dizer ao Docker o que fazer, mas agora ele fornece um número crescente de tarefas relacionadas.** Outros recursos integrados incluem verificações de integridade do contêiner, substituição automática de aplicativos com falha, automatização de configurações de web proxy, gerenciamento de rede, políticas de segurança e até mesmo armazenamento externo de provisionamento automático.
![Traditional Servers vs Container Apps](https://github.com/diegodmitry/annotation/blob/main/courses/Docker%20Mastery/images/docker-vs-kubernetes.png?raw=true)
___
## Using Docker with Kubernetes
Agora que você sabe de onde vêm essas ferramentas e quais problemas elas resolvem, a pergunta é: você deve usá-las?

Se você só precisa controlar contêineres em uma única máquina, o Docker é a melhor escolha. Mantenha-o simples para começar e você poderá se tornar um orquestrador mais tarde. Se você precisar executar vários contêineres para seus aplicativos, talvez seja hora de considerar o Kubernetes.

**Lembre-se, as ferramentas não são o objetivo final.** Independentemente de você escolher Docker, Kubernetes ou servidores em nuvem, lembre-se de que a ferramenta não é o objetivo final. Sempre tenha em mente os objetivos de devops na sua empresa e tente não se distrair com o apelo “brilhante” de ferramentas avançadas, apenas para usar novas tecnologias.