Docker vs Vagrant

Docker vs Vagrant

As equipes de desenvolvimento e operações estão lidando com a complexidade dos ambientes de software desde o início. É um problema comum em que o código de trabalho em um ambiente não funciona em outro. Docker e Vagrant ajudam a criar ambientes de desenvolvimento previsíveis e repetíveis. No entanto, o Docker usa a tecnologia de contêineres enquanto o Vagrant usa máquinas virtuais para atingir esse objetivo. Compreender os pontos fortes e fracos do Docker e Vagrant ajudará os desenvolvedores a misturar e combinar essas ferramentas para alcançar os resultados desejados. Vamos começar com as tecnologias subjacentes primeiro.

Máquinas virtuais

Uma máquina virtual (VM) emula um computador físico. Ele vem com seu próprio sistema operacional completo e alocação de recursos. A máquina host fornece os recursos físicos necessários, mas o ambiente virtualizado funciona como uma máquina independente com seus próprios adaptadores de BIOS, CPU, armazenamento e rede. Embora o VMware hoje seja mais famoso pela moderna tecnologia VM, a ideia virtual da máquina existe há muito tempo. Em 1965, o IBM Yorktown Research Center precisava de uma maneira de medir a eficácia de diferentes idéias de ciência da computação. A equipe de pesquisa queria alternar entre os recursos e medir os resultados. A equipe desenvolveu um esquema para dividir uma única máquina em partições menores. As partições menores gerenciariam seus próprios recursos. Eles seriam pequenas máquinas virtuais. A ideia da VM foi bem -sucedida. A IBM começou a fabricar sistemas operacionais com base em máquinas virtuais. IBM System 370 (S/370) e IBM System 390 (S/390), ambos os sistemas baseados em IBM VM/ESA, tornaram -se populares entre empresas e universidades porque permitiram que as instituições permitiram que seus usuários compartilhassem recursos de computação sem afetar os ambientes uns dos outros. A idéia também ajudou a criar o sistema operacional UNIX e a linguagem de programação Java.

Máquinas virtuais modernas são executadas em hipervisores. Os hipervisores são o software, firmware ou hardware responsável pela criação e execução de VMs. Existem muitos hipervisores disponíveis no mercado. KVM, Red Hat Enterprise Virtualization (RHEV), Xenserver, Microsoft Hyper-V e VMware vSphere / Esxi são os players proeminentes. Hoje, as máquinas virtuais estimularam o crescimento da computação em nuvem. Amazon AWS, Microsoft Azure, Google Cloud, Digital Ocean e outras empresas em nuvem dependem fortemente da tecnologia de virtualização.

Containers

Os contêineres criam virtualização no nível do sistema operacional. Eles funcionam como um pacote de software executável que isola os aplicativos do ambiente circundante. Dentro do pacote, um contêiner possui as propriedades necessárias como código, tempo de execução, bibliotecas de sistemas e ferramentas para manter o aplicativo separado da influência externa. Ele é executado no sistema operacional da máquina host. Os contêineres compartilham bibliotecas e binários quando possível e separa apenas os recursos absolutamente necessários.

Em 1979, as chamadas do sistema “chroot” podem isolar processos para o Unix. Foi a primeira semente da ideia do contêiner. A tecnologia inicial de contêineres começou com as prisões FreeBSD em 2000. Um ano depois, o Linux Vserver permitiu que várias máquinas Linux fossem executadas em um único host. Em 2004, as zonas Oracle Solaris forneceram funcionalidade semelhante às prisões FreeBSD. Em 2006-2007, o Google desenvolveu o contêiner de processo e depois o mesclou no kernel Linux. Os contêineres do Linux (LXC) foram criados em 2008 para aproveitar os cgroups Linux e o nome de nome. Em 2013, o Docker foi criado através da combinação de idéias LXC. Ele também adicionou ferramentas para construir e recuperar facilmente imagens de recipientes.

Docker

Docker é uma tecnologia de contêiner de código aberto com base no LXC. É popular porque facilita a criação, a execução e a implantação de aplicativos em um ambiente independente. Docker não cria um sistema operacional inteiro como uma máquina virtual. Em vez disso, ele usa o kernel do sistema operacional do host e cria virtualização apenas para o aplicativo e as bibliotecas necessárias. Essa abordagem o torna muito mais leve do que as máquinas virtuais.

Os recipientes do docker são criados a partir de imagens do Docker. As imagens do Docker podem ser consideradas instantâneas de máquinas. Os usuários podem facilmente iniciar um contêiner de uma imagem. As imagens são criadas como camadas. Suponha que uma equipe de desenvolvimento precise de um contêiner com Apache e Python instalado em uma determinada versão do Linux. Um desenvolvedor pode baixar uma imagem Linux do Docker Hub, iniciar um contêiner, instalar Apache e Python, criar uma nova imagem do contêiner e compartilhar essa imagem. Outros membros da equipe não precisam passar pela mesma instalação. Ajuda a manter um ambiente consistente para todos.

O Docker também suporta aplicativos de scripts e multi-containers. Os usuários podem usar um Dockerfile baseado em texto para definir requisitos e depois criar contêineres através do Docker Compose. O exemplo acima de criar um servidor Apache/Python/Linux também pode ser alcançado através deste processo. Com o Docker Compose, as equipes só precisam compartilhar o DockerFile para criar o mesmo ambiente. Docker tem ferramentas mais especializadas para tarefas complexas. O Swarm Docker ajuda a orquestrar implantações em larga escala.

Vagabundo

O Vagrant é uma ferramenta de código aberto que ajuda a criar e manter máquinas virtuais. Funciona com o VirtualBox, VMware, AWS e outros provedores. Vagrant simplifica o gerenciamento de VMs. Usando um VagrantFile, os desenvolvedores podem definir as propriedades da máquina virtual, como sistema operacional, instalações de software e outros. O VagrantFile baseado em texto pode ser compartilhado através do controle de versão e a máquina necessária pode ser iniciada usando um comando simples como "Vagrant Up". Os usuários podem então fazer login na máquina como um servidor físico.

Quando usar o Docker ou Vagrant

O uso de Docker ou Vagrant geralmente se resume à necessidade de contêineres ou máquinas virtuais. Aqui estão algumas semelhanças e diferenças entre o Docker e o Vagrant em termos de uso. Docker e Vagrant têm ambientes facilmente configuráveis ​​que podem ser controlados através de scripts. Eles também são amigáveis ​​à nuvem. Vagrant Virtual Machine fornece separação de segurança baseada em kernel. A separação torna as máquinas virtuais menos arriscadas do que os contêineres. Mas os contêineres do Docker são muito leves. Eles usam menos recursos e são rápidos na execução. Então você pode ter muito mais contêineres em um único host do que máquinas virtuais. Além disso, iniciar e interromper recipientes é quase instantâneo em comparação com VMs. As VMs passam por toda a BIOS e ciclo de inicialização do sistema operacional.

A separação de segurança de uma máquina virtual torna uma falha na VM mais independente. Por outro lado, os contêineres compartilham recursos e podem ter um efeito de acidente em cascata. Além disso, as ameaças à segurança de contêineres podem chegar ao kernel do sistema operacional host. No entanto, a velocidade da execução e a pegada leve de contêineres tornam o Docker muito atraente para o desenvolvimento. Com uma arquitetura de microsserviço, os contêineres podem ter um bom desempenho porque os fatores de risco são mitigados através do uso de microsserviços. Além disso, está sendo feito progresso para tornar o Docker mais seguro todos os dias.

Do ponto de vista do caso de uso prático, o Docker e o Vagrant são usados ​​apenas por profissionais de TI e / ou desenvolvedores, eles não são usados ​​por consumidores em geral ou tecnologias de computador. Em vagabundo específico, pode ser mais útil quando você realmente deseja imitar um sistema inteiro, enquanto o Docker talvez seja mais útil ao criar um sistema de teste de integração contínua (IC) para mudar de software frequentemente. O Docker é frequentemente usado com frequência em implantações de produção de aplicativos para executar servidores da Web ou aplicativos que são sem estado e facilmente mortos e recriados em qualquer host ou IP. Portanto, o Docker provavelmente é muito mais um caso de uso comum.

Conclusão

Docker e Vagrant são tecnologias úteis que podem ajudar os desenvolvedores a melhorar sua produtividade. Se a segurança do aplicativo é uma preocupação, o uso do Vagrant e as VMs podem ser uma boa ideia. Para desenvolvimento e compartilhamento rápido, o Docker fornece uma vantagem. A maioria das equipes usa ambos para executar uma operação suave.