Para comenzar a trabajar con máquinas virtuales usando Vagrant, lo primero que hacemos es crear un entorno limpio donde alojar nuestra configuración. Es recomendable crear una carpeta específica para Vagrant, ya que al levantar máquinas virtuales se generan varios archivos que pueden ensuciar nuestro espacio de trabajo si no los organizamos bien.
El siguiente paso es generar el archivo de configuración principal, llamado Vagrantfile. Esto lo conseguimos ejecutando el comando vagrant init, que crea un archivo de texto plano donde declaramos toda la configuración de nuestra máquina virtual. Aunque este archivo está escrito en Ruby, no es necesario conocer este lenguaje para entenderlo, ya que la sintaxis es bastante sencilla y clara.
Dentro del Vagrantfile, accedemos a la configuración mediante un bloque que recibe una variable llamada config. A través de esta variable podemos modificar diferentes aspectos de la máquina virtual. Por ejemplo, para elegir la imagen base que usaremos, modificamos la propiedad config.vm.box. En nuestro caso, configuramos la máquina para que use la box ubuntu/trusty64, que es una versión de Ubuntu bastante común para pruebas y desarrollo.
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
end
Este archivo es muy ligero y fácil de compartir, por ejemplo, a través de un sistema de control de versiones como Git, lo que facilita la colaboración y la reproducibilidad del entorno.
Para iniciar la máquina virtual, utilizamos el comando vagrant up. Este comando se encarga de interactuar con el proveedor de virtualización, que en nuestro caso es VirtualBox, para crear y arrancar la máquina. La primera vez que ejecutamos este comando puede tardar un poco más, ya que descarga la box y configura todo lo necesario. Durante este proceso, Vagrant realiza varias tareas automáticamente, como configurar puertos, pasar claves SSH y preparar la máquina para su uso.
Una vez que la máquina está en marcha, podemos conectarnos a ella fácilmente con vagrant ssh. Este comando nos abre una sesión de terminal dentro de la máquina virtual sin necesidad de conocer la IP, usuario o puerto, ya que Vagrant gestiona toda esa información por nosotros. La conexión se realiza con el usuario vagrant, que tiene permisos sudo sin necesidad de contraseña, lo que facilita la administración y configuración dentro de la máquina.
Dentro de la sesión SSH, podemos ejecutar comandos habituales, como actualizar los paquetes con apt update. Para salir de la sesión, simplemente usamos exit o logout.
Cuando queremos detener la máquina virtual, usamos vagrant halt. Este comando apaga la máquina de forma ordenada, similar a un apagado normal, evitando problemas como la corrupción de datos. Podemos volver a encenderla tantas veces como queramos con vagrant up.
Vagrant mantiene un seguimiento de la máquina y su estado mediante una carpeta oculta llamada .vagrant, donde guarda información como el ID de la máquina y las claves privadas necesarias para la conexión.
Si queremos eliminar completamente la máquina virtual, usamos vagrant destroy. Este comando borra la máquina y todos sus datos, por lo que es importante asegurarse de que no tenemos información importante dentro de ella o que esta esté respaldada en carpetas compartidas con el host. Al ejecutar vagrant destroy, Vagrant nos pide confirmación para evitar borrados accidentales.
Más allá de estas operaciones básicas, el archivo Vagrantfile ofrece muchas posibilidades para personalizar y ampliar nuestro entorno virtual. Podemos configurar redes internas, abrir puertos, asignar direcciones IP estáticas, compartir carpetas entre el host y la máquina virtual, y modificar parámetros del proveedor como la memoria RAM o el número de CPUs asignados.
Una de las funcionalidades más potentes es el aprovisionamiento, que nos permite automatizar la instalación y configuración de software dentro de la máquina usando scripts Shell, Ansible, Puppet, Docker, entre otros. Esto facilita la creación de entornos reproducibles y listos para desarrollo o pruebas.
En definitiva, con estos comandos y configuraciones básicas ya podemos crear, iniciar, conectar, detener y destruir máquinas virtuales con Vagrant de forma sencilla y práctica, sentando las bases para explorar funcionalidades más avanzadas que nos permitan adaptar el entorno a nuestras necesidades específicas.