¿Por qué debería usar Vagrant en lugar de solo VirtualBox?

230

He estado usando VirtualBox durante muchos años para crear un entorno de desarrollo.

Muchos de mis colegas están hablando de Vagrant y muchas personas parecen muy entusiasmadas, pero parece que no puedo entender los beneficios de esto ... me parece que es una serie de nuevos comandos que aprender para hacer lo mismo. cosas que hice con Virtualbox.

Con VirtualBox, instalo y configuro un entorno perfectamente, luego puedo empaquetarlo como un OVA o lo que sea y compartirlo con otros usuarios de la oficina. Puede tomar una instantánea en VirtualBox si algo sale mal.

La marioneta y el chef no son realmente parte de Vagrant, son lo suyo, ¿verdad?

Entonces, sí, ¿qué beneficios ofrece Vagrant específicamente sobre VirtualBox por sí solo?

John Hunt
fuente
11
Dos años después, ahora uso Vagrant todos los días para el desarrollo, ¡es genial! Mi equipo lo usa y ha resuelto nuestros problemas de entorno de desarrollo.
John Hunt
1
opinó aquí: si nunca tuvo problemas para configurar servidores PXE, conozca VBoxManage de memoria, sepa cómo configurar nfs en menos de un minuto, etc. y también le guste administrar directamente las cadenas de compilación ... no hay prácticamente ningún punto. El valor aumenta con cada parte del rompecabezas que te estás perdiendo. El uso generalizado no se debe a la integración de títeres, sino a que las personas podrían salvar imágenes infestadas de seguridad directamente desde Internet. no importa lo que te digan
Florian Heigl
2
Hace 3,5 años y ahora uso Docker todos los días para el desarrollo. Es bueno, pero una bestia diferente para vagabundos ... Dependiendo de sus requisitos, creo que vagabundo sigue siendo una mejor plataforma de desarrollo para los equipos, es mucho más fácil trabajar con ellos.
John Hunt
55
4 años después y descubrí que Docker es terrible. Larga vida a Vagrant.
John Hunt
3
sus comentarios son mucho más divertidos
Florian Heigl

Respuestas:

151

Esta es una gran pregunta, así que la dividiré en tres secciones.

Vagabundo

Vagrant se utiliza para configurar una o más máquinas virtuales mediante:

  • Importación de imágenes prefabricadas (llamadas "cajas")
  • Establecer configuraciones específicas de VM (dirección IP, nombres de host, reenvío de puertos, memoria, etc.)
  • Ejecución de software de aprovisionamiento como Puppet o Chef

Tenga en cuenta que no instala software ni configura la máquina después de cargar la VM y establecer la configuración de VirtualBox. Piense en ello como un motor de secuencias de comandos para VirtualBox.

Aquí hay algunas razones que he visto para usar Vagrant solo en VirtualBox.

1. Configure redes de varias máquinas virtuales con facilidad

La mayor parte del contenido de usuario avanzado de Vagrant que he leído ha sido sobre la configuración de varias máquinas virtuales al mismo tiempo. Vagrant le proporciona un único archivo de configuración para configurarlos, lo que le permite iniciarlos todos con un solo comando.

Supongamos que ha configurado tres máquinas virtuales para conectarse en red mediante IP estáticas en la subred 192.168.1. *. Te encuentras en una ubicación que ya está usando esa subred para entregar direcciones IP, y tus máquinas virtuales ahora entran en conflicto. Con Vagrant, simplemente puede editar el archivo Vagrant y volver a cargar las máquinas virtuales, mientras que con VirtualBox tendría que abrir la configuración de cada máquina virtual, si no arrancar cada máquina virtual y cambiarlas dentro.

2. Control de fuente

Al poner la configuración en un archivo de texto, permite que la configuración se ponga bajo control de origen. ¿Hizo algunos cambios la semana pasada y accidentalmente rompió la imagen? Simplemente revierta los cambios y vuelva a cargar la VM. Puede lograr esto con las instantáneas de VirtualBox, pero ocupará mucho más espacio que solo un Vagrantfile.

3. Diversas plataformas

Hay una gran cantidad de cajas disponibles en sitios como http://vagrantbox.es . Esto le permite probar varios sistemas operativos o distribuciones, aplicando el mismo aprovisionamiento para configurar entornos similares. Esto puede ayudar a probar o agregar soporte a las nuevas plataformas, y llevaría mucho tiempo usar solo VirtualBox.

Existen muchos argumentos para usar el software de aprovisionamiento, así como también para usar instantáneas de imágenes. Para una discusión adicional, le señalaré el excelente artículo de Stephen Nelson-Smith Cómo construir 100 servidores web en un día .

Adam Lukens
fuente
8
Aún así, no entiendo por qué debería usar vagabundo en el entorno de desarrollo. Porque es costoso (¡si desea usar VMWare!) Podemos preparar una máquina virtual como cajas base que es utilizada por vagabundo y luego obtener clonación por VMware para configurar otra máquina virtual. En primer lugar, podemos controlar todas las configuraciones de la máquina virtual mediante el vmruncomando que ofrece VMware, incluso los cambios de dirección IP o ejecutar un script dentro de la máquina invitada.
Oğuz Çelikdemir
3
@ OğuzÇelikdemir Ese es un punto justo. Vagrant simplemente pone un front-end más fácil para VMWare con respecto a la presentación de una nueva máquina. Detrás de escena, se usa vmrunpara controlarlo. Siempre había usado VirtualBox, y por lo tanto no tengo ninguna experiencia con el backend VMWare.
Adam Lukens
1
@ AdamLukens, gracias por los comentarios detallados. Lo que mencionaste suena interesante ... pero me pregunto si conoces el VboxManagecomando. virtualbox.org/manual/ch08.html Casi todo lo que mencionaste se puede crear como una secuencia de comandos al pasar la ip / parámetro específica a vboxmanage controlvmun comando similar en una secuencia de comandos de shell y luego controlar la versión. Entonces, ¿cómo se vagrantmejora virtualbox?
alpha_989
@ alpha_989 Estoy de acuerdo. Parece que no hay un punto único para usar Vagrant. Solo por conveniencia.
Niklas Rosencrantz
27

Además de la excelente respuesta dada por Adam, Vagrant une todo junto. Aunque Chef y Puppet (y los scripts de Salt y shell y cualquier otro aprovisionador que desee usar) son cosas separadas, Vagrant lo une todo y lo hace funcionar con solo un vagrant up.

Ese único comando

  1. simplemente inicie la VM si eso es todo lo que se necesita, pero también
  2. cree el cuadro a partir del cuadro base especificado si eso tampoco se ha hecho todavía, pero si ni siquiera tiene el cuadro base en su máquina, primero
  3. recójalo de su URL y descárguelo a su máquina.

No tienes que pensar en todo eso. Digamos que está cambiando a un proyecto diferente, uno iniciado por un compañero de trabajo. Simplemente verifica el código de tu repositorio y lo ejecutas vagrant up, sin preocuparte por descargar ISOs o instalar nada, o preguntarte qué versión de qué distribución necesitas usar para ese cliente en particular, o si tienes una copia de una VM que ya tiene todo necesitas.

Ni siquiera tiene que preocuparse por si han configurado las cosas usando Chef o Puppet o solo scripts de shell. (Bien, entonces es posible que tengas que hacer bundle installo asegurarte de que tienes todo instalado, pero aún así no es gran cosa).

Al unir todo y proporcionar una interfaz unificada para todo, puede hacer que los casos de uso, excepto los más simples, sean mucho más fáciles. Al principio, puede sentir que está volviendo a aprender una nueva forma de hacer lo que ya está haciendo, pero una vez que profundice en el uso de Vagrant descubrirá que puede hacer mucho más con mucho menos esfuerzo. Valdrá la pena la inversión de tiempo inicial.

iconoclasta
fuente
8
Pero es mucho más fácil y rápido para mí enviarle a un desarrollador una imagen de VM preestablecida que instalar vagabundo, aprender a usarlo y resolver cualquiera de los innumerables problemas que surgen, especialmente cuando se admite Cajas de ventanas. Yo realmente NO lo entiendo tampoco. Parece ser nada más que fanboys.
hopeseekr
55
Instalar Vagrant es increíblemente fácil en estos días. Cualquiera que no pueda instalarlo no puede ser confiable para escribir código. Tener un Vagrantfile en su código fuente que el desarrollador comprueba es en realidad mucho más fácil que enviar una VM. El archivo Vagrant define la configuración, incluida la URL desde la que descargar la VM base (que luego configura). Si inicialmente no necesita hacer cambios en la configuración, entonces ya está todo listo. Pero a medida que trabaje en su proyecto, es probable que necesite hacer cambios. Haz eso en tu Vagrantfile.
iconoclasta
55
Como mantiene el Vagrantfile con su código, todos los desarrolladores que se unan al proyecto recibirán automáticamente los cambios que realice en su VM, ya que los está haciendo en el Vagrantfile. Configurar su Vagrantfile no necesita ser difícil. Puede usar el aprovisionamiento de shell si considera que el Chef y la Marioneta son excesivos (que a menudo lo son). Si puede ingresar los comandos de shell en la VM, entonces es un pequeño obstáculo configurar los comandos de aprovisionamiento de shell en el archivo Vagrant. Tomará un pequeño esfuerzo inicial y le ahorrará muchos dolores de cabeza a largo plazo.
iconoclasta
44
y cuando necesitas cambiar algo en las 50 computadoras?
iconoclasta
44
Las discusiones aquí son realmente sobre la optimización prematura. No use vagabundo si no lo necesita. Use vagabundo cuando encuentre que crear máquinas virtuales se está volviendo tedioso.
cammil
9

La capacidad de integrar chef o títere con el aprovisionamiento de VM es clave. La mayoría de los usuarios de Vagrant le dirán que ejecutan 'provisión vagabunda' y ocasionalmente 'recarga vagabunda' con mucha más frecuencia que 'vagabundo' o 'destrucción vagabunda'. Estas tareas indican que el trabajo real no es girar las máquinas virtuales hacia arriba / abajo, sino 'administrarlas' después del hecho.

Para plantear una mejor pregunta (planteada por usuarios expertos de Chef, de todos modos) podría ser ¿por qué usar Vagrant y no cuchillo con el complemento apropiado (llegará al complemento virtualbox, en un momento)? Por ejemplo, pasar los valores de argumento almacenados en una bolsa de datos a un complemento de cuchillo es (de manera) más inteligente, flexible y manejable que hacer malabares con un archivo Vagrantfile gigante. Normalmente defino mis recursos 'dinámicos' como # de CPU, cantidad de memoria, qué sistema operativo implementar, nombre de host, IP, rutas, etc., en bolsas de datos de chef, de modo que no necesite seguir cambiando mi receta; ) Editar una bolsa de datos a través de la interfaz web de Chef es una tarea de entrada de datos realmente fácil que puedo dar a los operadores más jóvenes. Con Vagrantfile, su código de modificación permanente y lo creas o no, saltos de código, lo que garantiza que NO entregarás cambios simples al personal de Operaciones,

Aparte del hecho, la navaja aún no tiene un complemento para virtualbox (aunque imagino uno en un futuro no muy lejano), ya hay complementos para la mayoría de los productos de virtualización 'empresarial', incluidos vmware, xenserver y casi todas las principales 'nubes' proveedor, también. Esto significa que el cuchillo es muy superior a lo que ofrece Vagrant si está listo para ir más allá de virtualbox. Por ahora, la comunidad de Chef parece feliz de permitir que los usuarios de virtualbox cojeen junto con Vagrant al no integrar las API de virtualbox para un complemento de cuchillo. Hay un complemento de vagabundo que permite el uso de bolsas de datos para pasar argumentos. Pero, todavía requiere un software vagabundo y es un archivo vagabundo monolítico para funcionar.

Entonces, me arriesgaré y diré que Vagrant definitivamente NO es 'mejor' que Chef con cuchillo; pero necesario (por ahora) si insiste en virtualbox y quizás sea "más fácil" que administrar chef con bolsas de datos, siempre que tenga un entorno bastante simple de administrar.

Andrés
fuente
8

Aquí hay dos casos de uso de desarrolladores más que simplifica vagabundamente (sobre VirtualBox "simple"). No vi estos casos de uso mencionados específicamente en las respuestas anteriores.

  1. Vagrant ayuda con el objetivo de mantener las plataformas de desarrollo y producción lo más cerca posible entre sí. En un mundo ideal, aprovisionaría el entorno de producción con LOS MISMOS scripts utilizados para aprovisionar Vagrant VM, minimizando las sorpresas en el momento de la implementación.

  2. Pruebas de integración e integración continua: Vagrant es fácil de controlar desde las pruebas y, por lo tanto, las pilas completas de máquinas múltiples se pueden controlar fácilmente desde herramientas como Jenkins cuando se realizan pruebas.

Sí, VirtualBox "simple" también se puede utilizar aquí, pero las convenciones utilizadas por vagabundo hacen que sea más sencillo configurar estos escenarios.

Ben XO
fuente
1
En serio, solo copio vmx y vmdk de Windows a Linux. Tal vez sea diferente en el mundo virtualbox, ¡pero lo dudo! Que es mas facil ¿Copiar un archivo o jugar con archivos vagabundos y la gran cantidad de problemas que pueden salir mal?
hopeseekr
66
Para aclararlo, se puede pensar en Vagrant como un lenguaje de definición virtual que puede describir las características de una máquina virtual, independientemente de si está alojada en VirtualBox, VMware, Parallels o lo que sea que tenga. Vea cómo Vagrant no es "competencia para" VirtualBox, sino que funciona con él o más allá.
MarkHu
Normalmente se usaría un Vagrantfile para describir cómo se configurará una máquina virtual para un proyecto: Vagrantfile se comprometería a controlar la fuente (git, etc.) con el proyecto, para compartir en GitHub, etc. Esto es mucho más pequeño para descargar que un VMDK completo.
Ben XO
0

Vagrant abstrae máquinas virtuales para que le permita cambiar fácilmente las implementaciones de máquinas virtuales. Puede cambiar de Virtual Box a AWS o Digital Ocean. Es como usar SQL en lugar de un lenguaje de consulta específico de la base de datos.

Vagrant permite a los desarrolladores configurar su entorno rápidamente con un solo comando y es exactamente el mismo que el de los demás. Esto es importante en grandes empresas donde los desarrolladores van y vienen con frecuencia. Puede reducir el tiempo de configuración de 3 días a 1 hora.

+ Lo que dijo Adam.

(Aunque todavía no he encontrado un uso para Chef o Puppet ...)

Chloe
fuente