Vagrant tutorial for beginners

Vagrant is a tool used to simplify building and managing Virtual Machines in a very simple yet powerful way. If you, like me, are tired of installing Linux Virtual Machines as I do, you will welcome Vagrant into your life. Let’s learn more about Vagrant!

Table of contents
Introduction
Vagrant installation
Vagrant basic commands
Vagrantfile
Final thoughts
Resources

Introduction

How many times have you created a Virtual Machine?

You know the drill: You download a Linux image, create a Virtual Machine, select your options, add the .iso file, start the installation process then wait for something between 15 and 30 minutes. If you did this once or twice every year, it would be ok, but sometimes you need to create a lot for Virtual Machines, and time is lost by waiting.

What if we could simplify and speed up the process?

Enter Vagrant

Vagrant is an open-source tool for building and managing virtualized development environments. Vagrant uses configuration files to define the virtual machine settings and provisions them with the required software and tools. Or you can run a few commands and install a Virtual Machine in seconds. This approach ensures that all team members work in the same development environment, reducing compatibility issues and streamlining the development process.

With Vagrant, instead of doing all the Download a Linux image, create a Virtual Machine, etc processes, we will fetch an existing image from a Vagrant repository and add it to your Virtual Machine manager in 2 minutes. It is not an expression, it takes 2 minutes.

How does it work?

Vagrant downloads a pre-existing Virtual Machine installation (Vagrant calls them boxes), adds it to your Virtual Machine manager and sets the configuration automatically.

How cool is that?

You can run the command vagrant init generic/ubuntu2204 to download an Ubuntu 22.04 Jellyfish box, and vagrant up to start the Virtual Machine. Now, you can open it in your VM or just connect to it with the command vagrant ssh.

Vagrant installation

As the installation depends on what Operating System you have, you just need to enter a few commands in your terminal. As this changes every few months/years, I’ll link you to the official Vagrant Installation site.

For example, for Ubuntu/Debian, open your terminal and enter:

wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install vagrant

You also need to have installed a virtualization program, such as VirtualBox.

Downloading your first Vagrant box

Ok, you have Vagrant and VirtualBox installed, now what?

Why don’t we start with a download? Download a Centos VM with

vagrant init geerlingguy/centos7

Then start it with:

vagrant up

The VM is up and running. Now you can open it on VirtualBox or, if you don’t need the GUI, you can connect to it via SSH with:

vagrant ssh

As simple as that. As Vagrant manages all the processes, you don’t need to enter the username or the IP to connect to it. Vagrant boxes come with a user already created (Username: vagrant, Password: vagrant) so you can log in to the machine.

Vagrant basic commands

We just saw how we can download and create a new Virtual Machine, but what more we can do with Vagrant?

Here’s a list of basic commands:

Creating a VM

# Install a box
vagrant init <BOX_NAME>

Managing a Vagrant VM state

# Start a Vagrant VM
vagrant up

# Stop a Vagrant VM
vagrant halt

# Resume a Vagrant VM
vagrant resume

# Reload a Vagrant VM
vagrant reload

# Suspend a Vagrant VM
vagrant suspend

# Delete a Vagrant VM
vagrant destroy

Vagrant VM status

# Check a Vagrant VM state
vagrant status

# Check all Vagrant VM states
vagrant global-status

Provisioning

# Force provisioning
vagrant provision

# Use the debug flag to add more verbosity
vagrant provision --debug

# Restart the virtual machine and force provisioning
vagrant reload --provision

Connecting to a VM

# Connect to a Vagrant VM via SSH
vagrant ssh

# Connect to a specific Vagrant VM via SSH
vagrant ssh <BOX_NAME>

Managing boxes

# List all boxes installed
vagrant box list

# Check of updates
vagrant box outdated

# Download a box
vagrant box add <BOX_NAME> <URL>

# Delete a box
vagrant box remove <BOX_NAME>

Vagrantfile

We can also edit your Vagrant boxes with a Vagrantfile.

A Vagrantfile is a configuration file used to define and configure the various aspects of Vagrant-managed virtual machines. It allows us to specify settings such as the virtual machine’s networking, and provisioning, among other parameters.

Then, we can use this Vagrantfile on multiple machines at the same time to create Virtual Machines with the same specs. How cool is that?

If you want to edit a Vagrantfile, open it with your IDE (Atom, Notepad++, Sublime text, VIM, VS Code…) and uncomment any text you want to use.

Examples

# Add a bridged port
config.vm.network "public_network"

# Add a bridged port with a static IP
config.vm.network "private_network", ip: "192.168.1.222"

# Specify VM's memory and CPUs
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.cpus = 2
  end

# Share a folder from your host PC to the Vagrant VM
config.vm.synced_folder "C:\\Users\\<YOUR_USERNAME>\\Desktop\\shared_files", "/home/vagrant/vagrant_data"

# Provisioning the VM
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y apache2
  SHELL

Of course, there are more options. You can read more about them in the official Documentation.

You can also download my Vagrant Cheat Sheets.

Final thoughts

As we already saw, Vagrant offers several benefits for developers and IT professionals, including:

  1. Consistent Development Environments: Vagrant ensures that every team member works in an identical environment, reducing “it works on my machine” issues.
  2. Efficiency: It streamlines the setup process for new team members, as well as the onboarding of existing projects.
  3. Isolation: Vagrant keeps project dependencies and configurations isolated from each other, preventing conflicts between projects.
  4. Cross-Platform Compatibility: Vagrant provides a consistent environment across different operating systems, promoting seamless collaboration.
  5. Reproducibility: With Vagrant, it’s easy to reproduce environments for testing, debugging, and production, enhancing overall reliability.
  6. Resource Optimization: It allows for efficient resource usage by consolidating multiple development environments on a single machine.

Overall, Vagrant simplifies the development workflow, enhances collaboration, and improves the reliability of software projects.

And you just saw how easy it is to use. At the bare minimum, you can work with just 2 or 3 commands to download, run and connect to it via SSH.

Vagrant should become a tool in your belt, professionally or not.

Resources

Vagrant installation

VirtualBox installation

VagrantfileDocs

Linux File System

Vagrant Cheat Sheet

1 thought on “Vagrant tutorial for beginners

Comments are closed.