Convert Figma logo to code with AI

hashicorp logovagrant

Vagrant is a tool for building and distributing development environments.

26,159
4,426
26,159
741

Top Related Projects

15,037

Packer is a tool for creating identical machine images for multiple platforms from a single source configuration.

:warning: This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md :warning:

62,307

Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy and maintain. Automate everything from code deployment to network configuration to cloud management, in a language that approaches plain English, using SSH, with no agents to install on remote systems. https://docs.ansible.com.

7,565

Chef Infra, a powerful automation platform that transforms infrastructure into code automating how infrastructure is configured, deployed and managed across any environment, at any scale

7,382

Server automation framework and application

8,819

[Project ended] rkt is a pod-native container engine for Linux. It is composable, secure, and built on standards.

Quick Overview

Vagrant is an open-source tool for building and managing virtual machine environments in a single workflow. It provides a simple and consistent way to create and configure lightweight, reproducible, and portable development environments across different platforms.

Pros

  • Easy setup and configuration of development environments
  • Cross-platform compatibility (Windows, macOS, Linux)
  • Supports multiple providers (VirtualBox, VMware, AWS, etc.)
  • Extensive plugin ecosystem for additional functionality

Cons

  • Can be resource-intensive, especially when running multiple VMs
  • Learning curve for advanced configurations and customizations
  • Performance overhead compared to native development environments
  • Limited support for some cloud providers

Code Examples

  1. Basic Vagrantfile for a Ubuntu 20.04 VM:
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  config.vm.network "private_network", ip: "192.168.33.10"
end
  1. Provisioning a VM with a shell script:
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y nginx
  SHELL
end
  1. Multi-machine configuration:
Vagrant.configure("2") do |config|
  config.vm.define "web" do |web|
    web.vm.box = "ubuntu/focal64"
    web.vm.network "private_network", ip: "192.168.33.10"
  end

  config.vm.define "db" do |db|
    db.vm.box = "ubuntu/focal64"
    db.vm.network "private_network", ip: "192.168.33.11"
  end
end

Getting Started

  1. Install Vagrant from the official website: https://www.vagrantup.com/downloads
  2. Install a provider (e.g., VirtualBox): https://www.virtualbox.org/wiki/Downloads
  3. Create a new directory for your project and navigate to it in the terminal
  4. Create a Vagrantfile:
    vagrant init ubuntu/focal64
    
  5. Start the VM:
    vagrant up
    
  6. SSH into the VM:
    vagrant ssh
    
  7. When finished, destroy the VM:
    vagrant destroy
    

Competitor Comparisons

15,037

Packer is a tool for creating identical machine images for multiple platforms from a single source configuration.

Pros of Packer

  • Focuses on creating identical machine images for multiple platforms
  • Better suited for building immutable infrastructure
  • Integrates well with configuration management tools

Cons of Packer

  • Steeper learning curve for beginners
  • Less flexibility for local development environments
  • Limited to image creation, not ongoing VM management

Code Comparison

Vagrant (Vagrantfile):

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.provision "shell", inline: "echo Hello, World!"
end

Packer (packer.json):

{
  "builders": [{
    "type": "virtualbox-iso",
    "guest_os_type": "Ubuntu_64",
    "iso_url": "http://releases.ubuntu.com/18.04/ubuntu-18.04.5-server-amd64.iso",
    "ssh_username": "vagrant",
    "ssh_password": "vagrant"
  }],
  "provisioners": [{
    "type": "shell",
    "inline": ["echo Hello, World!"]
  }]
}

Summary

Vagrant is primarily designed for managing development environments, offering an easy way to create and configure lightweight, reproducible, and portable virtual machines. It's ideal for local development and testing.

Packer, on the other hand, is focused on building identical machine images for multiple platforms from a single source configuration. It's better suited for creating consistent production environments and implementing immutable infrastructure practices.

While both tools can work together in a workflow, they serve different primary purposes in the infrastructure-as-code ecosystem.

:warning: This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md :warning:

Pros of Docker CE

  • Lightweight and faster to spin up containers compared to Vagrant's VMs
  • Better suited for microservices and containerized applications
  • Easier to scale and deploy in production environments

Cons of Docker CE

  • Less flexibility in terms of operating system choices
  • More complex networking setup compared to Vagrant
  • Steeper learning curve for beginners

Code Comparison

Vagrant

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.provision "shell", path: "bootstrap.sh"
end

Docker CE

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html

Summary

Vagrant and Docker CE are both popular tools for creating development environments, but they serve different purposes. Vagrant is better suited for creating full virtual machines with more flexibility in OS choices, while Docker CE excels in containerization, making it ideal for microservices and easier deployment. Docker CE is generally faster and more lightweight, but it may have a steeper learning curve for beginners. The choice between the two depends on the specific needs of the project and the development team's preferences.

62,307

Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy and maintain. Automate everything from code deployment to network configuration to cloud management, in a language that approaches plain English, using SSH, with no agents to install on remote systems. https://docs.ansible.com.

Pros of Ansible

  • Agentless architecture, allowing management of remote systems without installing software on them
  • Broader scope for configuration management and application deployment across entire infrastructure
  • Declarative language (YAML) for easier readability and maintainability

Cons of Ansible

  • Steeper learning curve for complex tasks and playbook creation
  • Slower execution compared to Vagrant for local development environments
  • Less focus on local development workflows and more on production infrastructure management

Code Comparison

Ansible playbook example:

- hosts: webservers
  tasks:
    - name: Install Apache
      apt:
        name: apache2
        state: present
    - name: Start Apache
      service:
        name: apache2
        state: started

Vagrant configuration example:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y apache2
    systemctl start apache2
  SHELL
end

Both tools serve different purposes but can be complementary. Ansible excels in managing and configuring multiple remote systems, while Vagrant focuses on creating and managing local development environments. The choice between them depends on the specific use case and development workflow requirements.

7,565

Chef Infra, a powerful automation platform that transforms infrastructure into code automating how infrastructure is configured, deployed and managed across any environment, at any scale

Pros of Chef

  • More comprehensive configuration management and automation capabilities
  • Better suited for managing large-scale infrastructure and complex deployments
  • Offers a wider range of resources and cookbooks for various system configurations

Cons of Chef

  • Steeper learning curve and more complex setup compared to Vagrant
  • Requires more overhead and resources to run, especially for smaller projects
  • Less focused on local development environments, which is Vagrant's primary use case

Code Comparison

Chef (example recipe):

package 'nginx' do
  action :install
end

service 'nginx' do
  action [:enable, :start]
end

Vagrant (example Vagrantfile):

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.provision "shell", inline: "apt-get update && apt-get install -y nginx"
end

Chef focuses on defining the desired state of a system using recipes, while Vagrant emphasizes creating and managing development environments using a simpler configuration file. Chef's code is more declarative and resource-oriented, whereas Vagrant's configuration is more procedural and focused on VM provisioning.

7,382

Server automation framework and application

Pros of Puppet

  • More comprehensive configuration management and automation capabilities
  • Better suited for managing large-scale infrastructure and complex deployments
  • Supports a wider range of operating systems and platforms

Cons of Puppet

  • Steeper learning curve and more complex setup compared to Vagrant
  • Requires more resources and overhead for smaller projects or development environments
  • Less focused on local development environments and more on production infrastructure

Code Comparison

Vagrant (Ruby):

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.provision "shell", inline: "apt-get update && apt-get install -y nginx"
end

Puppet (Puppet DSL):

node default {
  package { 'nginx':
    ensure => installed,
  }
  service { 'nginx':
    ensure => running,
    enable => true,
  }
}

While Vagrant focuses on creating and managing local development environments, Puppet is designed for configuration management and automation across multiple machines. Vagrant's code is typically simpler and more focused on VM provisioning, whereas Puppet's code is more declarative and suited for defining the desired state of systems.

8,819

[Project ended] rkt is a pod-native container engine for Linux. It is composable, secure, and built on standards.

Pros of rkt

  • Designed for container runtime security and isolation
  • Supports multiple container formats (including Docker images)
  • Lightweight and focused on simplicity

Cons of rkt

  • Less widespread adoption compared to Vagrant
  • Limited ecosystem and tooling support
  • Steeper learning curve for beginners

Code Comparison

rkt:

# Run a Docker image with rkt
rkt run docker://nginx

# List running containers
rkt list

# Stop a container
rkt stop <uuid>

Vagrant:

# Vagrantfile example
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.provision "shell", inline: "apt-get update && apt-get install -y nginx"
end

Summary

rkt is a container runtime focused on security and simplicity, while Vagrant is a tool for managing development environments using virtual machines. rkt excels in container isolation and supports multiple formats, but has a smaller ecosystem. Vagrant offers easier setup for complete development environments and better integration with various providers, but may be overkill for simple container needs. The choice between them depends on specific project requirements and team expertise.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Vagrant

Vagrant is a tool for building and distributing development environments.

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.

Vagrant provides the framework and configuration format to create and manage complete portable development environments. These development environments can live on your computer or in the cloud, and are portable between Windows, Mac OS X, and Linux.

Quick Start

Package dependencies: Vagrant requires bsdtar and curl to be available on your system PATH to run successfully.

For the quick-start, we'll bring up a development machine on VirtualBox because it is free and works on all major platforms. Vagrant can, however, work with almost any system such as OpenStack, VMware, Docker, etc.

First, make sure your development machine has VirtualBox installed. After this, download and install the appropriate Vagrant package for your OS.

To build your first virtual environment:

vagrant init hashicorp/bionic64
vagrant up

Note: The above vagrant up command will also trigger Vagrant to download the bionic64 box via the specified URL. Vagrant only does this if it detects that the box doesn't already exist on your system.

Getting Started Guide

To learn how to build a fully functional development environment, follow the getting started guide.

Installing from Source

If you want the bleeding edge version of Vagrant, we try to keep main pretty stable and you're welcome to give it a shot. Please review the installation page here.

Contributing to Vagrant

Please take time to read the HashiCorp Community Guidelines and the Vagrant Contributing Guide.

Then you're good to go!