Vagrant vs Docker: qual é o certo para você? (Pode ser os dois)
Publicados: 2023-01-26As equipes de DevOps estão sob pressão crescente para fornecer mais funcionalidades aos clientes rapidamente. Os provedores de nuvem oferecem uma solução por meio de plataformas escaláveis com excelentes integrações de CLI e API. Infelizmente, as interfaces expostas pelos provedores de nuvem podem ser incompatíveis. Mas algumas ferramentas nativas da nuvem ajudam as equipes de DevOps a criar soluções personalizadas para qualquer provedor de nuvem.
Duas dessas ferramentas são Vagrant e Docker. Entender o que eles fazem e como funcionam juntos é fundamental para aproveitar ao máximo seu ambiente de nuvem.
O Vagrant é uma ferramenta para criar e gerenciar ambientes de máquina virtual (VM) em um único fluxo de trabalho. Esteja você criando VMs locais para executar com hipervisores ou apenas VMs em nuvem, o Vagrant fornece um formato de configuração consistente, CLI único e provisionadores compartilhados para instalar software e alterar configurações.
O Docker fornece a capacidade de empacotar software e configuração de suporte em imagens que são executadas de forma consistente em várias plataformas. O Docker permite que as equipes de DevOps tenham confiança de que o software será executado em uma estação de trabalho local da mesma forma que é executado em uma plataforma de nuvem gerenciada.
Embora o Vagrant e o Docker compartilhem o objetivo de criar ambientes repetíveis, eles o fazem de maneiras diferentes, mas complementares. Este artigo explora como o Vagrant e o Docker atingem seus objetivos.
O que é Docker?
Docker é uma plataforma aberta para desenvolvimento, envio e execução de aplicativos. Ele permite que as equipes de DevOps empacotem software personalizado, aplicativos de suporte e bibliotecas, bem como instruções para configuração, rede, montagens de arquivos, verificações de integridade e scripts de inicialização em um artefato independente chamado imagem.
As imagens são executadas em um ambiente leve e isolado chamado contêiner. Ao contrário das VMs, que normalmente reservam quantidades fixas de memória e limitam estritamente o uso da CPU, os contêineres são muito mais elásticos e consomem apenas a memória e a CPU de que precisam.
Isso permite que muitos contêineres funcionem lado a lado com eficiência, reduzindo custos e aumentando a escala. No entanto, os contêineres não são considerados tão seguros quanto as VMs, o que significa que os contêineres não são uma solução ideal para executar código não confiável.
Por que usar o Docker (vs Vagrant)?
As equipes de DevOps normalmente usam o Docker para entregar e executar aplicativos da web, incluindo aplicativos nativos de nuvem que se integram a filas de mensagens ou são hospedados em plataformas de função como serviço (FaaS) que respondem a eventos e acionadores baseados em nuvem.
Plataformas como o Kubernetes se baseiam no Docker, permitindo que os contêineres sejam orquestrados em escala. Além disso, todo provedor de nuvem suporta a capacidade de executar contêineres Docker em suas ofertas de plataforma como serviço (PaaS). Agora é raro encontrar uma PaaS que não suporte o Docker.
O Docker também pode distribuir e executar ferramentas baseadas em CLI, com todas as ferramentas populares nativas da nuvem que oferecem imagens do Docker incorporando sua CLI.
Quais são os benefícios do Docker?
O Docker resolve um problema comum enfrentado pelos processos tradicionais de implantação de software, em que aplicativos personalizados podem exibir resultados diferentes quando executados na estação de trabalho local de um desenvolvedor e em um ambiente de produção. Essas diferenças geralmente são o resultado de desenvolvedores executando diferentes versões de linguagens de programação, tendo diferentes configurações para suportar aplicativos como servidores Web ou executando sistemas operacionais completamente diferentes do ambiente de produção. Essas diferenças levam a problemas de suporte alternando entre as equipes com comentários como: “Funciona na minha máquina”.
Como as imagens do Docker incluem o código para aplicativos personalizados, todos os aplicativos de suporte e bibliotecas, as imagens são executadas em contêineres que fornecem resultados mais consistentes, independentemente de onde são executadas.
As imagens do Docker são fáceis de distribuir usando registros como o Docker Hub, permitindo que as equipes de DevOps compartilhem imagens entre si rapidamente e implantem as imagens usando as várias plataformas de hospedagem. Por exemplo, você encontrará o Docker por trás do pacote de desenvolvimento DevKinsta WordPress da Kinsta.
Onde são necessárias pilhas de aplicativos mais complexos, como implantar um banco de dados junto com um aplicativo de back-end ou uma coleção de microsserviços relacionados, o Docker Compose oferece a capacidade de criar e vincular vários contêineres do Docker com um único comando. Todos os contêineres, configurações associadas e configurações de rede são definidas em um único arquivo YAML. O Docker Compose lê esse arquivo para criar e gerenciar vários contêineres como uma única unidade.
O Docker também possui suporte quase universal nos principais provedores de nuvem, o que significa que as equipes de DevOps têm muitas opções ao executar suas imagens do Docker na nuvem.
O que é Vagrant?
Por décadas, as VMs provaram ser uma solução confiável e segura para particionar e provisionar recursos de computação. As VMs continuam sendo os serviços mais populares expostos pelos provedores de nuvem e muitas soluções comerciais e de código aberto para equipes que procuram executar VMs no local.
No entanto, essa variedade representa um desafio para as equipes de DevOps. Cada solução expõe uma CLI e API diferentes para criar e gerenciar VMs, dificultando a manutenção da consistência entre ambientes de desenvolvimento locais e plataformas baseadas em nuvem.
O Vagrant oferece uma solução abstraindo as diferenças subjacentes entre as plataformas de VM, permitindo que as equipes de DevOps provisionem novas VMs com uma única CLI e uma sintaxe de configuração consistente. As equipes que adotam o Vagrant podem criar VMs consistentes, independentemente de serem executadas no local ou em um ambiente de nuvem e podem alternar facilmente entre os ambientes. O Vagrant tem uma infinidade de usos diferentes, inclusive como substituto do MAMP (macOS, Apache, MySQL/MariaDB e PHP, Perl ou Python).
Por que usar Vagrant (vs Docker)?
É possível inicializar uma VM e configurar manualmente o sistema operacional instalando manualmente o software e editando os arquivos de configuração. Isso não é o ideal, pois o processo não é repetível, o que significa que as VMs devem ser recriadas manualmente para diferentes sistemas operacionais e provedores. Também torna quase impossível entender como uma VM foi configurada posteriormente.
Uma prática melhor é automatizar o processo necessário para configurar uma máquina virtual. O Vagrant fornece uma ferramenta única para automatizar o processo de construção de VMs para muitos provedores. O Vagrant também fornece uma grande seleção de VMs de alta qualidade no Vagrant Cloud que as equipes de DevOps podem usar para iniciar suas próprias VMs.
Quais são os benefícios do Vagrant?
As equipes de DevOps que utilizam o Vagrant têm uma única ferramenta para aprender, independentemente de estarem criando VMs para plataformas locais, plataformas de nuvem ou ambas. Você pode ajustar facilmente os arquivos de configuração do Vagrant e executá-los novamente ou revisá-los posteriormente para entender como uma VM foi construída.
O Vagrant também permite que as equipes de DevOps migrem para a nuvem ou entre provedores sem redesenhar o processo que usam para criar VMs.
As VMs criadas pelo Vagrant fornecem um alto nível de isolamento, muitas vezes aproveitando o suporte de virtualização especializado integrado às CPUs modernas. Isso torna as VMs e as ferramentas que as criam, como o Vagrant, a melhor escolha onde a segurança e o isolamento são uma alta prioridade.
Muitas distribuições Linux, como Ubuntu e Fedora, também fornecem caixas Vagrant oficiais nas quais as equipes de DevOps podem criar. Isso reduz o tempo necessário para criar VMs personalizadas.
Vagrant vs Docker: um olhar mais atento
Tanto o Vagrant quanto o Docker tornam as equipes de DevOps mais eficientes, automatizando a construção, distribuição e execução de aplicativos de software.
O Docker atinge esse objetivo com um formato de empacotamento personalizado na forma de imagens e um ambiente de execução leve por meio de contêineres. Os contêineres são executados de forma consistente entre plataformas, dando às equipes de DevOps maior confiança de que seu software funciona conforme o esperado. O Docker é bem suportado pelas plataformas de nuvem PaaS e FaaS, permitindo que as equipes de DevOps escolham a melhor plataforma para suas necessidades.
Muitos contêineres podem coexistir em um único host, principalmente - mas não completamente - isolados uns dos outros enquanto compartilham o mesmo conjunto de recursos. Isso permite que os contêineres sejam dimensionados com eficiência.
O Vagrant atinge esse objetivo fornecendo um método consistente para construir VMs com provedores existentes. É a escolha ideal para equipes que já investiram em VMs, contando com seu alto nível de isolamento, segurança, controle e customização.
O Docker também fornece a melhor solução ao executar código confiável, minimizando os custos de computação. Os contêineres são razoavelmente isolados uns dos outros, mas incorrem em muito pouca sobrecarga. Isso significa que muitos contêineres podem ser executados simultaneamente em um sistema operacional compartilhado. As VMs fornecem a melhor solução quando as equipes precisam de altos níveis de isolamento e segurança ou exigem a capacidade de executar muitos sistemas operacionais diferentes lado a lado, com o Vagrant fornecendo uma solução conveniente para criar VMs de maneira automatizada e repetível.
Vagrant e Docker não são tecnologias mutuamente exclusivas e ambas as ferramentas podem ser usadas lado a lado. Por exemplo, as equipes de DevOps podem usar o Docker para desenvolver e executar aplicativos enquanto usam o Vagrant para recriar ambientes especializados para reproduzir problemas. O Docker pode até ser executado dentro de uma VM criada pelo Vagrant, talvez para testar novas versões do Docker ou testar ferramentas distribuídas como imagens do Docker em um ambiente isolado.
Resumo
As equipes de DevOps têm muitas opções ao criar, distribuir e executar aplicativos.
O Docker fornece um formato de imagem personalizado e um ambiente de execução de contêiner que permite o uso eficiente e em larga escala de recursos e é compatível com as plataformas PaaS e FaaS.
As VMs oferecem ambientes de execução seguros e isolados de muitos provedores de VM locais e em nuvem, com o Vagrant abstraindo muitas diferenças para fornecer uma única CLI e uma sintaxe de configuração consistente para instanciar VMs entre provedores.
Antes de começar a desenvolver seu próximo aplicativo, veja como o serviço de hospedagem de aplicativos da Kinsta pode aproveitar os Dockerfiles para gerenciar a implantação do seu código.