tools - what is vagrant software




¿Debo usar Vagrant o Docker para crear un entorno aislado? (7)

Uso Ubuntu para el desarrollo y la implementación y tengo la necesidad de crear un entorno aislado.

Estoy considerando Vagrant o Docker para este propósito. ¿Cuáles son los pros y los contras, o cómo se comparan estas soluciones?


Con Vagrant ahora puedes tener a Docker como proveedor. http://docs.vagrantup.com/v2/docker/ . El proveedor de Docker se puede utilizar en lugar de VirtualBox o VMware.

Tenga en cuenta que también puede usar Docker para aprovisionar con Vagrant. Esto es muy diferente a usar Docker como proveedor. docs.vagrantup.com/v2/provisioning/docker.html

Esto significa que puedes reemplazar a Chef o Puppet con Docker. Puede usar combinaciones como Docker como proveedor (VM) con Chef como aprovisionador. O puede usar VirtualBox como proveedor y Docker como aprovisionador.


El uso de ambos es una parte importante de las pruebas de entrega de aplicaciones. Estoy empezando a involucrarme con Docker y estoy pensando mucho en un equipo de aplicaciones que tiene una complejidad terrible en la creación y entrega de su software. Piense en una situación clásica de Proyecto de Phoenix / Entrega continua.

El pensamiento va algo así:

  • Tome un componente de la aplicación Java / Go y créelo como un contenedor (tenga en cuenta, no está seguro si la aplicación debe estar integrada en el contenedor o construirse luego en el contenedor)
  • Entregar el contenedor a una máquina virtual Vagrant.
  • Repita esto para todos los componentes de la aplicación.
  • Iterar en el (los) componente (s) para codificar.
  • Pruebe continuamente el mecanismo de entrega a las máquinas virtuales administradas por Vagrant
  • Duerma bien sabiendo que es hora de implementar el contenedor, que las pruebas de integración se estaban realizando de forma mucho más continua que antes de Docker.

Esta parece ser la extensión lógica de la afirmación de Mitchell de que Vagrant es para el desarrollo combinado con el pensamiento de Farley / Humbles en la entrega continua. Si yo, como desarrollador, puedo reducir el ciclo de retroalimentación sobre las pruebas de integración y la entrega de aplicaciones, se aplicará una mejor calidad y mejores entornos de trabajo.

El hecho de que, como desarrollador, ofrezco contenedores de forma constante y constante a la máquina virtual y que la prueba sea más holística significa que las versiones de producción se simplificarán aún más.

Así que veo a Vagrant evolucionar como una forma de aprovechar algunas de las increíbles consecuencias que Docker tendrá para el despliegue de aplicaciones.


Prólogo mi respuesta al admitir que no tengo experiencia con Docker, más que como un ávido observador de lo que parece ser una solución realmente clara que está ganando mucha tracción.

Tengo una buena experiencia con Vagrant y puedo recomendarlo. Sin duda, es una solución más pesada en términos de estar basada en VM en lugar de LXC. Sin embargo, he encontrado que una computadora portátil decente (8 GB de RAM, CPU i5 / i7) no tiene problemas para ejecutar una máquina virtual utilizando Vagrant / VirtualBox junto con las herramientas de desarrollo.

Una de las cosas realmente grandes con Vagrant es la integración con Puppet / Chef / shell scripts para automatizar la configuración. Si está utilizando una de estas opciones para configurar su entorno de producción, puede crear un entorno de desarrollo que sea casi idéntico al que va a obtener, y esto es exactamente lo que desea.

La otra gran cosa con Vagrant es que puede versionar su Vagrantfile junto con el código de su aplicación. Esto significa que todos los demás miembros de su equipo pueden compartir este archivo y se le garantiza que todos trabajarán con la misma configuración de entorno.

Curiosamente, Vagrant y Docker en realidad pueden ser complementarios. Vagrant se puede ampliar para admitir diferentes proveedores de virtualización, y es posible que Docker sea uno de esos proveedores que obtenga soporte en un futuro cercano. Vea https://github.com/dotcloud/docker/issues/404 para una discusión reciente sobre el tema.


Si tu propósito es el aislamiento, creo que Docker es lo que quieres.

Vagrant es un gestor de máquinas virtuales. Le permite hacer un script de la configuración de la máquina virtual, así como el aprovisionamiento. Sin embargo, sigue siendo una máquina virtual que depende de VirtualBox (u otros) con una gran sobrecarga. Requiere que tengas un archivo de disco duro que puede ser enorme, requiere mucho ram, y el rendimiento puede no ser muy bueno.

Docker, por otro lado, utiliza kgroup cgroup y namespacing a través de LXC . Esto significa que está utilizando el mismo kernel que el host y el mismo sistema de archivos. Puede usar Dockerfile con el comando de docker build ventana docker build para manejar el aprovisionamiento y la configuración de su contenedor. Tiene un ejemplo en docs.docker.com sobre cómo hacer su Dockerfile; Es muy intuitivo.

La única razón por la que podría querer usar Vagrant es si necesita realizar BSD, Windows u otro desarrollo que no sea Linux en su caja de Ubuntu. De lo contrario, ve por Docker.


Soy el autor de Docker.

La respuesta corta es que si desea administrar máquinas, debe usar Vagrant. Y si desea crear y ejecutar entornos de aplicaciones, debe utilizar Docker.

Vagrant es una herramienta para gestionar máquinas virtuales. Docker es una herramienta para crear y desplegar aplicaciones empaquetándolas en contenedores ligeros. Un contenedor puede contener casi cualquier componente de software junto con sus dependencias (ejecutables, bibliotecas, archivos de configuración, etc.) y ejecutarlo en un entorno de ejecución garantizado y repetible. Esto hace que sea muy fácil construir su aplicación una vez e implementarla en cualquier lugar: en su computadora portátil para probarla, luego en diferentes servidores para la implementación en vivo, etc.

Es un error común que solo se pueda usar Docker en Linux. Eso es incorrecto También puede instalar Docker en Mac y Windows. Cuando se instala en Mac, Docker incluye una pequeña máquina virtual Linux (¡25 MB en el disco!) Que actúa como un contenedor para su contenedor. Una vez instalado esto es completamente transparente; Puede utilizar la línea de comandos de Docker exactamente de la misma manera. Esto le ofrece lo mejor de ambos mundos: puede probar y desarrollar su aplicación utilizando contenedores, que son muy ligeros, fáciles de probar y fáciles de mover (consulte, por ejemplo, https://hub.docker.com para compartir contenedores reutilizables con la comunidad Docker), y no tiene que preocuparse por los detalles esenciales de la administración de máquinas virtuales, que de todos modos son solo un medio para un fin.

En teoría, es posible usar Vagrant como una capa de abstracción para Docker. Recomiendo en contra de esto por dos razones:

  • Primero, Vagrant no es una buena abstracción para Docker. Vagrant fue diseñado para gestionar máquinas virtuales. Docker fue diseñado para administrar una aplicación en tiempo de ejecución. Esto significa que Docker, por diseño, puede interactuar con una aplicación de maneras más ricas y tiene más información sobre el tiempo de ejecución de la aplicación. Las primitivas en Docker son procesos, secuencias de registro, variables de entorno y enlaces de red entre componentes. Los primitivos en Vagrant son máquinas, dispositivos de bloque y teclas ssh. Vagrant simplemente se sienta más abajo en la pila, y la única forma en que puede interactuar con un contenedor es fingir que es simplemente otro tipo de máquina, que puede "iniciar" e "iniciar sesión". Entonces, seguro, puedes escribir "vagrant up" con un complemento de Docker y algo bonito sucederá. ¿Es un sustituto de toda la amplitud de lo que Docker puede hacer? Prueba Docker nativo por un par de días y compruébalo por ti mismo :)

  • En segundo lugar, el argumento de bloqueo. "Si usas Vagrant como una abstracción, ¡no estarás atrapado en Docker!". Desde el punto de vista de Vagrant, que está diseñado para administrar máquinas, esto tiene mucho sentido: ¿no son los contenedores simplemente otro tipo de máquina? Al igual que Amazon EC2 y VMware, debemos tener cuidado de no vincular nuestras herramientas de aprovisionamiento a ningún proveedor en particular. Esto crearía bloqueo, mejor abstraerlo todo con Vagrant. Excepto que esto pierde el punto de Docker por completo. Docker no aprovisiona máquinas; envuelve su aplicación en un tiempo de ejecución portátil ligero que se puede colocar en cualquier lugar.

¡El tiempo de ejecución que elija para su aplicación no tiene nada que ver con cómo aprovisiona sus máquinas! Por ejemplo, es bastante frecuente implementar aplicaciones en máquinas que son aprovisionadas por otra persona (por ejemplo, una instancia de EC2 implementada por el administrador de su sistema, tal vez usando Vagrant), o en máquinas de metal que Vagrant no puede aprovisionar en absoluto. A la inversa, puede usar Vagrant para aprovisionar máquinas que no tienen nada que ver con el desarrollo de su aplicación, por ejemplo, una caja de IIS de Windows lista para usar o algo así. O puede usar Vagrant para aprovisionar máquinas para proyectos que no usan Docker; tal vez usen una combinación de rubygems y rvm para la administración de dependencias y el sandboxing, por ejemplo.

En resumen: Vagrant es para administrar máquinas, y Docker es para crear y ejecutar entornos de aplicaciones.


Vagrant-lxc es un complemento para Vagrant que te permite usar LXC para aprovisionar Vagrant. No tiene todas las características que tiene la VM virtual predeterminada (VirtualBox) pero debería permitirle una mayor flexibilidad que los contenedores docker. Hay un video en el enlace que muestra sus capacidades que vale la pena ver.


Definitivamente Docker para la victoria!

Como sabrá, Vagrant es para la gestión de máquinas virtuales, mientras que Docker es para la gestión de contenedores de software. Si no está al tanto de la diferencia, aquí está: Un contenedor de software puede compartir la misma máquina y núcleo con otros contenedores de software. Al usar contenedores, ahorra dinero porque no desperdicia recursos en varios sistemas operativos (kernels), puede empaquetar más software por servidor manteniendo un buen grado de aislamiento.

Por supuesto es una nueva disciplina para cuidar con sus propios pitfals y desafíos.

Elija Docker Swarm si sus requisitos superan el límite de recursos de una sola máquina.





docker