X

Introducción a Vagrant

Muchas veces hemos tenido que desarrollar un proyecto en equipo o trabajamos en diferentes computadoras y nos encontramos con que la configuración al parecer no es la misma en todas las máquinas.  Esto puede ser algo sencillo de solucionar o nos puede llevar un sin fin de horas, anda a saber qué es lo que configuramos mal o porque en una máquina funciona y en otra no.

Instalar el mismo entorno de trabajo una y otra vez es un trabajo repetitivo y agotador que nadie quiere realizar. Y ni que hablar si es en diferentes sistemas operativos. La compatibilidad entre sistemas operativos a mejorado y la mayoría de tecnologías tienen sus versiones para cada sistema pero estas generalmente tienen algunas diferencias. Lo mejor es trabajar siempre sobre el mismo sistema operativo por lo cual muchas veces una máquina virtual termina siendo una buena opción.

Las máquinas virtuales tienen grandes beneficios entre ellos nos permite correr el sistema operativo que queramos con su respectiva configuración sin afectar nuestro equipo. Te preguntaras que tiene que ver Vagrant en todo esto, pues vagrant nos permite instalar y configurar las máquinas virtuales de forma sencilla. Nos asegura que nuestro entorno siempre tenga la misma configuración.

¿Que es?

Vagrant es una herramienta que nos ayuda a crear y manejar máquinas virtuales con un mismo entorno de trabajo. Nos permite definir los servicios a instalar así como también sus configuraciones. Está pensado para trabajar en entornos locales y lo podemos utilizar con shell scripts, Chef, Puppet o Ansible.

Cabe destacar que vagrant no tiene la capacidad para correr una maquina virtual sino que simplemente se encarga de las características con las que debe crearse esa VM y los complementos a instalar. Para poder trabajar con las máquinas virtuales es necesario que también instalamos VirtualBox , Docker o hyper-v.

¿Para qué Sirve?

Como hemos venido mencionado vagrant sirve para ayudarnos a crear y configurar máquinas virtuales con determinadas características y componentes. La gran ventaja de vagrant es que posee un archivo de configuración Vagrantfile donde se centraliza toda la configuración de la VM que creamos. Lo genial de vagrant es que puedes utilizar el vagrantfile para crear una VM exactamente igual cuantas veces quieras y es super liviano lo puedes agregar a tu repo o enviar por mail a tus compañeros de trabajo.

Vagran no está pensado para trabajar con grandes cantidades de máquinas virtuales, para infraestructuras más complejas existen otras herramientas como Terraform que pertenece a la misma empresa HashiCorp.

Instalación

Para comenzar vamos a instalar Vagrant, para ello podemos descargar el instalador desde el sitio oficial  o si utilizamos linux podemos instalarlo corriendo los siguientes comandos

sudo dnf install vagrant -y

Si vamos a utilizar docker como proveedor es necesario instalar el siguiente complemento

sudo dnf install vagrant-lxc

Para verificar que hemos instalado Vagrant correctamente abrimos una consola y corremos

vagrant version

y nos mostrará algo como esto si se instalo correctamente

Installed Version: 2.1.5
Latest Version: 2.1.5
 
You're running an up-to-date version of Vagrant!

Antes de comenzar a crear nuestros container con Vagrant vamos a necesitar instalar Docker, VirtualBox o Hyper-v , puedes ver como instalar Docker en uno de nuestros tutoriales sobre docker aquí.

Para ver como instalar VirtualBox o Hyper-v puedes visitar sus sitios oficiales .

Docker Provider

Ahora sí ya podemos proceder a crear nuestro primer container utilizando Vagrant.

Lo primero que debemos hacer es crear una carpeta donde se guardará la configuración y ahí mismo crear un archivo vagrantfile, para ello corremos el comando

vagrant init

Luego con el editor de nuestra preferencia editamos el archivo para que cree el container a nuestra media. Hay dos formas en que podemos crear un container de manera sencilla, en este tutorial veremos cómo crear un container desde una imagen pero también se puede crear desde un dockerfile.

Desde Docker Imagen

Para crear un container desde una imagen primero debemos descargarnos una imagen que la guardaremos en el mismo directorio que el archivo vagrantfile. Luego colocamos en el vagrantfile una configuración como la siguiente, si queremos utilizar nuestra propia imagen

Vagrant.configure("2") do |config|
   config.vm.provider "docker" do |d|
      d.image = "prueba"
   end
end

También podemos utilizar Vagrant para que descargue la imagen automáticamente desde el registro de Docker, por ejemplo

Vagrant.configure("2") do |config|
   config.vm.provision "docker" do |d|
      d.pull_images "centos6.6"
      d.pull_images "vagrant"
   end
end

Luego ejecutamos

vagrant up

Vagrant comenzará a crear el container a partir de la imagen, en este archivo también  podemos indicarle configuración extra para que instale servicios, complementos, etc. Puede que sea necesario correr vagrant up bajo el comando sudo, pero no con el usuario root.

Para acceder a nuestro container lo hacemos como de costumbre

sudo docker start prueba

sudo docker attach prueba

VirtualBox Provider

Utilizar virtualBox con vagrant es super fácil y podemos crear y configurar nuestra máquina virtual solo con un archivo y un box. Un box es una máquina virtual previamente construida y con un usuario asignado, podemos encontrar algunas que ya vienen con Apache instalado u otros servicios.

Para descargar un box podemos utilizar el comando vagrant box add + el nombre de la imagen que queremos descargar, en este caso vamos a descargar centos 6 de 64bit

vagrant box add genebean/centos6-64bit

Para ver nuestra lista de boxes descargadas utilizamos el comando

vagrant box list

Ahora para crear nuestra máquina virtual debemos editar el Vagrantfile, lo podemos crear con el comando

vagrant init

En este caso vamos a instalar también Nginx, PHP 5.6 y MariaDB utilizando shell script en el mismo archivo

Vagrant.configure("2") do |config|
    config.vm.box = "genebean/centos6-64bit"
    config.vm.provision "shell", inline: <<-SHELL
        yum update
       yum install -y nginx
       yum install -y epel-release
       rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
       yum install -y php56w-fpm php56w-opcache
       yum replace php-common --replace-with=php56w-common
       yum -y install --enablerepo=remi,remi-test mysql mysql-server
   SHELL
end

Esto nos creara una máquina virtual con el sistema operativo Centos 6 y los servicios antes mencionados. Para poder acceder a la MV basta con correr el comando

vagrant ssh

Esto por supuesto nos proporcionará acceso SSH a nuestra maquina virtual, gracias a un archivo .vagrant donde se guarda la IP, usuario, contraseña y puerto para acceder a la MV.

Si queremos cerrar nuestra MV lo podemos hacer utilizando el comando

vagrant halt

Y si queremos destruir la máquina virtual junto con todo su contenido corremos

vagrant destroy

Conclusión

Como hemos visto en esta breve introducción Vagrant es muy fácil de instalar y utilizar, permitiéndonos configurar entornos locales solo con un par de comandos. Además, nos proporciona la seguridad de que todos los entornos que creemos con el mismo vagrantfile serán iguales.

Utilizar máquinas virtuales o contenedores a la hora de  configurar un entorno de trabajo es super importante ya que nos permite tener diferentes configuraciones en un mismo equipo. También nos aseguramos de que una configuración no afecta a otra permitiéndonos trabajar con distintos lenguajes en simultáneo. Y si algo se rompe solo volvemos a crear nuestro entorno  utilizando vagrant.

Quizás te interese leer:

Artículos relacionados