Getting started with Vagrant
Table of Contents
Getting started with Vagrant. Very first steps to install and run a vagrant image in a Mac


    
        #
    
    macOS install
Install Vagrant from the package in the official download page. There is a homebrew package but Hashicorp discourages installing from package managers.
Once installed it is added to the PATH variable:
% vagrant version
Installed Version: 2.2.9
Latest Version: 2.2.9
You're running an up-to-date version of Vagrant!
    
        #
    
    Documentation
    
        #
    
    Getting started
Vagrant can work with several providers, but VirtualBox is builtin. So make sure VirtualBox is installed as well.
    
        ##
    
    Up and running
This works out of the box:
$ vagrant init hashicorp/bionic64
$ vagrant upVM can be terminated with:
$ vagrant destroy
    
        ##
    
    Project setup
First step is creating a Vagrantfile. This is:
- the root directory of the project
 - describes the machines and resources you need
 
There is a command to setup the root directory of a project:
$ mkdir vagrant_getting_started
$ cd vagrant_getting_started
$ vagrant init hashicorp/bionic64You can also run vagrant init in an existing directory to initialize it.
    
        ##
    
    Installing a box
You can add boxes with vagrant box add.
$ vagrant box add hashicorp/bionic64This will download the box named “hashicorp/bionic64” from HashiCorp’s Vagrant Cloud box catalog, a place where you can find and host boxes.
    
        ##
    
    Using a box
Once you add a box, you have to configure it. So open the Vagrantfile and:
Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/bionic64"
end
You can specify a specific version:
Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/bionic64"
  config.vm.box_version = "1.1.0"
end
or an URL
Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/bionic64"
  config.vm.box_url = "https://vagrantcloud.com/hashicorp/bionic64"
end
    
        ##
    
    Up and ssh
You can start the environment and ssh to it:
$ vagrant up
$ vagrant sshvagrant destroy will stop and remove the box from Virtual box, but will not delete the files.
The latter is done by vagrant box remove.
    
        ##
    
    Synced folders
Vagrant shares the project directory with the /vagrant directory in the guest VM. So, after running:
$ vagrant up
$ vagrant sshyou are inside the VM.Then you can see your project directory in /vagrant:
vagrant@vagrant:~$ pwd
/home/vagrant
vagrant@vagrant:~$ cd /vagrant/
vagrant@vagrant:/vagrant$ ls
Vagrantfile
vagrant@vagrant:/vagrant$ ls -la
total 8
drwxr-xr-x  1 vagrant vagrant  128 Jun 13 16:06 .
drwxr-xr-x 24 root    root    4096 Jun 13 16:44 ..
drwxr-xr-x  1 vagrant vagrant  128 Jun 13 16:06 .vagrant
-rw-r--r--  1 vagrant vagrant 3024 Jun 13 16:05 Vagrantfile
    
        ##
    
    Provisioning
There is an automatic provisioning feature builtin. For instance, you can create a script that will run after vagrant up to install software:
#!/usr/bin/env bash
 
apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
  rm -rf /var/www
  ln -fs /vagrant /var/www
fiThen configure the Vagrantfile:
Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/bionic64"
  config.vm.provision :shell, path: "bootstrap.sh"
end
And create an index.html file to verify that it works:
<!DOCTYPE html>
<html>
  <body>
    <h1>Getting started with Vagrant!</h1>
  </body>
</html>Everything will run when you run vagrant up.
If the environment is already running you can use vagrant reload --provision.
    
        ##
    
    Networking
Port forwarding:
Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/bionic64"
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network :forwarded_port, guest: 80, host: 4567
end
This will result in http://127.0.0.1:4567 forwarded to the web server in the guest VM.
See official documentation about networking.
    
        ##
    
    Teardown
You can suspend, halt, or destroy the guest machine:
vagrant suspendvagrant haltvagrant destroy
Finally you can delete from disk:
vagrant box remove NAME
    
        ##
    
    Rebuild
vagrant up will recreate the environment.
    
        ##
    
    Providers
You can use any other provider without changing the Vagrantfile:
$ vagrant up --provider=vmware_fusion
    
        #
    
    References
- Vagrant Crash Course in Youtube: