A cross-platform tool created by Hashicorp to make configuring and sharing VMs easy by automating VM management with an end-to-end lifecycle management utility. Core benefits of VMs are reproducible environment, isolated and restricted environments, shareable, easy synchronization and consistency (across multiple OS)
Vagrant can be extended via plugins for custom providers, provisioners, commands, and hosts, including Docker.
Describes configuration and provisioning of VMs in Ruby. Unique by project describes machine type, image, networking, provider-specific information, and provisioner details. The commands such as
vagrant up look for a configuration file to run the operation, other commonly used commands are
ssh, destroy, box, rdp
The image to run the VM from. The official repo is located at https://app.vagrantup.com/boxes/search . Box images can be versioned and customized.
Engines and hypervisors used to provision VMs or containers. Currently supports VirtualBox (default), Hyper-V, and Docker. Other custom providers are available, e.g., KVM, AWS.
Sync a directory on the host system with a VM, for example:
config.vm.synced_folder "../data", "vagrant_data"
Provisioners enable automatic installations and updates to configuration changes after the machine is booted via
vagrant up. Examples are: File, Shell, Ansible, Puppet, Chef, Docker, and Salt.
Extends vagrant capabilities. See https://vagrant-lists.github.io/plugins.html
High-level networking options for port forwarding, network connectivity, and network creation. That is, the same Vagrantfile used to provision a VirtualBox VM could be used to provision a VMware machine.
A project's Vagrantfile may describe multiple VMs, that are supposed to interact with each other.
- Automates setting up VMs (speed, highly productive, cost effective)
- Improves consistency in infrastructure provisioning
- Flexible and cross-platform.
- Usable with Docker.
- Easy install and configuration.
- Enables collaboration by providing a predictable environment.