Vagrant is Awesome

I’ve been using Vagrant in my workflow for a few months now, and I love it. Vagrant is a slick way to build and reproduce development environments using virtual machines. Vagrant also works with provisioning tools Chef and Puppet. With Vagrant and Chef, I was able to get a full Python/Django install on a virtual machine up and working in about 10 minutes.

Why not just use vanilla VirtualBox or VMWare?

Vagrant excels at portability. You can package each virtual machine created with Vagrant into a Vagrant box by simply running

vagrant package --vagrantfile Vagrantfile.pkg

inside your Vagrant directory. This allows you to share your development environment with colleagues, servers, machines, or anywhere else replication is useful. Vagrant also provides seamless SSH, port forwarding, and file sharing functionality between your local and virtual machines.

Installation currently requires VirtualBox to install, but the main dev (@mitchellh) is working on VMWare integration, and possibly other platforms.

Vagrant uses a base box for establishing an OS skeleton. Any packages on top of this are provisioned using Chef or Puppet. A list of community-maintained base boxes can be downloaded at http://www.vagrantbox.es/.

Vagrant is a great solution for developing in a team, and keeps your local environment from being muddied by conflicting language specific installs. I tend to create vagrant boxes based on the type of language/framework I’m using. One for Rails, one for Django, one for CodeIgniter, etc..

Get started at http://docs.vagrantup.com/v1/docs/getting-started/index.html, and if you already use Vagrant, leave some of your own use cases in the comments.