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


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 estar muy entusiasmadas con esto, pero parece que no puedo entender los beneficios de ello. Me parece que es una serie de nuevos comandos para aprender a hacer lo mismo. cosas que hice con Virtualbox.

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

El títere y el chef no son parte de Vagrant, son lo suyo, ¿verdad?

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


211


origen


Dos años después, ahora estoy usando 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
Aquí opinamos: si nunca tuvo problemas para configurar los servidores PXE, conocer VBoxManage de memoria, saber cómo configurar nfs en menos de un minuto, etc. y cómo gestionar directamente las cadenas de construcción ... casi no tiene ningún sentido. El valor aumenta con cada parte del rompecabezas que te falta. El uso generalizado no proviene de la integración de marionetas, sino porque las personas podrían obtener imágenes infestadas de agujeros de seguridad directamente desde Internet. no importa lo que te digan. - Florian Heigl
También encontré vagabundo mucho más útil en un equipo de múltiples desarrolladores, mientras que antes era solo yo. Impuse vagabundo en mi equipo y descubrí que ahí es donde entra el valor. - John Hunt
3.5 años y ahora uso Docker todos los días para el desarrollo. Es bueno, pero una bestia diferente a vagabundo ... Dependiendo de tus necesidades, creo que vagabundo sigue siendo una mejor plataforma de desarrollo para los equipos; es mucho más fácil trabajar con él. - John Hunt
4 años después y descubrí que Docker es terrible. Larga vida a Vagrant. - John Hunt


Respuestas:


Esta es una gran pregunta, así que voy a dividirla en dos secciones.

Vagabundo

Vagrant se usa para configurar una o más máquinas virtuales de la siguiente manera:

  • Importación de imágenes prefabricadas (llamadas "cajas")
  • Configuración de 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 el software ni configura la máquina después de cargar la máquina virtual y establecer la configuración de VirtualBox. Piense en ello como un motor de scripting para VirtualBox.

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

1. Configure redes Multi-VM 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 configurarlo, lo que le permite ejecutarlos todos con un solo comando.

Supongamos que ha configurado tres máquinas virtuales para conectarse entre sí mediante direcciones IP estáticas en la subred 192.168.1. *. Se encuentra en una ubicación que ya está utilizando esa subred para distribuir direcciones IP, y sus máquinas virtuales ahora entran en conflicto. Con Vagrant, puede simplemente editar el Vagrantfile y volver a cargar las máquinas virtuales, mientras que con VirtualBox tendría que abrir la configuración para cada máquina virtual, si no arranca cada máquina virtual y las cambia 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 fuente. ¿Hizo algunos cambios la semana pasada y accidentalmente rompió la imagen? Simplemente revertir los cambios y volver a cargar la VM. Puede lograr esto con instantáneas de VirtualBox, pero ocupará mucho más espacio que solo un Vagrantfile.

3. Varias 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 nuevas plataformas, y tomaría mucho tiempo usar solo VirtualBox.

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


145



Aún así, ¡no entiendo por qué debería usar vagabundo en el entorno de desarrollo! Porque es caro (¡si quiere usar VMWare!) Podemos preparar una máquina virtual como cajas base que es utilizada por vagabundos y luego clonar por VMware para configurar otra máquina virtual. En primer lugar, podemos controlar todas las configuraciones de máquinas virtuales vmruncomando que ofrece VMware incluso cambios en la dirección IP o ejecutando un script dentro de la máquina invitada! - Oğuz Çelikdemir
@ OğuzÇelikdemir Ese es un punto justo. Vagrant solo pone una interfaz más fácil para VMWare con respecto a la creación de una nueva máquina. Detrás de escena, está usando vmrun para controlarlo Siempre he usado VirtualBox, y por lo tanto no tengo ninguna experiencia con el backend de VMWare. - Adam Lukens
@AdamLukens, gracias por los comentarios detallados. Lo que mencionaste suena interesante ... pero me pregunto si conoces la VboxManage ¿mando? virtualbox.org/manual/ch08.html  Casi todo lo que usted mencionó se puede crear como un guión pasando el parámetro / IP específico a vboxmanage controlvm o un comando similar en un script de shell y luego control de versiones que .. Entonces, ¿cómo lo hace vagrant mejorar sobre virtualbox? - alpha_989
@ alpha_989 Estoy de acuerdo. No parece haber un único punto para usar Vagrant. Solo por conveniencia - Niklas Rosencrantz


Además de la excelente respuesta dada por Adam, Vagrant une todo junto. Aunque Chef y Puppet (y los scripts Salt y shell y cualquier otro aprovisionador que desee usar) son cosas separadas, Vagrant lo vincula 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 desde su cuadro base especificado si eso tampoco está hecho todavía, pero si ni siquiera tiene el cuadro base en su máquina, primero
  3. Tómelo 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. Acaba de verificar el código de su repositorio y ejecutar vagrant up, sin preocuparse de descargar ISO o instalar nada, o de saber qué versión de la distribución necesita usar para ese cliente en particular, o si tiene una copia de una máquina virtual que ya tiene todo lo que necesita.

Ni siquiera tiene que preocuparse de si han configurado las cosas usando Chef o Puppet o simplemente scripts de shell. (De acuerdo, entonces podrías necesitar hacer una bundle install o de lo contrario, asegúrese de tener todo instalado, pero aún así no es un gran problema).

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


25



Pero es muchísimo más fácil y más rápido para mí enviar a un desarrollador una imagen de máquina virtual preconfigurada que instalar un vagabundo, aprender a usarlo y lidiar con cualquiera de los innumerables problemas que surgen, especialmente cuando se admite cajas de ventanas. Yo realmente tampoco lo entiendo. Parece ser nada más que fanboys. - hopeseekr
Instalar Vagrant es increíblemente fácil en estos días. No se puede confiar en que alguien que no puede instalarlo escriba el código. Tener un Vagrantfile en su código fuente que el desarrollador verifique es mucho más fácil que enviar una máquina virtual. Vagrantfile define la configuración, incluida la URL desde la que se descarga la VM base (que luego configura). Si inicialmente no necesita realizar cambios en la configuración, entonces ya está todo listo. Pero a medida que trabajes en tu proyecto, es probable que tengas que hacer cambios. Haz eso en tu archivo Vagrant. - iconoclast
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 máquina virtual, ya que los hará en Vagrantfile. La configuración de su Vagrantfile no tiene que ser difícil. Puede utilizar el aprovisionamiento de shell si considera que Chef y Puppet son excesivos (lo que a menudo ocurre). Si puede ingresar los comandos de shell en la máquina virtual, entonces es un pequeño obstáculo establecer comandos de aprovisionamiento de shell en el Vagrantfile. Tomará un pequeño esfuerzo inicial y le ahorrará muchos dolores de cabeza a largo plazo. - iconoclast
@hopeseekr Yo también estaba pensando esto. He seguido leyendo tratando de ver el beneficio. Creo que finalmente lo entiendo He estado leyendo un libro sobre la red de Python. Las pruebas son una configuración compleja que imita las máquinas que puede usar para aprender. Puedes construir una máquina virtual con Linux, hacerlo a mano y yo soy una persona, así que está bien. Instalé Vagrant en Windows e ingresé tres comandos Vagrant para recuperar su imagen y usarla en VirtualBox. ¿Qué pasa si tengo 50 PC? mucho tiempo para configurar con instantáneas. ¿Qué pasa si hay cambios? 50 actualizaciones? Para mí, pude comenzar a trabajar inmediatamente sin configurar todo. - johnny
y cuando necesitas cambiar algo en las 50 computadoras? - iconoclast


La capacidad de integrar chef o marioneta con el aprovisionamiento de VM es la clave. La mayoría de los usuarios de Vagrant te dirán que ejecutan 'vagabundo' y en ocasiones 'vagabundo' de nuevo 'mucho más a menudo que' vagabundo 'o' vagabundo destruido '. Estas tareas indican que el trabajo real no está en girar las máquinas virtuales hacia arriba / abajo, sino en "gestionarlas" después del hecho.

Para plantear una mejor pregunta (planteada por los usuarios expertos de Chef, de todos modos) podría ser por qué usar Vagrant y no cuchillo con el complemento adecuado (¿accederá al complemento de VirtualBox, en un momento)? Por ejemplo, pasar valores de argumento almacenados en una bolsa de datos a un complemento de cuchilla es (camino) más inteligente, flexible y manejable que hacer malabares con un archivo Vagrant gigante. Normalmente, defino mis recursos "dinámicos" como el número de CPU, la cantidad de memoria, qué SO desplegar, nombre de host, IP, rutas, etc., en la (s) bolsa (s) de datos de chef, de modo que no necesito seguir cambiando mi receta; ) La edición de 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, tu código de modificación para siempre y créelo o no, saltos de código, lo que garantiza que NO podrás realizar cambios simples al personal de Operaciones.

Aparte del hecho de que el cuchillo aún no tiene un complemento para la caja virtual (aunque preveo 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 prácticamente todas las 'nubes' principales. proveedor, también. Esto significa que el cuchillo es muy superior a lo que Vagrant ofrece si / cuando está listo para ir más allá de la caja virtual. Por ahora, la comunidad de Chef parece contenta de permitir que los usuarios de Virtualbox cojeen junto con Vagrant al no integrar apis de virtualbox para un complemento de cuchilla. Hay un complemento de vagabundo con cuchillos que permite el uso de bolsas de datos para pasar argumentos. Sin embargo, todavía requiere un software errático y es un archivo Vagrant monolítico para funcionar.

Por lo tanto, voy a salir en una extremidad y decir Vagabundo definitivamente no es "mejor" que el Chef con cuchillo; pero es necesario (por ahora) si insistes en la virtualbox y quizás sea "más fácil" que administrar chef con bolsas de datos, siempre que tengas un entorno bastante simple de administrar.


8





Aquí hay otros dos casos de uso del desarrollador que simplifica vagabundo (a través de VirtualBox "simple"). No vi estos casos de uso llamados 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 SOMOS scripts utilizados para aprovisionar la máquina virtual Vagrant, 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 de múltiples máquinas completas se pueden controlar fácilmente desde herramientas como Jenkins cuando se realizan pruebas.

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


8



En serio, copio el vmx y el vmdk de Windows a Linux. Quizás sea diferente en el mundo de la caja virtual, ¡pero lo dudo! ¿Qué es más fácil? ¿Copiando un archivo o jugando con archivos vagrant y la miríada de problemas que pueden salir mal? - hopeseekr
Para poner un punto más fino, Vagrant puede considerarse como un lenguaje de definición virtual que puede describir las características de una máquina virtual, independientemente de si está alojado en VirtualBox, VMware, Parallels o lo que sea que tenga. Vea cómo Vagrant no es una "competencia para" VirtualBox, sino que funciona con él, o más allá. - MarkHu
Uno normalmente usaría un Vagrantfile para describir cómo se configurará una máquina virtual para un proyecto: Vagrantfile se comprometerá con el control de fuente (git, etc.) con el proyecto, para compartir en GitHub, etc. Esto es mucho más pequeño de descargar que todo un VMDK. - Ben XO


Vagrant abstrae las máquinas virtuales por lo que le permite cambiar fácilmente las implementaciones de la máquina virtual. Puede cambiar de Virtual Box a AWS u 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 solo un comando y es exactamente igual a los demás. Esto es importante en las grandes compañías donde los desarrolladores vienen y van a menudo. Puede reducir el tiempo de configuración de 3 días a 1 hora.

+ Lo que Adam dijo.

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


0