Vagrant is highly useful to build and maintain portable virtual software development environment by doing software configuration management.
Vagrant is developed using Ruby. Vagrant uses provisioners like puppet or chef. Also Vagrat natively supports comes providers like Docker, VMware.
Vagrant acts as a middle layer between virtualization software and providers like Docker containers.