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

230

Uso o VirtualBox há 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 não consigo entender os benefícios dele ... 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.

Bonecos e chefs não fazem parte do Vagrant, são coisas deles, certo?

Então, sim, quais benefícios o Vagrant oferece especificamente sobre o VirtualBox por si só?

John Hunt
fonte
11
Dois anos depois, agora estou usando o Vagrant todos os dias para desenvolvimento - é ótimo! Minha equipe usa e resolveu nossos problemas no ambiente de desenvolvimento.
10116 John Hunt
1
opinou aqui: Se você nunca teve problemas para configurar servidores PXE, conheça o VBoxManage de cor, saiba como configurar nfs em menos de um minuto etc. e também como gerenciar diretamente as cadeias de compilação. O valor aumenta com cada parte do quebra-cabeça que você está perdendo. O uso generalizado não é da integração de marionetes, mas porque as pessoas podem burlar as imagens infestadas de segurança diretamente da Internet. não importa o que eles digam.
Florian Heigl
2
3,5 anos depois e agora uso o docker todos os dias para desenvolvimento. É bom, mas um animal diferente do vagabundo ... Dependendo dos seus requisitos, acredito que o vagabundo ainda é uma melhor plataforma de desenvolvimento para as equipes - é muito mais fácil trabalhar com eles.
John Hunt
5
4 anos depois, descobri que o docker é terrível. Viva Vagrant.
John Hunt
3
Os seus comentários são tão fazendo isso muito mais divertido
Florian Heigl

Respostas:

151

Essa é uma grande questão, então eu vou dividir em três seções.

Vagabundo

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

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

Observe que ele não instala software ou configura a máquina após carregar a VM e definir as configurações do VirtualBox. Pense nisso como um mecanismo de script para o VirtualBox.

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

1. Configure redes Multi-VM com facilidade

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

Digamos que você configurou três VMs para se conectarem 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 o Vagrant, você pode simplesmente editar o arquivo Vagrant e recarregar as VMs, enquanto que com o VirtualBox você precisa abrir as configurações de cada VM, se não inicializar cada VM e alterá-las por dentro.

2. Controle de Origem

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

3. Várias plataformas

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

Existem muitos argumentos para usar o software de provisionamento, bem como usar instantâneos de imagem. Para uma discussão adicional, mostrarei o excelente artigo de Stephen Nelson-Smith, Como construir 100 servidores da Web em um dia .

Adam Lukens
fonte
8
Ainda assim, não entendo por que devo 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 e depois clonar pela VMware para configurar outra máquina virtual. Em primeiro lugar, podemos controlar todas as configurações da máquina virtual por vmruncomando que é oferecido pela VMware, mesmo que o endereço IP seja alterado ou executando um script dentro da máquina convidada!
Oğuz Çelikdemir
3
@ 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 vmrunpara controlá-lo. Eu sempre usei o VirtualBox e, portanto, não tenho nenhuma experiência com o back-end do VMWare.
Adam Lukens
1
@ AdamLukens, obrigado pelos comentários detalhados. O que você mencionou parece interessante .. mas eu me pergunto se você está ciente do VboxManagecomando? virtualbox.org/manual/ch08.html Praticamente tudo o que você mencionou pode ser criado como um script, passando o parâmetro / ip específico para vboxmanage controlvmou um comando semelhante em um script de shell e depois controlando a versão .. Então, como vagrantmelhorar virtualbox?
23418 alpha_989 #
@ alpha_989 Eu concordo. Parece não haver um ponto único para o uso do Vagrant. Apenas por conveniência.
Niklas Rosencrantz
27

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

Esse único comando

  1. basta iniciar a VM, se isso é tudo o que é necessário, mas também
  2. crie a caixa a partir da caixa base especificada, se isso ainda não tiver sido feito, mas se você não tiver a caixa base na sua máquina, ela primeiro
  3. busque-o em seu URL e faça o download 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ê apenas faz o check-out do código do seu repositório e executa vagrant up, sem se preocupar com o download de ISOs ou com a instalação de qualquer coisa, ou se perguntando qual versão de qual distribuição você precisa usar para esse cliente em particular ou se possui uma cópia de uma VM que já possui tudo você precisa.

Você nem precisa se preocupar se eles configuraram as coisas usando Chef ou Puppet ou apenas scripts de shell. (Ok, então você pode precisar fazer uma bundle installalteração ou verificar se tem tudo instalado, mas ainda não é grande coisa.)

Ao vincular tudo e fornecer uma interface unificada para tudo, isso pode tornar muito mais fáceis os 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 depois de se aprofundar no uso do Vagrant, descobrirá que pode fazer muito mais com muito menos esforço. Valerá a pena o investimento inicial.

iconoclasta
fonte
8
Mas é muito mais fácil e rápido enviar a um desenvolvedor uma imagem de VM pré-configurada do que instalar um vagrant, aprender a usá-la e lidar com qualquer um dos inúmeros problemas que surgem, principalmente no suporte caixas de janelas. Eu realmente também não entendi. Parece ser nada além de fanboys.
hopeseekr
5
Instalar o Vagrant é incrivelmente fácil hoje em dia. Quem não pode instalá-lo não pode confiar em escrever código. Ter um arquivo Vagrant em seu código-fonte que o desenvolvedor faz check-out é realmente muito mais fácil do que enviar uma VM. O Vagrantfile define a instalação, incluindo a URL a partir da qual o download da VM base (que é então configurada). Se você não precisar inicialmente fazer alterações na configuração, está tudo pronto. Porém, ao trabalhar em seu projeto, você provavelmente precisará fazer alterações. Faça isso no seu arquivo Vagrant.
Iconoclasta
5
Como você mantém o Vagrantfile com seu código, todos os desenvolvedores que ingressam no projeto receberão automaticamente as alterações que você fizer na sua VM, uma vez que você as fará no Vagrantfile. Configurar seu arquivo Vagrant não precisa ser difícil. Você pode usar o provisionamento de shell se achar que o Chef e o Puppet são um exagero (o que geralmente acontece). Se você pode inserir os comandos do shell na VM, é um pequeno obstáculo configurar comandos de provisionamento de shell no Vagrantfile. Será necessário um pequeno esforço inicial e você economizará muitas dores de cabeça a longo prazo.
Iconoclasta
4
e quando você precisa alterar algo em todos os 50 computadores?
Iconoclast
4
As discussões aqui são realmente sobre otimização prematura. Não use vagrant se você não precisar. Use vagrant quando achar que criar VMs está se tornando entediante.
Cammil
9

A capacidade de integrar chef ou marionete no provisionamento de VM é essencial. A maioria dos usuários do Vagrant dirá que eles executam 'provisões vagantes' e ocasionalmente 'recarregam vagamente' com muito mais frequência do que 'vagabundo para cima' ou 'vagabundo destrói'. Essas tarefas indicam que o trabalho real não é girar / desativar VMs, mas "gerenciá-las" após o fato.

Para fazer uma pergunta melhor (feita por usuários experientes do Chef), talvez seja por que usar o Vagrant e não usar o plug-in apropriado (chegará ao plug-in virtualbox em um momento)? Por exemplo, passar valores de argumento armazenados em um pacote de dados para um plug-in de faca é (muito) mais inteligente, flexível e gerenciável do que manipular um Vagrantfile gigante. Normalmente, defino meus recursos 'dinâmicos' como número de CPUs, quantidade de memória, sistema operacional a ser implantado, nome do host, IP, rotas, etc., nos bancos de dados do chef, de modo que não precise continuar mudando minha receita; ) Editar um banco de dados através da interface da 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 para sempre mudar e, acredite ou não, quebras de código, o que praticamente garante que você NÃO estará entregando alterações simples à equipe de operações,

Além do fato de que o knife ainda não possui um plug-in para o virtualbox (embora eu visualize um em um futuro não muito distante), já existem plug-ins para a maioria dos produtos de virtualização 'empresariais', incluindo vmware, xenserver e praticamente todas as principais 'nuvens' fornecedor também. Isso significa que a faca é muito superior ao que o Vagrant oferece se / quando você estiver pronto para ir além da caixa virtual. Por enquanto, a comunidade Chef parece feliz em deixar os usuários de caixa virtual mancarem junto com o Vagrant, ao não integrar as APIs da caixa virtual para um plugin de faca. Existe um plug-in vagabundo que permite o uso de sacos de dados para passar argumentos. Mas ainda requer software vagante e o Vagrantfile monolítico funciona.

Então, eu vou sair em um galho e dizer que o Vagrant definitivamente NÃO é 'melhor' do que o Chef com faca; mas necessário (por enquanto) se você insistir em caixa virtual e talvez 'mais fácil' do que gerenciar chefes com sacos de dados, desde que você tenha um ambiente bastante simples de gerenciar.

Andrew
fonte
8

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

  1. O Vagrant ajuda com o objetivo de manter as plataformas de desenvolvimento e produção o mais próximas possível umas das outras. Em um mundo ideal, você provisionaria o ambiente de produção com os mesmos scripts usados ​​para provisionar a VM do Vagrant, minimizando 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 Jenkins durante a execução de testes.

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

Ben XO
fonte
1
Eu seriamente apenas copio o vmx e o vmdk do Windows para o Linux. Talvez seja diferente no mundo das caixas virtuais, mas duvido! O que é mais fácil? Copiar um arquivo ou mexer nos arquivos vagrant e na miríade de problemas que podem dar errado?
hopeseekr
6
Para enfatizar, o Vagrant pode ser visto como uma linguagem de definição virtual que pode descrever as características de uma máquina virtual - independentemente de ela estar hospedada no VirtualBox, VMware, Parallels ou o que você tem. Veja como o Vagrant não é "concorrente" do 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 compartilhar no GitHub etc. É muito menor para fazer o download do que um VMDK inteiro.
Ben XO
0

O Vagrant abstrai máquinas virtuais, permitindo 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 o mesmo que todo mundo. 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.

(Ainda não encontrei um uso para Chef ou Puppet ...)

Chloe
fonte