Aprendiendo sobre vagrant

Vagrant
Vagrant

Vagrant es una herramienta gratuita de línea de comandos, disponible para WindowsMacOS 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 archivo 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 tendrán el mismo entorno, con las mismas dependencias y configuración. Con Vagrant, compartir pesadas máquinas virtuales o el ya buen conocido decir “en mi compu funciona” (causado generalmente por diferentes configuraciones o versiones de software) es cosa del pasado.

Además, dado que la configuración de la máquina virtual es un simple archivo de texto plano, podemos incluirlo 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.

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 archivo de configuración “Vagrantfile”  en el directorio actual y tendrá un contenido similar al siguiente:

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

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áquinaGNU/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 archivos 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 -la’ 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.

Muchos se preguntan sobre las diferencias entre Docker y Vagrant, si son similares y en que momento usar una solución o la otra y es que Vagrant emula completamente todo un sistema operativo, creando una especie de ambiente sandbox, mientras que Docker solamente crea pequeños paquetes que en los cuales se emulan determinadas características de un sistema operativo.

Recuerda que este artículo es simplemente una pequeña introducción a vagrant, puedes investigar un poco más y seguir aprendiendo.

Happy Coding!! 😀

Co-fundador de Qbit Mexhico, usuario de linux, Developer en tecnologías web.. Nicaragüense, centro en basketball, primer centro en rugby y pintor los fines de semana. Ortögrafo y ambientalista psicológico (de escritorio).. ese soy yo!

Si te ha servido compártelo y difunde nuestro blog..

Twitter LinkedIn Flickr YouTube 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *