Quando se trata de tecnologia de contêineres, dois nomes surgem como líderes de código aberto: Kubernetes e Docker. E, embora sejam tecnologias fundamentalmente diferentes que auxiliam os usuários no gerenciamento de contêineres, eles são complementares entre si e podem ser poderosas quando combinadas. Nesse sentido, optar por usar Kubernetes ou Docker não é uma questão de decidir qual opção é melhor; na realidade, eles não estão competindo entre si e podem ser usados em conjunto. Portanto, para a questão de saber se Kubernetes ou Docker é a melhor escolha, a resposta é: nenhum dos dois.
O fato de Kubernetes e Docker serem tecnologias de contêineres complementares esclarece outra pergunta frequente: o Kubernetes está substituindo o Docker?
Resumindo, não. Como o Kubernetes não é uma tecnologia concorrente, essa pergunta provavelmente deriva da notícia de 2021 de que o Kubernetes não ofereceria mais compatibilidade com o Docker como uma opção de tempo de execução de contêiner (ou seja, um componente de contêiner que se comunica com o kernel do sistema operacional (SO) em todo o o processo de conteinerização). No entanto, o Kubernetes e o Docker ainda são compatíveis e oferecem benefícios claros quando usados juntos, como vamos Explore em detalhes posteriormente nesta postagem. Primeiro, é importante começar com a tecnologia fundamental que une o Kubernetes e o Docker: os contêineres.
Um contêiner é uma unidade executável de software que empacota o código da aplicação com suas dependências, permitindo que ele seja executado em qualquer infraestrutura de TI. Um contêiner fica sozinho; ele é separado do sistema operacional host, geralmente Linux, o que o torna portátil em ambientes de TI.
Uma maneira de entender o conceito de contêiner é compará-lo a uma máquina virtual (VM). Ambos são baseados em tecnologias de virtualização, mas enquanto um contêiner virtualiza um sistema operacional, uma VM aproveita um hipervisor (uma camada de software leve entre a VM e o hardware de um computador) para virtualizar o hardware físico.
Com a virtualização tradicional, cada VM contém uma cópia completa de um sistema operacional convidado (SO), uma cópia virtual do hardware necessário para executar o SO e uma aplicação (e suas bibliotecas e dependências associadas). Um contêiner, por outro lado, inclui apenas uma aplicação e suas bibliotecas e dependências. A ausência de um host convidado reduz significativamente o tamanho de um contêiner, tornando-o leve, rápido e portátil. Além disso, um contêiner usa automaticamente as configurações de DNS do host.
Os engenheiros podem usar contêineres para desenvolver rapidamente aplicações que são executadas de forma consistente em um grande número de sistemas distribuídos e ambientes de plataforma cruzada. A portabilidade dos contêineres elimina muitos dos conflitos decorrentes das diferenças de ferramentas e software entre equipes funcionais.
Isso os torna particularmente adequados para fluxos de trabalho de DevOps, facilitando o caminho para desenvolvedores e operações de TI trabalharem juntos em todos os ambientes. Pequenos e leves, os contêineres também são ideais para arquiteturas de microsserviços, nas quais as aplicações são compostas de serviços menores e fracamente acoplados. E a containerização é frequentemente o primeiro passo para modernizar aplicações locais e integrá-las a serviços de nuvem.
O Docker é uma plataforma de conteinerização de código aberto. Basicamente, é um toolkit que torna mais fácil, seguro e rápido para os desenvolvedores construir, implementar e gerenciar contêineres. Esse toolkit também é conhecido como containerd.
Embora tenha começado como um projeto de código aberto, hoje também se refere à Docker, Inc., a empresa que produz o produto comercial Docker. Atualmente, é a ferramenta mais popular para criar contêineres, independentemente de os desenvolvedores usarem Windows, Linux ou MacOS.
Na verdade, as tecnologias de contêineres estavam disponíveis por décadas antes do lançamento do Docker em 2013. No início, os contêineres Linux (ou LXC) eram os mais predominantes. O Docker foi desenvolvido no LXC, mas a tecnologia personalizada do Docker rapidamente ultrapassou o LXC para se tornar a plataforma de conteinerização mais popular.
Entre os principais atributos do Docker está sua portabilidade. Os contêineres do Docker podem ser executados em qualquer ambiente de desktop, data center ou nuvem. Apenas um processo pode ser executado em cada contêiner, de modo que uma aplicação possa ser executada continuamente enquanto uma parte dela estiver passando por uma atualização ou sendo reparada.
Algumas das ferramentas e terminologia comumente usadas com o Docker incluem o seguinte:
Agora vamos revisitar por que o Kubernetes parou de oferecer compatibilidade com o Docker como um tempo de execução de contêiner. Como mencionado no início desta seção, o Docker é um containerd e não um tempo de execução de contêiner. Isso significa que o Docker fica sobre um tempo de execução de contêiner subjacente para fornecer aos usuários funcionalidades e ferramentas via uma interface do usuário. Para ter compatibilidade com o Docker como um tempo de execução, o Kubernetes teve que ter compatibilidade e implementar um tempo de execução separado conhecido como Docker Shim, que essencialmente ficava entre as duas tecnologias e ajudava na comunicação.
Isso foi feito em um período em que não havia muitos tempos de execução de contêineres disponíveis. No entanto, agora que existem (com a CRI-O. um exemplo de um desses tempos de execução de contêineres), o Kubernetes pode fornecer aos usuários muitas opções de tempo de execução de contêiner, muitas das quais usam a Container Runtime Interface (CRI) padrão, uma maneira para o Kubernetes e o tempo de execução de contêineres para se comunicarem de maneira confiável sem uma camada no meio atuando como intermediária.
No entanto, embora o Kubernetes não tenha mais compatibilidade especial com o Docker como um tempo de execução, ele ainda pode executar e gerenciar contêineres construídos com a Open Container Initiative (OCI), o formato de imagem do próprio Docker que permite usar Dockerfiles e construir imagens do Docker. Em outras palavras, o Dockers ainda tem muito a oferecer no ecossistema do Kubernetes.
A plataforma de conteinerização Docker oferece todos os benefícios dos contêineres mencionados anteriormente, incluindo o seguinte:
Outras funcionalidades das APIs do Docker incluem a capacidade de rastrear e reverter automaticamente imagens de contêineres, usar contêineres existentes como imagens base para construir novos contêineres e construir contêineres com base no código-fonte da aplicação. O Docker é apoiado por uma comunidade de desenvolvedores vibrante que compartilha milhares de contêineres em toda a internet via Docker Hub.
Mas, enquanto o Docker se dá bem com aplicações menores, aplicações corporativas grandes podem envolver um grande número de contêineres (às vezes centenas ou até milhares), o que se torna insuportável para as equipes de TI encarregadas de gerenciá-los. É aí que entra a orquestração de contêineres . O Docker tem sua própria ferramenta de orquestração, o Docker Swarm, mas de longe a opção mais popular e robusta é o Kubernetes.
O Docker tem vários comandos utilizados na criação e execução de contêineres:
O Kubernetes é uma plataforma de código aberto de orquestração de contêineres para programar e automatizar a implementação, o gerenciamento e o dimensionamento de aplicações conteinerizadas. Os contêineres operam em uma arquitetura de múltiplos contêineres chamada de "cluster". Um cluster do Kubernetes inclui um contêiner designado como um plano de controle que agenda cargas de trabalho para o restante dos contêineres (ou nós) no cluster.
O nó mestre determina onde hospedar as aplicações (ou contêineres do Docker), decide como reuni-las e gerencia sua orquestração. Ao agrupar contêineres que compõem uma aplicação em clusters, o Kubernetes facilita a descoberta de serviços e permite o gerenciamento de grandes volumes de contêineres ao longo de seus ciclos de vida.
O Google lançou o Kubernetes como um projeto de código aberto em 2014. Agora, ele é gerenciado por uma fundação de software de código aberto chamada Cloud Native Computing Foundation (CNCF). Projetado para orquestração de contêineres em ambientes de produção, o Kubernetes é popular, em parte, devido à sua funcionalidade robusta, a uma comunidade ativa de código aberto com milhares de colaboradores e suporte e portabilidade nos principais provedores de nuvem (por exemplo, IBM Cloud, Google, Azure e AWS).
Embora o Kubernetes e o Docker sejam tecnologias distintas, eles são altamente complementares e formam uma combinação poderosa. O Docker fornece a parte de conteinerização, permitindo que os desenvolvedores empacotem facilmente as aplicações em contêineres pequenos e isolados por meio da linha de comando. Os desenvolvedores podem, então, executar essas aplicações em seu ambiente de TI, sem ter que se preocupar com problemas de compatibilidade. Se uma aplicação for executada em um único nó durante o teste, ela será executada em qualquer lugar.
Quando a demanda aumenta, o Kubernetes fornece orquestração de contêineres Docker, agendando-os e implementando-os automaticamente em ambientes de TI para garantir alta disponibilidade. Além de executar contêineres, o Kubernetes oferece os benefícios de balanceamento de carga, autocorreção e lançamentos e reversões automatizados. Além disso, ele tem uma interface gráfica para facilitar o uso.
Para empresas que preveem que escalarão sua infraestrutura no futuro, pode fazer sentido usar o Kubernetes desde o início. E para aquelas que já usam o Docker, o Kubernetes usa contêineres e cargas de trabalho existentes enquanto enfrenta as questões complexas envolvidas na mudança para escalar.
Versões posteriores do Docker têm integração integrada com o Kubernetes. Essa funcionalidade permite que as equipes de desenvolvimento automatizem e gerenciem de forma mais eficaz todas as aplicações em contêineres que o Docker as ajudou a construir.
No final das contas, é uma questão de qual combinação de ferramentas sua equipe precisa para atingir suas metas de negócios. Confira como começar a usar esses tutoriais do Kubernetes e explorar o IBM Cloud Kubernetes Service para saber mais.
Ganhe um badge por meio de tutoriais gratuitos de Kubernetes baseados em navegador com o IBM CloudLabs.