Hace poco descubrí virtualenv para crear un entorno virtual para desarrollar mis proyectos, hacía tiempo que no encontraba algo tan interesante y útil. Buscando un poco más me encontré con otras herramientas que actúan de manera similar, Vagrant y Dockers. Como en este tema ando muy verde me gustaría poder recibir recomendaciones basadas en vuestras experiencias y si conocéis alguna otra pues bienvenida sea! Saludos.
Yo solo he usado vagrant y docker (virtualenv no tengo ni idea).
VAGRANT
Yo uso vagrant a menudo para no 'ensuciar' mi equipo de uso diario. Por ejemplo me lio con una web que use algun sucedaneo de php (apache, PHP y Mysql etc). Pues ale, maquina virtual al canto, instalo php && mysql y demas, y los mantengo aislados de mi maquina real en la que normalmente hago cosas en Rails.. (y no tengo necesidad de tener un servidor web)
Imagina que necesitas apache para un proyecto, pasan 3 dias y otro proyecto necesitas nginx.. Si no tuvieras vagrant, que haces? instalas y desinstalas cada 2 por 3? buh!
Si se me antoja mover la imagen a otro equipo, hacer un snapshot, o cosas de esas son posibles.
DOCKER
Docker te puede servir para lo mismo, de hecho es mas rapido ya que usa el mismo kernel que tu ordenador real.
El problema principal que le veo a docker es que si por ejemplo quieres arrancar una maquina windows, o OSX, en un linux, ouch! No puedes, ya que un container de docker tiene que compartir el kernel de la maquina real. Vagrant es maquina virtual de verdad. Docker es un entorno aislado que ejecuta el kernel de tu SO.
Docker, en mi opinion, lo veo mas util para mover un container a produccion. Por ejemplo te haces una web con XXX dentro del container y subes el container entero a alguno de los servicios que ejecutan containers en la nube (esto no lo he llegado a hacer nunca)
En definitiva, usa lo que mas te guste.. :) Yo uso vagrant porque salio antes y me acostumbre a el, para aislar equipos de proyectos esta muy bien y es mas flexible. Usaria docker para subir containers a produccion y ahorrarte la parafernalia de instalar cosas manualmente en entornos de produccion. Esa es mi opinion
No domino python, pero tengo entendido que virtualenv es una librería parecida a rvm pero para python.
Sin embargo Vagrant, que es el que yo uso, es una herramienta que te permite manejar máquinas virtuales de una manera "transparente". ¿Por qué va entre comillas? Pues porque simplemente lo que hace Vagrant es prescindir de la GUI de virtualbox: él arranca la máquina virtual con el sistema que le especificas descargándolo e instalándolo y abriendo el SSH para que te conectes e instales lo que necesites bien sea python, ruby, PHP, node.js, etc.
Yo utilizo Vagrant para lo que han comentado ya por aquí, tener varias máquinas de desarrollo aisladas en su tecnología sin necesidad de cacharrear con tu propia máquina.
Son máquinas virtuales al uso ya que Vagrant recubre VirtualBox y tienes disponibles "boxes" prefabricadas para utilizar según tus necesidades http://www.vagrantbox.es/. También puedes bajar boxes con el SO únicamente y provisionar mediante sh o Puppet. En mi caso, suelo tener un sh junto con su Vagrantfile correspondiente que se encarga de instalarme todo lo necesario. Cuando tenga más rato intentaré crearme directamente las boxes para que mis compañeros puedan bajarlas a partir de una URL y así compartir entornos/proyectos sin problemas de compatibilidad. Muy útil también para simular entornos de pre y producción.
Por otro lado Virtualenv, no estoy muy puesto pero creo que sirve para crear entornos virtuales de ejecución para Python. Una especie de RVM + Bundler de Ruby. Este entorno contendrá unas librerías determinadas con sus versiones y aislará al desarrollador del entorno de su propia máquina donde puede tener instalada una versión distinta de Python y sus librerías.
No es lo mismo e intento explicarte las diferencias.
Una máquina virtual se entiende por la simulación de una máquina con su sistema operativo propio, sus propios programas e incluso su propio hardware (RAM, Particiones Disco Duro, núcleos CPU...etc) que se ejecuta dentro de una máquina real, es decir, es como tener un equipo independiente dentro de otro. El símil que me viene a la cabeza siempre es una caja dentro de otra.
Por otro lado, el entorno virtual consiste que dentro de tu máquina real se crean estructuras de ficheros que están aisladas unas de las otras y por lo tanto no se producen colisiones o incompatibilidades entre ellas. El símil aquí es la misma caja de antes pero en lugar de haber otra caja hay una o varias burbujas. https://virtualenv.pypa.io/en/latest/
La wikipedia explica mejor que yo las diferencias entre ambos http://es.wikipedia.org/wiki/M%C3%A1quina_virtual.
20/01/2015 14:33
VAGRANT
Yo uso vagrant a menudo para no 'ensuciar' mi equipo de uso diario. Por ejemplo me lio con una web que use algun sucedaneo de php (apache, PHP y Mysql etc). Pues ale, maquina virtual al canto, instalo php && mysql y demas, y los mantengo aislados de mi maquina real en la que normalmente hago cosas en Rails.. (y no tengo necesidad de tener un servidor web)
Imagina que necesitas apache para un proyecto, pasan 3 dias y otro proyecto necesitas nginx.. Si no tuvieras vagrant, que haces? instalas y desinstalas cada 2 por 3? buh!
Si se me antoja mover la imagen a otro equipo, hacer un snapshot, o cosas de esas son posibles.
DOCKER
Docker te puede servir para lo mismo, de hecho es mas rapido ya que usa el mismo kernel que tu ordenador real.
El problema principal que le veo a docker es que si por ejemplo quieres arrancar una maquina windows, o OSX, en un linux, ouch! No puedes, ya que un container de docker tiene que compartir el kernel de la maquina real. Vagrant es maquina virtual de verdad. Docker es un entorno aislado que ejecuta el kernel de tu SO.
Docker, en mi opinion, lo veo mas util para mover un container a produccion. Por ejemplo te haces una web con XXX dentro del container y subes el container entero a alguno de los servicios que ejecutan containers en la nube (esto no lo he llegado a hacer nunca)
En definitiva, usa lo que mas te guste.. :) Yo uso vagrant porque salio antes y me acostumbre a el, para aislar equipos de proyectos esta muy bien y es mas flexible. Usaria docker para subir containers a produccion y ahorrarte la parafernalia de instalar cosas manualmente en entornos de produccion. Esa es mi opinion
20/01/2015 12:32
Sin embargo Vagrant, que es el que yo uso, es una herramienta que te permite manejar máquinas virtuales de una manera "transparente". ¿Por qué va entre comillas? Pues porque simplemente lo que hace Vagrant es prescindir de la GUI de virtualbox: él arranca la máquina virtual con el sistema que le especificas descargándolo e instalándolo y abriendo el SSH para que te conectes e instales lo que necesites bien sea python, ruby, PHP, node.js, etc.
20/01/2015 17:44
Son máquinas virtuales al uso ya que Vagrant recubre VirtualBox y tienes disponibles "boxes" prefabricadas para utilizar según tus necesidades http://www.vagrantbox.es/. También puedes bajar boxes con el SO únicamente y provisionar mediante sh o Puppet. En mi caso, suelo tener un sh junto con su Vagrantfile correspondiente que se encarga de instalarme todo lo necesario. Cuando tenga más rato intentaré crearme directamente las boxes para que mis compañeros puedan bajarlas a partir de una URL y así compartir entornos/proyectos sin problemas de compatibilidad. Muy útil también para simular entornos de pre y producción.
Por otro lado Virtualenv, no estoy muy puesto pero creo que sirve para crear entornos virtuales de ejecución para Python. Una especie de RVM + Bundler de Ruby. Este entorno contendrá unas librerías determinadas con sus versiones y aislará al desarrollador del entorno de su propia máquina donde puede tener instalada una versión distinta de Python y sus librerías.
20/01/2015 17:59
21/01/2015 10:17
Una máquina virtual se entiende por la simulación de una máquina con su sistema operativo propio, sus propios programas e incluso su propio hardware (RAM, Particiones Disco Duro, núcleos CPU...etc) que se ejecuta dentro de una máquina real, es decir, es como tener un equipo independiente dentro de otro. El símil que me viene a la cabeza siempre es una caja dentro de otra.
Por otro lado, el entorno virtual consiste que dentro de tu máquina real se crean estructuras de ficheros que están aisladas unas de las otras y por lo tanto no se producen colisiones o incompatibilidades entre ellas. El símil aquí es la misma caja de antes pero en lugar de haber otra caja hay una o varias burbujas. https://virtualenv.pypa.io/en/latest/
La wikipedia explica mejor que yo las diferencias entre ambos http://es.wikipedia.org/wiki/M%C3%A1quina_virtual.