Vagrant, la herramienta para crear entornos de desarrollo reproducibles

En esta y en las siguientes entradas me gustaría hablar de Vagrant, una herramienta que cada vez está ganando más popularidad entre los desarrolladores de todo el mundo.

¿Qué es Vagrant?

Vagrant es una herramienta gratuita de línea de comandos, disponible para Windows, MacOS X y GNU/Linux, que permite generar entornos de desarrollo reproducibles y compartibles de forma muy sencilla. Para ello, Vagrant crea y configura máquinas virtuales a partir de simples ficheros de configuración.

Basta con compartir el fichero de configuración de Vagrant (llamado “Vagrantfile”) con otro desarrollador para que, con un simple comando, pueda reproducir el mismo entorno de desarrollo. Esto es especialmente útil en equipos formados por varias personas, ya que asegura que todos los desarrolladores tienen el mismo entorno, con las mismas dependencias y configuración. Con Vagrant, compartir pesadas máquinas virtuales o el ya mítico “en mi ordenador funciona” (causado generalmente por diferentes configuraciones o versiones de software) son cosas del pasado.

Además, dado que la configuración de la máquina virtual es un simple fichero de texto plano, podemos incluir este fichero en nuestro repositorio en el control de versiones, junto con el resto del código del proyecto. De esta manera, un nuevo desarrollador que se incorpore al equipo simplemente tendrá que clonar el repositorio del proyecto y ejecutar Vagrant para tener el entorno de desarrollo montado y funcionando en cuestión de minutos.

Por defecto, Vagrant utiliza VirtualBox como motor de máquinas virtuales, aunque existe la opción de utilizar VMWare Workstation (Windows) o VMWare Fusion (MacOS X) con un plugin de pago.

Primeros pasos con Vagrant

Instalación y creación de una máquina virtual básica

El primer paso, como es habitual, es descargar e instalar Vagrant y además instalar el proveedor de máquinas virtuales que queramos utilizar, que por defecto será VirtualBox, ya que es gratuito y viene integrado en Vagrant. Una vez instalados, podremos ejecutar el comando ‘vagrant’ para obtener un listado de las opciones disponibles.

Crear una máquina virtual con Vagrant es tan sencillo como ejecutar los siguientes comandos:

$ vagrant init hashicorp/precise32
$ vagrant up

Tras ejecutar estos comandos, Vagrant descargará e instalará una máquina virtual de VirtualBox con el sistema operativo Ubuntu 12.04 LTS 32-bit (Precise). El primer comando, ‘vagrant init’, genera el fichero de configuración “Vagrantfile”  en el directorio actual y tendrá un contenido similar al siguiente (se han omitido comentarios):

VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "hashicorp/precise32"
end

De este fichero hablaremos más en profundidad en las siguientes secciones. De momento sólo hay que saber que en él estamos indicando a Vagrant que queremos utilizar la imagen ‘hashicorp/precise32′ como base para nuestra máquina virtual.

El segundo comando, ‘vagrant up’, descarga, instala, configura y arranca la máquina virtual. Vagrant descarga las imágenes base de las máquinas virtuales, llamadas “boxes“, desde aquí. En este repositorio hay multitud de imágenes de diferentes sistemas operativos y podremos utilizar la que más se ajuste a nuestras necesidades. Estas imágenes base contienen instalaciones básicas del correspondiente sistema operativo, que Vagrant clona para crear nuestras máquinas virtuales. Gracias a este modo de funcionamiento, la creación y arranque de las máquinas virtuales es mucho más rápida y sencilla.

Una vez que el comando ‘vagrant up’ termine, tendremos la máquina virtual arrancada y lista para trabajar con ella.

Acceso a la máquina virtual

Por defecto, Vagrant inicia la máquina virtual sin interfaz gráfica. Sin embargo, podemos acceder a ella mediante SSH con el comando:

$ vagrant ssh

lo que nos dará acceso a la línea de comandos de la máquina virtual y podremos hacer todo lo habitual en una máquina GNU/Linux (en este caso).

Además, por defecto, Vagrant configura el directorio actual (el directorio desde donde se ha hecho ‘vagrant init’ y donde está el fichero Vagrantfile) como un directorio compartido con la máquina virtual. Esto quiere decir que todos los ficheros que dejemos en ese directorio, serán accesibles por la máquina virtual y viceversa. En la máquina virtual, este directorio compartido se encuentra por defecto en la ruta ‘/vagrant’. Así pues, una vez conectados por SSH con la máquina virtual, podemos hacer:

$ cd /vagrant
$ cat Vagrantfile

para ver el contenido de nuestro “Vagrantfile“. Si ejecutamos el comando ‘ls -al’ podremos ver además todos los ficheros del directorio compartido. Este directorio compartido es de gran utilidad, ya que si configuramos, por ejemplo, nuestra máquina virtual como un servidor web, podemos dejar en él los ficheros que queramos que el servidor procese y trabajar sobre ellos desde la máquina “host“.

Parando la máquina virtual

Una vez que hayamos terminado de trabajar con la máquina podemos ejecutar los siguientes comandos:

  • ‘vagrant suspend’: Pausa la máquina virtual, guardando el estado actual en el disco duro. Permite arrancar de nuevo la máquina muy rápidamente con `vagrant up` con el estado exacto en el que se quedó.
  • ‘vagrant halt’: Realiza un apagado controlado de la máquina virtual (igual a apagar una máquina física). Como en el caso anterior, podemos volver a arrancar la máquina virtual con `vagrant up`, aunque en este caso el arranque es más lento que al hacer un “suspend” (ya que tiene que volver a iniciar el sistema operativo).
  • ‘vagrant destroy’: Destruye la máquina virtual y todo su contenido.

 

Conclusiones

Como hemos visto en esta breve introducción, Vagrant permite, con 3 o 4 comandos, crear máquinas virtuales y trabajar con ellas de una forma muy sencilla y rápida. En siguientes entradas veremos cómo editar el fichero Vagrantfile para configurar aun más nuestras máquinas virtuales y cómo combinar Vagrant con otras herramientas que nos permitirán generar entornos de desarrollo completos.

The following two tabs change content below.

Mikel Pintor

Desarrollador web.

Latest posts by Mikel Pintor (see all)

Compartir: