cli-tool
intermediate
utility
Vagabundos
"Clase de la hoja"
########################################################################################################################################################################################################################################################## Copiar todos los comandos
■/div titulada
Completo HashiCorp Vagrant comandos y flujos de trabajo para la gestión del entorno de desarrollo y el suministro de máquinas virtuales.
Instalación
Command
Description
vagrant version
Show Vagrant version
vagrant -h
Show help information
vagrant init
Initialize new Vagrantfile
vagrant init ubuntu/jammy64
Initialize with specific box
Box Management
Operaciones en caja
Command
Description
vagrant box list
List installed boxes
vagrant box add ubuntu/jammy64
Add box
vagrant box add --name mybox /path/to/box.box
Add local box
vagrant box remove ubuntu/jammy64
Remove box
vagrant box update
Update all boxes
vagrant box update --box ubuntu/jammy64
Update specific box
Command
Description
vagrant box outdated
Check for outdated boxes
vagrant box prune
Remove old box versions
vagrant box repackage ubuntu/jammy64
Repackage box
VM Gestión del ciclo de vida
Operaciones básicas
Command
Description
vagrant up
Start and provision VM
vagrant halt
Shutdown VM
vagrant reload
Restart VM
vagrant destroy
Destroy VM
vagrant suspend
Suspend VM
vagrant resume
Resume suspended VM
Command
Description
vagrant status
Show VM status
vagrant global-status
Show all VMs status
vagrant global-status --prune
Clean up invalid entries
SSH y Access
SSH Operations
Command
Description
vagrant ssh
SSH into VM
vagrant ssh-config
Show SSH configuration
vagrant ssh -- -L 8080:localhost:80
SSH with port forwarding
Provisioning
Comandos de provisión
Command
Description
vagrant provision
Run provisioners
vagrant provision --provision-with shell
Run specific provisioner
vagrant up --provision
Start and provision
vagrant reload --provision
Restart and provision
Multi-Machine Environments
Comandos Multi-Machine
Command
Description
vagrant up web
Start specific machine
vagrant ssh web
SSH to specific machine
vagrant halt db
Halt specific machine
vagrant destroy --force
Destroy all without confirmation
Juegos de rol
Gestión de instantáneas
Command
Description
vagrant snapshot save snapshot_name
Save snapshot
vagrant snapshot list
List snapshots
vagrant snapshot restore snapshot_name
Restore snapshot
vagrant snapshot delete snapshot_name
Delete snapshot
Gestión de plugins
Operaciones de enchufe
Command
Description
vagrant plugin list
List installed plugins
vagrant plugin install vagrant-vbguest
Install plugin
vagrant plugin uninstall vagrant-vbguest
Uninstall plugin
vagrant plugin update
Update all plugins
Ejemplos de perfil de vagabundeo
Basic Vagrantfile
Vagrant.configure("2") do|config|
config.vm.box = "ubuntu/jammy64"
config.vm.hostname = "myserver"
# Network configuration
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.network "forwarded_port", guest: 80, host: 8080
# Provider configuration
config.vm.provider "virtualbox" do|vb|
vb.memory = "2048"
vb.cpus = 2
vb.name = "MyVM"
end
# Provisioning
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx
systemctl enable nginx
systemctl start nginx
SHELL
end
Multi-Machine Setup
Vagrant.configure("2") do|config|
# Web server
config.vm.define "web" do|web|
web.vm.box = "ubuntu/jammy64"
web.vm.hostname = "web"
web.vm.network "private_network", ip: "192.168.56.10"
web.vm.provider "virtualbox" do|vb|
vb.memory = "1024"
vb.cpus = 1
end
web.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx
SHELL
end
# Database server
config.vm.define "db" do|db|
db.vm.box = "ubuntu/jammy64"
db.vm.hostname = "database"
db.vm.network "private_network", ip: "192.168.56.11"
db.vm.provider "virtualbox" do|vb|
vb.memory = "2048"
vb.cpus = 2
end
db.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y mysql-server
SHELL
end
end
Configuración avanzada
Vagrant.configure("2") do|config|
config.vm.box = "ubuntu/jammy64"
config.vm.box_version = "20230607.0.0"
# Synced folders
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.synced_folder "./app", "/var/www/html",
owner: "www-data", group: "www-data"
# Network configuration
config.vm.network "private_network",
ip: "192.168.56.10",
netmask: "255.255.255.0"
config.vm.network "public_network",
bridge: "en0: Wi-Fi (AirPort)"
# Port forwarding
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 443, host: 8443
# Provider-specific configuration
config.vm.provider "virtualbox" do|vb|
vb.gui = false
vb.memory = "4096"
vb.cpus = 4
vb.name = "Development Server"
# VirtualBox specific settings
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
end
# Multiple provisioners
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get upgrade -y
SHELL
config.vm.provision "file",
source: "./configs/nginx.conf",
destination: "/tmp/nginx.conf"
config.vm.provision "shell", path: "scripts/setup.sh"
config.vm.provision "ansible" do|ansible|
ansible.playbook = "playbook.yml"
ansible.inventory_path = "inventory"
end
end
Métodos de disposición
Shell Provisioning
# Inline shell commands
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y docker.io
usermod -aG docker vagrant
SHELL
# External script
config.vm.provision "shell", path: "scripts/bootstrap.sh"
# Privileged and non-privileged
config.vm.provision "shell", privileged: false, inline: <<-SHELL
echo "Running as vagrant user"
SHELL
# Environment variables
config.vm.provision "shell", env: \\\\{"DEBIAN_FRONTEND" => "noninteractive"\\\\}, inline: <<-SHELL
apt-get install -y mysql-server
SHELL
Suministro de archivos
config.vm.provision "file",
source: "~/.ssh/id_rsa.pub",
destination: "~/.ssh/authorized_keys"
config.vm.provision "file",
source: "./configs/",
destination: "/tmp/configs"
Ansible Provisioning
config.vm.provision "ansible" do|ansible|
ansible.playbook = "site.yml"
ansible.inventory_path = "inventory/vagrant"
ansible.limit = "all"
ansible.verbose = "v"
ansible.extra_vars = \\\\{
nginx_port: 80,
database_name: "myapp"
\\\\}
end
Docker Provisioning
config.vm.provision "docker" do|d|
d.pull_images "nginx"
d.pull_images "mysql:8.0"
d.run "nginx",
args: "-p 80:80 -v /vagrant/html:/usr/share/nginx/html"
d.run "mysql",
args: "-e MYSQL_ROOT_PASSWORD=secret -p 3306:3306"
end
Configuración de red
Redes privadas
# Static IP
config.vm.network "private_network", ip: "192.168.56.10"
# DHCP
config.vm.network "private_network", type: "dhcp"
# Multiple interfaces
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.network "private_network", ip: "10.0.0.10"
Redes públicas
# Bridge to default interface
config.vm.network "public_network"
# Bridge to specific interface
config.vm.network "public_network", bridge: "en0: Wi-Fi (AirPort)"
# Static IP on public network
config.vm.network "public_network", ip: "192.168.1.100"
Port Forwarding
# Basic port forwarding
config.vm.network "forwarded_port", guest: 80, host: 8080
# Multiple ports
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 443, host: 8443
config.vm.network "forwarded_port", guest: 3306, host: 3306
# Auto-correct port conflicts
config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true
Configuración del proveedor
Proveedor VirtualBox
config.vm.provider "virtualbox" do|vb|
vb.gui = true
vb.memory = "4096"
vb.cpus = 4
vb.name = "MyVM"
# Advanced settings
vb.customize ["modifyvm", :id, "--vram", "128"]
vb.customize ["modifyvm", :id, "--accelerate3d", "on"]
vb.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
end
VMware Proveedor
config.vm.provider "vmware_desktop" do|vmware|
vmware.vmx["memsize"] = "4096"
vmware.vmx["numvcpus"] = "4"
vmware.vmx["displayName"] = "MyVM"
end
Proveedor Hyper-V
config.vm.provider "hyperv" do|hv|
hv.memory = 4096
hv.cpus = 4
hv.vmname = "MyVM"
end
Carpetas sincronizadas
Carpetas básicas sincronizadas
# Default synced folder (disabled)
config.vm.synced_folder ".", "/vagrant", disabled: true
# Custom synced folder
config.vm.synced_folder "./src", "/var/www/html"
# With options
config.vm.synced_folder "./app", "/var/www/html",
owner: "www-data",
group: "www-data",
mount_options: ["dmode=775,fmode=664"]
NFS Sinced Folders
config.vm.synced_folder "./", "/vagrant",
type: "nfs",
nfs_udp: false,
nfs_version: 4
SMB Sinced Folders (Windows)
config.vm.synced_folder "./", "/vagrant",
type: "smb",
smb_username: "username",
smb_password: "password"
Buenas prácticas
Optimización del rendimiento
Asignación de recursos : Asignar la CPU apropiada y la memoria
Carpetas sincronizadas : Use NFS para un mejor rendimiento en macOS/Linux
** Selección de bloques**: Elija cajas base mínimas
Snapshot Management : Use instantáneas para retrocesos rápidos
** Optimización del proveedor**: Configurar optimizaciones específicas del proveedor
Seguridad
SSH Keys : Utilice las teclas SSH en lugar de contraseñas
Isolación de red : Use redes privadas cuando sea posible
Firewall : Configurar reglas apropiadas de cortafuegos
Actualizaciones : Mantener cajas y Vagrant actualizado
Secrets : No cometas secretos al control de versiones
Development Workflow
Version Control : Include Vagrantfile en control de versiones
Documentación : Configuración de documentos y uso
Consistencia : Use el mismo entorno en equipo
Testing : Test provisioning scripts
Cleanup : Limpiar regularmente VM y cajas sin usar
Solución de problemas
Logs : Revisar los registros de Vagrant y proveedores
SSH : Use vagrant ssh-config
_ para depurar
Networking : Comprobar conectividad de red
Provisioning : Probando scripts por separado
Recursos : Supervisar los recursos del sistema anfitrión