Vagrantfile
Vagrantfile permite describir y configurar la máquina virtual que se creará en el sistema
Como podemos encontrar en la documentación oficial de vagrantfile permite describir y configurar la máquina virtual que se creará en el sistema. Vagrant está diseñado para ejecutarse a partir de este archivo, lo que facilita el control de versiones y la portabilidad del entorno. Aunque la sintaxis del Vagrantfile está basada en Ruby, no es necesario dominar este lenguaje, ya que su configuración se realiza principalmente mediante variables y opciones predefinidas.
Antes de empezar
Se han creado varios post en donde puede encontrar documentación basica que le ayudara a comprender menor el contenido descrito en este post:
-
¿Qué es Vagrant? ¿Por qué usarlo? Comparación con Docker y VirtualBox.
-
Primeros comandos:
vagrant init
,vagrant up
,vagrant halt
,vagrant destroy
.
🔹 ¿Qué es el Vagrantfile
?
El archivo Vagrantfile
es el archivo principal de configuración de Vagrant. Define todo el entorno de tu máquina virtual (VM), incluyendo el sistema operativo, la red, el proveedor (como VirtualBox), carpetas sincronizadas, aprovisionamiento, y más.
🔹 ¿Cómo funciona?
Cuando ejecutas vagrant up
, Vagrant busca un archivo llamado Vagrantfile
en el directorio actual. Este archivo contiene instrucciones en Ruby DSL (lenguaje de dominio específico) para:
-
Especificar el sistema operativo (la box)
-
Definir cuántas VMs quieres levantar
-
Configurar la red, carpetas compartidas, puertos, etc.
-
Indicar scripts o herramientas para el aprovisionamiento (como shell, Ansible, Puppet, etc.)
🔹 ¿Cómo crear un Vagrantfile?
Puedes crear uno fácilmente ejecutando:
vagrant init
Esto generará un archivo básico Vagrantfile
con comentarios. Lo puedes editar según tus necesidades.
🔹 Estructura básica de un Vagrantfile
Aquí te dejo un ejemplo básico y bien comentado:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
# Nombre de la box base (una imagen preconfigurada del SO)
config.vm.box = "ubuntu/bionic64"
# Configurar red privada
config.vm.network "private_network", ip: "192.168.56.10"
# Carpetas sincronizadas entre host y guest
config.vm.synced_folder "./codigo", "/home/vagrant/codigo"
# Configuración del proveedor (por ejemplo VirtualBox)
config.vm.provider "virtualbox" do |vb|
vb.name = "MiMaquinaVagrant"
vb.memory = "1024"
vb.cpus = 2
end
# Script de aprovisionamiento (shell)
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y apache2
SHELL
end
🔹 Explicación de cada parte
Sección | Descripción |
---|---|
config.vm.box |
Define el sistema operativo base. Puedes buscar boxes en https://app.vagrantup.com/boxes/search |
config.vm.network |
Define si es red NAT, privada o pública. Puedes asignar una IP fija. |
config.vm.synced_folder |
Sincroniza carpetas entre tu máquina host y la VM. |
config.vm.provider |
Configura el proveedor (VirtualBox, VMware, etc.). Puedes asignar RAM, CPU, nombre, etc. |
config.vm.provision |
Define el aprovisionamiento (shell script, Ansible, etc.). Se ejecuta al levantar la VM por primera vez o al usar vagrant provision . |
🔹 Comandos útiles de Vagrant
Comando | Descripción |
---|---|
vagrant init |
Crea un Vagrantfile básico |
vagrant up |
Levanta la VM según el Vagrantfile |
vagrant ssh |
Conecta a la VM por SSH |
vagrant halt |
Detiene la VM |
vagrant reload |
Reinicia la VM (aplica cambios) |
vagrant provision |
Reaplica el script de aprovisionamiento |
vagrant destroy |
Elimina la VM completamente |
🔹 Buenas prácticas
-
Usa carpetas sincronizadas para mantener tu código fuera de la VM.
-
Aísla cada proyecto en una carpeta con su propio
Vagrantfile
. -
Usa aprovisionamiento para evitar tener que configurar manualmente cada vez.
-
Usa variables de entorno o archivos YAML para manejar configuraciones más avanzadas.