Questão Por que devo usar o Vagrant em vez de apenas o VirtualBox?


Eu tenho usado o VirtualBox por muitos anos para criar um ambiente de desenvolvimento.

Muitos dos meus colegas estão falando sobre o Vagrant e muitas pessoas parecem muito empolgadas com isso, mas eu simplesmente não consigo entender os benefícios disso. Parece-me que é uma série de novos comandos para aprender a fim de fazer o mesmo. coisas que fiz com o Virtualbox.

Com o VirtualBox, eu instalo e configuro um ambiente perfeitamente, então posso empacotá-lo como um OVA ou qualquer outra coisa e compartilhá-lo com outros usuários do escritório. Você pode tirar um instantâneo no VirtualBox se algo der errado.

O fantoche e o chef não são realmente parte do Vagrant, são eles mesmos, certo?

Então, sim, quais benefícios especificamente o Vagrant oferece sobre o VirtualBox por conta própria?


211


origem


Dois anos depois, estou usando o Vagrant todos os dias para o desenvolvimento - é ótimo! Minha equipe usa e resolve nossos problemas com o ambiente de desenvolvimento. - John Hunt
opinativo aqui: Se você nunca teve nenhum problema em configurar servidores PXE, saiba que o VBoxManage é o principal, saiba como configurar o nfs em menos de um minuto, etc. e também como gerenciar diretamente as cadeias de construção .. não há razão para isso. O valor sobe com cada parte do quebra-cabeça que você está perdendo. O uso difundido não é da integração de marionetes, mas porque as pessoas podem proteger imagens infestadas pela Internet. Não importa o que eles te digam. - Florian Heigl
Eu também achei vagrant muito mais útil em uma equipe multi-desenvolvedor, enquanto anteriormente era só eu. Eu impus vagrant em minha equipe e descobri que é onde o valor entra. - John Hunt
3,5 anos depois, agora uso o docker todos os dias para desenvolvimento. É bom, mas um animal diferente do vagabundo ... Dependendo de suas necessidades, acredito que o vagrant ainda é uma plataforma de desenvolvimento melhor para as equipes - é muito mais fácil trabalhar com ele. - John Hunt
4 anos depois e descobri que o docker é terrível. Viva o Vagrant. - John Hunt


Respostas:


Esta é uma grande questão, então vou dividi-la em duas seções.

Vagabundo

O Vagrant é usado para configurar uma ou mais máquinas virtuais por:

  • Importando imagens pré-fabricadas (chamadas "caixas")
  • Definindo configurações específicas da VM (endereço IP, nomes de host, encaminhamento de porta, memória etc.)
  • Execução de software de provisionamento como Puppet ou Chef

Observe que ele não instala o software nem configura a máquina após o carregamento da VM e a configuração do VirtualBox. Pense nisso como um mecanismo de script para o VirtualBox.

Aqui estão algumas razões que eu já vi para usar o Vagrant apenas no VirtualBox.

1. Configure redes Multi-VM com facilidade

A maior parte do conteúdo do usuário avançado do Vagrant que eu li foi sobre a configuração de várias VMs ao mesmo tempo. O Vagrant oferece um único arquivo de configuração para configurá-los, permitindo que você inicie todos eles com um único comando.

Digamos que você tenha configurado três VMs para a rede umas com as outras usando IPs estáticos na sub-rede 192.168.1. *. Você se encontra em um local que já está usando essa sub-rede para distribuir endereços IP e suas VMs agora estão em conflito. Com Vagrant, você pode simplesmente editar o Vagrantfile e recarregar as VMs, enquanto que com o VirtualBox você teria que abrir as configurações para cada VM, se não inicializar cada VM e alterá-las dentro.

2. Controle de Origem

Ao colocar as configurações em um arquivo de texto, ele permite que a configuração seja colocada sob o controle de origem. Fez algumas mudanças na semana passada e acidentalmente quebrou a imagem? Apenas reverta as alterações e recarregue a VM. Você pode fazer isso com instantâneos do VirtualBox, mas vai ocupar muito mais espaço do que apenas um Vagrantfile.

3. Várias plataformas

Há um grande número de caixas disponíveis em sites como http://vagrantbox.es. Isso permite que você experimente vários sistemas operacionais ou distribuições, aplicando o mesmo provisionamento para configurar ambientes semelhantes. Isso pode ajudar a testar ou adicionar suporte a novas plataformas e consumir muito tempo usando apenas o VirtualBox.

Há muitos argumentos para usar o software de provisionamento, bem como o uso de instantâneos de imagem. Para uma discussão adicional, vou lhe mostrar o excelente artigo de Stephen Nelson-Smith. Como construir 100 servidores web em um dia.


145



Ainda assim, eu não entendo porque eu deveria usar o vagrant no ambiente de desenvolvimento! Porque, é caro (se você quiser usar o VMWare!) Podemos preparar uma máquina virtual como caixas de base que é usada pelo vagrant, em seguida, clone por VMware para configurar outra máquina virtual. Em primeiro lugar, podemos controlar todas as configurações da máquina virtual vmruncomando que oferecido pelo VMware até mesmo alterações de endereço IP ou executando um script dentro da máquina de convidado! - Oğuz Çelikdemir
@ OğuzÇelikdemir Esse é um ponto justo. O Vagrant apenas coloca um front-end mais fácil para o VMWare no que diz respeito à criação de uma nova máquina. Nos bastidores, está usando vmrun para controlá-lo. Eu sempre usei o VirtualBox e, portanto, não tenho nenhuma experiência com o back-end do VMWare. - Adam Lukens
@AdamLukens, Obrigado pelos comentários detalhados. O que você mencionou parece interessante .. mas eu me pergunto se você está ciente do VboxManage comando? virtualbox.org/manual/ch08.html  Praticamente tudo o que você mencionou pode ser criado como um script passando o ip / parâmetro específico para vboxmanage controlvm ou um comando similar em um script de shell e, em seguida, controle de versão que .. Então, como vagrant melhorar mais virtualbox? - alpha_989
@ alpha_989 Eu concordo. Parece não haver um ponto único para usar o Vagrant. Apenas por conveniência. - Niklas Rosencrantz


Além da excelente resposta dada por Adam, o Vagrant amarra tudo junto. Embora Chef e Puppet (e scripts Salt e shell e qualquer outro dispositivo que você queira usar) sejam coisas separadas, o Vagrant o une e faz com que ele funcione com apenas um vagrant up.

Esse comando vai

  1. basta iniciar a VM se isso for o necessário, mas também
  2. crie a caixa da sua caixa base especificada, se isso também não for feito, mas se você não tiver a caixa de base na sua máquina, ela será
  3. buscá-lo a partir de sua URL e baixá-lo para sua máquina.

Você não precisa pensar sobre tudo isso. Digamos que você esteja mudando para um projeto diferente, iniciado por um colega de trabalho. Você acabou de verificar o código do seu repo e executar vagrant up, não se preocupando com o download de ISOs ou com a instalação de qualquer coisa, nem se perguntando qual versão de qual distro você precisa usar para esse cliente específico, ou se você tem uma cópia de uma VM que já tenha tudo o que precisa.

Você nem precisa se preocupar se eles configuram as coisas usando Chef ou Puppet ou apenas scripts de shell. (Ok, então você pode precisar fazer um bundle install ou então certifique-se de ter tudo instalado, mas ainda assim não é grande coisa.)

Ao juntar tudo e fornecer uma interface unificada para tudo isso, é possível facilitar muito o uso dos casos de uso mais simples. No começo, você pode sentir que está apenas reaprendendo uma nova maneira de fazer o que já está fazendo, mas quando se aprofundar no uso do Vagrant, descobrirá que pode fazer muito mais com muito menos esforço. Valerá a pena o investimento inicial em tempo.


25



Mas é muito mais fácil e rápido enviar a um desenvolvedor uma imagem de VM de pré-instalação do que instalá-la, aprender como usá-la e lidar com qualquer um dos inúmeros problemas que surgem, particularmente ao apoiar caixas de janelas. Eu também não entendi. Parece ser nada além de fanboys. - hopeseekr
A instalação do Vagrant é inacreditavelmente fácil nos dias de hoje. Qualquer pessoa que não possa instalá-lo não pode ser confiável para escrever código. Ter um Vagrantfile em seu código-fonte que o desenvolvedor efetua check-out é realmente muito mais fácil do que enviar uma VM. O Vagrantfile define a configuração, incluindo o URL do qual fazer o download da VM base (que, em seguida, configura). Se você inicialmente não precisa fazer alterações na configuração, então está tudo pronto. Mas, ao trabalhar no seu projeto, você provavelmente precisará fazer alterações. Faça isso no seu Vagrantfile. - iconoclast
Como você mantém o Vagrantfile com o seu código, todos os desenvolvedores que participam do projeto receberão automaticamente as alterações feitas na sua VM, desde que você as esteja fazendo no Vagrantfile. Configurar seu Vagrantfile não precisa ser difícil. Você pode usar o provisionamento de shell se achar que o Chef e o Puppet são exagerados (o que eles geralmente são). Se você puder inserir os comandos do shell na VM, será um pequeno obstáculo configurar os comandos de provisionamento do shell no Vagrantfile. Levará um pequeno esforço inicial e poupará muitas dores de cabeça a longo prazo. - iconoclast
@hopeseekr Eu também estava pensando isso. Eu continuei lendo tentando ver o benefício. Eu acho que finalmente entendi. Eu tenho lido um livro sobre redes em Python. O teste é uma instalação complexa que imita máquinas que você pode usar para aprender. Você pode construir uma VM com Linux, fazer isso manualmente e eu sou uma pessoa, então tudo bem. Eu instalei o Vagrant no Windows e digitei três comandos do Vagrant para chamar sua imagem para usar no VirtualBox. E se eu tivesse 50 PCs? muito tempo para configurar com instantâneos. E se houver mudanças? 50 atualizações? Para mim, pude começar a trabalhar imediatamente sem configurar tudo. - johnny
e quando você precisa mudar algo em todos os 50 computadores? - iconoclast


A capacidade de integrar o chef ou o fantoche ao provisionamento de VM é essencial. A maioria dos usuários de Vagabundos dirá que eles correm 'provisão de vagabundo' e ocasionalmente 'recarregam vagabundos' com muito mais frequência do que 'vagrant up' ou 'vagrant destroy'. Essas tarefas indicam que o trabalho real não é girar para cima / para baixo nas VMs, mas "administrá-las" depois do fato.

Para colocar uma pergunta melhor (feita por proficientes usuários do Chef, de qualquer forma) pode ser por que usar Vagrant e não faca com o plugin apropriado (vai chegar ao plugin do VirtualBox, em um momento)? Por exemplo, passar valores de argumentos armazenados em um pacote de dados para um plugin de faca é (mais ou menos) mais inteligente, flexível e gerenciável do que fazer malabarismos com um Vagrantfile gigante. Eu normalmente defino meus recursos 'dinâmicos' como # de CPUs, quantidade de memória, que sistema operacional implantar, hostname, IP, rotas, etc, no (s) databag (s) do chef de tal forma que eu não precise continuar mudando a minha receita; ). Editar um arquivo de dados através da interface web do Chef é uma tarefa de entrada de dados realmente fácil que posso dar aos operadores mais jovens. Com o Vagrantfile, seu código sempre modificando e acredite ou não - quebras de código - o que praticamente garante que você NÃO estará entregando mudanças simples na equipe de Operações, nunca.

Além do fato de que o knife ainda não tem um plugin para o virtualbox (embora eu prefira um no futuro não muito distante), já existem plugins para a maioria dos produtos de virtualização 'enterprise', incluindo vmware, xenserver e praticamente todas as principais 'cloud' provedor, também. Isso significa que a faca é muito superior ao que a Vagrant oferece se / quando você estiver pronto para ir além do virtualbox. Por enquanto, a comunidade Chef parece feliz em deixar os usuários de VirtualBox coxearem com o Vagrant por não integrar o VirtualBox Apis para um plugin de faca. Existe um plugin faca-vagrant que permite o uso de sacos de dados para passar argumentos. Mas, ainda requer software vagrant e é Vagrantfile monolítico para funcionar.

Então, eu vou sair em um membro e dizer Vagrant definitivamente não é "melhor" do que o Chef com faca; mas necessário (por enquanto) se você insistir no virtualbox e talvez "mais fácil" do que gerenciar o chef com bolsas de dados, desde que você tenha um ambiente bastante simples para gerenciar.


8





Aqui estão mais dois casos de uso de desenvolvedor que o vagrant simplifica (sobre o VirtualBox "simples"). Eu não vi esses casos de uso serem explicados especificamente nas respostas anteriores.

  1. O Vagrant ajuda com o objetivo de manter as plataformas de desenvolvimento e produção o mais próximo possível uma da outra. Em um mundo ideal, você provisionaria o ambiente de produção com OS MESMOS scripts usados ​​para provisionar a VM do Vagrant, minimizando as surpresas no momento da implantação.

  2. Testes de integração e integração contínua: O Vagrant é fácil de controlar a partir de testes e, portanto, pilhas inteiras de várias máquinas podem ser facilmente controladas a partir de ferramentas como o Jenkins ao executar testes.

Sim, o VirtualBox "simples" pode ser usado aqui também - mas as convenções usadas pelo vagrant tornam mais simples definir esses cenários.


8



Eu seriamente apenas copie o vmx e vmdk do Windows para o Linux. Talvez seja diferente no mundo virtualbox, mas duvido! O que é mais fácil? Copiando um arquivo ou mexendo com vagrantfiles e a miríade de problemas que podem dar errado? - hopeseekr
Para enfatizar isso, o Vagrant pode ser considerado uma linguagem de definição virtual que pode descrever as características de uma máquina virtual - independente de estar hospedada no VirtualBox, VMware, Parallels ou what-have-you. Veja como o Vagrant não é "competitivo para" o VirtualBox, mas trabalha com ele ou além dele. - MarkHu
Normalmente, seria usado um Vagrantfile para descrever como uma máquina virtual deve ser configurada para um projeto - o Vagrantfile estaria comprometido com o controle de origem (git, etc) com o projeto, para compartilhamento no GitHub etc. Isso é muito menor para baixar do que um VMDK inteiro. - Ben XO


O Vagrant abstrai as máquinas virtuais para que você possa alternar facilmente as implementações de máquinas virtuais. Você pode alternar do Virtual Box para o AWS ou o Digital Ocean. É como usar o SQL em vez de uma linguagem de consulta específica do banco de dados.

O Vagrant permite que os desenvolvedores configurem seu ambiente rapidamente com apenas um comando e é exatamente igual ao de todos os outros. Isso é importante em grandes empresas, onde os desenvolvedores vêm e vão com frequência. Pode reduzir o tempo de configuração de 3 dias para 1 hora.

+ O que Adam disse.

(Eu ainda não encontrei um uso para Chef ou Puppet embora ...)


0