Vagrant is an open source tool to create multiple development environments for developers and system administrators, and development environments managed by Vagrant can run on local virtualized platforms such as VirtualBox or VMware, in the cloud via AWS or OpenStack, or in containers such as with Docker or raw LXC.. Using Vagrant, you can create easy to configure, reproducible, and portable work environments built on top of industry-standard technology. Vagrant works well on all Modern Linux distributions, Mac OS X, and Windows platforms.
Vagrant provides the disposable environment and consistent workflow to develop web applications, and test things like your own scripts, codes, Chef cookbooks, puppet modules, and more. Once you done all the things using vagrant, you can wrap up the box, and distribute it to others in your team or to the public. So that they can run their own development environments from the same configuration. It doesn’t matter whether you created the virtual environments in Linux, Windows or Mac. Everyone in your group can use the same virtual environments to develop and test their codes, programs etc.
Installation
As mentioned before, Vagrant needs virtualization tools like Oracle VirtualBox, VMWare, or AWS to manage the virtual machines. In this tutorial, I will be using Ubuntu 14.04 host system with Oracle VirtualBox to install and test Vagrant.
First, install Oracle VirtualBox, and make sure you’re able to create virtual machines using it. VirtualBox, installation is not that difficult, and is available on Ubuntu official repositories. To install virtualbox from Terminal enter the following command:
sudo apt-get install virtualbox
Or,
You can install it via Ubuntu Software Center. Open up the Ubuntu Software Center, search for the virtualbox package, and Install it.
Once you installed virtualbox, head over to Vagrant download page, and download and install the latest version depending upon the OS and architecture of your machine. In my case, I downloaded the 64bit installer file for my Ubuntu 14.04 desktop.
Vagrant installation is damn easy. After downloading the vagrant installer file, Install it on Ubuntu like system as shown below:
sudo dpkg -i vagrant_1.6.3_x86_64.deb
Usage
Vagrant virtual environments are called boxes. The boxes can be used by anyone on any platform that Vagrant supports to bring up an identical working environment.
You can download the ready made boxes either from the official Vagrant cloud page, or from the Vagrant community website.
Adding and downloading Boxes from the Vagrant Cloud:
First, let us add and create a Vagrant box from the official site. To do that go to the Vagrant Cloud page, and click the link “Discover Boxes”.
Search for the required boxes that suits to your virtualization tool. In my case, I am going to deploy CentOS 6.5 box for Oracle VirtualBox.
To do that, enter the following command:
vagrant box add chef/centos-6.5
Sample output:
==> box: Loading metadata for box 'chef/centos-6.5' box: URL: https://vagrantcloud.com/chef/centos-6.5 This box can work with multiple providers! The providers that it can work with are listed below. Please review the list and choose the provider you will be working with. 1) virtualbox 2) vmware_desktop Enter your choice: 1 ==> box: Adding box 'chef/centos-6.5' (v1.0.0) for provider: virtualbox box: Downloading: https://vagrantcloud.com/chef/centos-6.5/version/1/provider/virtualbox.box [...]
Or, you can directly choose the exact download URL of the Box, and download it. First, find the required box using the Discover boxes link on the top of the page. Select the desired box, and virtual environment. Refer the following screenshot.
Copy the code, and paste on your Terminal and hit enter key to start downloading the CentOS 6.5 Box template.
vagrant init chef/centos-6.5-i386
Sample output:
A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
Then, run the following command to start downloading the CentOS 6.5 virtual environment.
vagrant up
Sample output:
Bringing machine 'default' up with 'virtualbox' provider... ==> default: Box 'chef/centos-6.5-i386' could not be found. Attempting to find and install... default: Box Provider: virtualbox default: Box Version: >= 0 ==> default: Loading metadata for box 'chef/centos-6.5-i386' default: URL: https://vagrantcloud.com/chef/centos-6.5-i386 ==> default: Adding box 'chef/centos-6.5-i386' (v1.0.0) for provider: virtualbox default: Downloading: https://vagrantcloud.com/chef/centos-6.5-i386/version/1/provider/virtualbox.box ==> default: Successfully added box 'chef/centos-6.5-i386' (v1.0.0) for 'virtualbox'! ==> default: Importing base box 'chef/centos-6.5-i386'... ==> default: Matching MAC address for NAT networking... ==> default: Checking if box 'chef/centos-6.5-i386' is up to date... ==> default: Setting the name of the VM: sk_default_1407142400228_76387 ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 => 2222 (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: Warning: Connection timeout. Retrying... default: Warning: Connection timeout. Retrying... default: Warning: Connection timeout. Retrying... default: Warning: Remote connection disconnect. Retrying... default: Warning: Remote connection disconnect. Retrying... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Mounting shared folders... default: /vagrant => /home/sk
If you got the output like above, congratulations! You’ve successfully setup the CentOS virtual environment. You can verify it by SSH to your vagrant box or open up the virtualbox software, and you’ll there see the vagrant box has been added and run on.
Adding and downloading Boxes from the Vagrant Community website:
The images in this site are not tested by the Vagrant development team. Use them at your own risk.
First go the vagrantbox website, and pick any box of your choice.
Copy the required Vagrant box URL. For example, let us add CentOS 6.4 64bit box:
vagrant box add centos-6.4 https://github.com/2creatives/vagrant-centos/releases/download/v6.4.2/centos64-x86_64-20140116.box
Initialize the box:
vagrant box init centos-6.4
And then, run the following command to start the virtual machine:
vagrant up
SSH To Vagrant boxes
Now, you can login to your Vagrant box as shown below. The default vagrant box username will be: vagrant, and the password of the root user will be: vagrant.
vagrant ssh
Sample output:
Last login: Fri Mar 7 15:49:03 2014 from ddcwbbrt2-int-3-1.mckesson.com [vagrant@localhost ~]$
To switch to the root user, enter the command “su” without quotes, and the default password for root user is: vagrant.
Working On Vagrant Virtual Environments
You can use and work with the Vagrant boxes as the way you work with a normal physical machines. To find the list of Vagrant commands, enter the following command:
vagrant help
Sample output:
Usage: vagrant [options] <command> [<args>] -v, --version Print the version and exit. -h, --help Print this help. Common commands: box manages boxes: installation, removal, etc. connect connect to a remotely shared Vagrant environment destroy stops and deletes all traces of the vagrant machine global-status outputs status Vagrant environments for this user halt stops the vagrant machine help shows the help for a subcommand init initializes a new Vagrant environment by creating a Vagrantfile login log in to Vagrant Cloud package packages a running vagrant environment into a box plugin manages plugins: install, uninstall, update, etc. provision provisions the vagrant machine rdp connects to machine via RDP reload restarts vagrant machine, loads new Vagrantfile configuration resume resume a suspended vagrant machine share share your Vagrant environment with anyone in the world ssh connects to machine via SSH ssh-config outputs OpenSSH valid configuration to connect to the machine status outputs status of the vagrant machine suspend suspends the machine up starts and provisions the vagrant environment version prints current and latest Vagrant version For help on any individual command run `vagrant COMMAND -h` Additional subcommands are available, but are either more advanced or not commonly used. To see all subcommands, run the command `vagrant list-commands`.
To restart a Vagrant box, simply run the following command:
vagrant reload
Likewise, to shutdown a box, run the following command:
vagrant halt
To remove a virtual environment completely, run:
vagrant destroy
This will destroy all files except the Vagrantfile.
Creating New Vagrant Images
After testing or installing the codes or web applications on your Vagrant box, exit from the instance shell, and go back to the host shell.
Run the following command to create a new image:
vagrant package
Sample output:
==> default: Attempting graceful shutdown of VM... ==> default: Clearing any previously set forwarded ports... ==> default: Exporting VM... ==> default: Compressing package to: /home/sk/package.box
The new image will be created and saved in your current directory.
Now, stop and delete existing boxes, and delete the Vagrantfile too.
vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y ==> default: Destroying VM and associated drives...
rm Vagrantfile
Register the newly create package with new name(Ex.test-vg):
vagrant box add test-vg package.box
Sample output:
==> box: Adding box 'test-vg' (v0) for provider: box: Downloading: file:///home/sk/package.box ==> box: Successfully added box 'test-vg' (v0) for 'virtualbox'!
Now, initialize the new vagrant box as shown below:
vagrant init test-vg
Sample output:
A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
Finally, start the new vagrant box:
vagrant up
Sample output:
Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'test-vg'... ==> default: Matching MAC address for NAT networking... ==> default: Setting the name of the VM: sk_default_1407157058202_42993 ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 => 2222 (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: Warning: Connection timeout. Retrying... default: Warning: Connection timeout. Retrying... default: Warning: Connection timeout. Retrying... default: Warning: Connection timeout. Retrying... default: Warning: Remote connection disconnect. Retrying... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Mounting shared folders... default: /vagrant => /home/sk
Start using the new box.
That’s all for now. Hope this tutorial gave you the basic installation and usage details of Vagrant application. Refer the Official documentation page to find out more.
Cheers!
Reference: