SlideShare a Scribd company logo
1 of 114
Vagrant: virtualise your
development environment
Michael Peacock
August 2012, SuperMondays
About Me
 @michaelpeacock
Head Developer @ Ground Six
Leading the development team and managing the
development process
We are a tech investment company: you bring ideas, we
partner and build the product
Author
Occasional Speaker
Virtualisation
Virtualisation

 Abstraction layer for your hardware
Virtualisation

 Abstraction layer for your hardware
 Lets multiple Operating Systems run concurrently, each
 running on their own virtual hardware
Virtualisation

 Abstraction layer for your hardware
 Lets multiple Operating Systems run concurrently, each
 running on their own virtual hardware
 Limited by your own physical hardware and your host
 machine
VirtualBox
VirtualBox


 www.virtualbox.org
VirtualBox


 www.virtualbox.org
 Virtualisation software tool
VirtualBox


 www.virtualbox.org
 Virtualisation software tool
 Provides the hardware abstraction layer and an
 interface for running VMs
Vagrant
Vagrant

www.vagrantup.com
 “Create and configure lightweight, reproducable, and
 portable development environments”
Vagrant

www.vagrantup.com
  “Create and configure lightweight, reproducable, and
  portable development environments”
Set of command line tools which interacts with and
automates VirtualBox
Vagrant

www.vagrantup.com
  “Create and configure lightweight, reproducable, and
  portable development environments”
Set of command line tools which interacts with and
automates VirtualBox
Designed around portability
Puppet



Provisioning Service
Why?
Why?
Quick start time for new team members
  Vagrant up: you have a development environment
Why?
Quick start time for new team members
  Vagrant up: you have a development environment
Server configuration can be version controlled
Why?
Quick start time for new team members
  Vagrant up: you have a development environment
Server configuration can be version controlled
Cross-platform: work from any machine
Why?
Quick start time for new team members
  Vagrant up: you have a development environment
Server configuration can be version controlled
Cross-platform: work from any machine
Work on multiple projects? Easy to pickup an old, legacy
project with its funky server configs
Why?
Quick start time for new team members
  Vagrant up: you have a development environment
Server configuration can be version controlled
Cross-platform: work from any machine
Work on multiple projects? Easy to pickup an old, legacy
project with its funky server configs
Can run multiple VMs independently
Why?
Quick start time for new team members
  Vagrant up: you have a development environment
Server configuration can be version controlled
Cross-platform: work from any machine
Work on multiple projects? Easy to pickup an old, legacy
project with its funky server configs
Can run multiple VMs independently
Doesn’t mess with your local, host machine
Some terms
Some terms


Host: Your physical machine
Some terms


Host: Your physical machine
Guest: The VM
Overview
Overview
1.Project specific configuration file
Overview
1.Project specific configuration file
2.Import base box
Overview
1.Project specific configuration file
2.Import base box
3.Boot up Virtual Machine
  1.Forward Ports
  2.Share folders
Overview
1.Project specific configuration file
2.Import base box
3.Boot up Virtual Machine
  1.Forward Ports
  2.Share folders
4.Configure / provision software
3 lines: up and running
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
Let’s try it...
SSH into the box
vagrant ssh
Whats happened?
Whats happened?

Downloaded a base box of Ubuntu, configured for
vagrant
Whats happened?

Downloaded a base box of Ubuntu, configured for
vagrant
Created a new project
  Configured to use this base box by default
Whats happened?

Downloaded a base box of Ubuntu, configured for
vagrant
Created a new project
  Configured to use this base box by default
Booted the VM: vagrant up
Whats happened?

Downloaded a base box of Ubuntu, configured for
vagrant
Created a new project
  Configured to use this base box by default
Booted the VM: vagrant up
Connected into the VM: vagrant ssh
Managing the VM
Managing the VM
Suspend
  vagrant suspend
Managing the VM
Suspend
  vagrant suspend
Resume
  vagrant resume
Managing the VM
Suspend
  vagrant suspend
Resume
  vagrant resume
Shutdown
  vagrant halt
Managing the VM
Suspend
  vagrant suspend
Resume
  vagrant resume
Shutdown
  vagrant halt
Turn on
  vagrant up (re-runs any provisioning tasks)
Lets try it
Suspend
Resume
Shutdown
When shit hits the fan


        vagrant destroy
vagrant destroy: a warning
vagrant destroy: a warning
 The VM is completely wiped
vagrant destroy: a warning
 The VM is completely wiped
 Anything that can’t be replicated from:
   Your project folder (shared folder)
   Vagrant base box
   Vagrant File
   Puppet Manifests
vagrant destroy: a warning
 The VM is completely wiped
 Anything that can’t be replicated from:
   Your project folder (shared folder)
   Vagrant base box
   Vagrant File
   Puppet Manifests
 WILL BE LOST FOREVER
   E.g. Databases (hint: use a DB patching or versioning tool in your
   project folder)
vagrant init
Creates a new Vagrantfile, which instructs
vagrant what too boot and how to do it. Let’s
take a peak.
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant::Config.run do |config|

  config.vm.box = "base"

end
Box to use

# use the box called base
config.vm.box = "base"

# Fallback URL, if we don't have a box called base, download from here
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
Networking
Networking
Host only
  VM is only visible to the host machine

  config.vm.network :hostonly, "192.168.33.10"
Networking
Host only
  VM is only visible to the host machine

  config.vm.network :hostonly, "192.168.33.10"

Bridged
  Network connection to the VM is bridged, letting it
  appear as a device on the network

  config.vm.network :bridged
Ports
Ports

Easiest way to use the VM is to forward ports
  Forwards port X on the host
  To port Y on the guest
Ports

Easiest way to use the VM is to forward ports
  Forwards port X on the host
  To port Y on the guest


config.vm.forward_port 80, 4567
Shared Folders
Shared Folders

Default:
  Current project (folder containing Vagrantfile) is
  mapped to /vagrant
Shared Folders

Default:
  Current project (folder containing Vagrantfile) is
  mapped to /vagrant
New shared folders:
  config.vm.share_folder "name", "/guestmount", "../
  hostfolder"
Provisioning



 So far: we can build and d
Provisioning with Puppet


config.vm.provision :puppet do |puppet|
    puppet.manifests_path = "provision/manifests"
    puppet.manifest_file = "default.pp"
    puppet.module_path = "provision/modules"
end
What can Puppet do
What can Puppet do
Checks conditions:
What can Puppet do
Checks conditions:
Package installed
What can Puppet do
Checks conditions:
Package installed
File exists / contains / etc
What can Puppet do
Checks conditions:
Package installed
File exists / contains / etc
Exec: Run an ad-hock command*

* doesn’t sit well with Puppets “checking” nature.
Execs get re-run (unless you use special conditions) on
vagrant up
Package


package { "apache2":
    ensure => present,
    require => Exec['apt-get update']
  }
Service

  service { "apache2":
      ensure => running,
      require => Package["apache2"]
    }
File

file   { '/etc/apache2/sites-available/default':
	 	    source => '/vagrant/provision/modules/apache/files/default',
	 	    owner => 'root',
	 	    group => 'root'
	 }
Exec

  exec { 'apt-get update':
       	command => '/usr/bin/apt-get update',
       	require => Exec['preparenetworking']
    	}
Users & Groups

   group { "wheel":
   !     ensure => "present",
   ! }
   !
   ! exec { "/bin/echo "%wheel ALL=(ALL) ALL"
   >> /etc/sudoers":
   !     require => Group["wheel"]
   ! }
Users & Groups

    user   { "developer":
    ! !    ensure => "present",
    ! !    gid => "wheel",
    ! !    shell => "/bin/bash",
    ! !    home => "/home/developer",
    ! !    managehome => true,
    ! !    password => "passwordtest",
    ! !    require => Group["wheel"]
    ! }
Stringing it together
  class apache {

      package { "apache2":
        ensure => present,
        require => Exec['apt-get update']
      }

      file { '/var/www/src':
  !       ensure => 'link',
  !       target => '/vagrant/src',
  !       require => Package['apache2']
  !    }
  !
  !    file { '/etc/apache2/sites-available/default':
  !    ! source => '/vagrant/provision/modules/apache/files/default',
  !    ! owner => 'root',
  !    ! group => 'root'
  !    }

      service { "apache2":
        ensure => running,
        require => Package["apache2"]
      }
  }
Using Puppet Modules


      import "apache"
      include apache
Explicit ordering



     stage { 'first': before => Stage[main] }
     class {'apache': stage => first}
Vagrant up
Multiple VMs

Within the vagrantfile, we can define multiple VMs
  E.g. need a separate VM for web and db server to
  mimic production environment?
       Vagrant::Config.run do |config|
         config.vm.define :web do |web_config|
           web_config.vm.box = "web"
           web_config.vm.forward_port 80, 8080
         end

         config.vm.define :db do |db_config|
           db_config.vm.box = "db"
           db_config.vm.forward_port 3306, 3306
         end
       end
Chef


www.opscode.com/chef
Provisioning service with Ruby based configurations
Plugins


 Backing up and snapshotting a VM
 Automated base box creators
Exporting Box

Always using the same stack / versions on your box?
Slow un-reliable Internet connection means puppet
takes an age to run? Export the base box with these
pre-installed
vagrant package
Creating your own box
Virtualbox configured:
  Guest additions
SSH & key based authentication for the vagrant user
Ruby, RubyGems, Puppet and Chef
Export the box
vagrantup.com/v1/docs/base_boxes.html
The Future



More than just VirtualBox
Caveats
Caveats
Funky permissions
  Files created on the host shared folder show without permissions on the
  guest and are inaccessible
  Solution: upgrade virtualbox guest additions on guest
Caveats
   Funky permissions
      Files created on the host shared folder show without permissions on the
      guest and are inaccessible
      Solution: upgrade virtualbox guest additions on guest
   Can’t chmod files within shared folder
config.vm.share_folder("v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777')

      Thanks @AnthonySterling & @ChrisDKemper
Caveats
   Funky permissions
      Files created on the host shared folder show without permissions on the
      guest and are inaccessible
      Solution: upgrade virtualbox guest additions on guest
   Can’t chmod files within shared folder
config.vm.share_folder("v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777')

      Thanks @AnthonySterling & @ChrisDKemper
   Waiting for VM to boot
      Open VirtualBox
      Cancel, halt the VM and try again
Caveats
   Funky permissions
      Files created on the host shared folder show without permissions on the
      guest and are inaccessible
      Solution: upgrade virtualbox guest additions on guest
   Can’t chmod files within shared folder
config.vm.share_folder("v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777')

      Thanks @AnthonySterling & @ChrisDKemper
   Waiting for VM to boot
      Open VirtualBox
      Cancel, halt the VM and try again
Conclusion

Virtualise your development environment
  Easy to add new team members
  Easy to work from other machines
  So long “works on my Machine”
Cheers!


Any questions?


@michaelpeacock
www.michaelpeacock.co.uk

More Related Content

What's hot

Create your very own Development Environment with Vagrant and Packer
Create your very own Development Environment with Vagrant and PackerCreate your very own Development Environment with Vagrant and Packer
Create your very own Development Environment with Vagrant and Packerfrastel
 
It Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software DevelopmentIt Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software DevelopmentCarlos Perez
 
Docker workshop
Docker workshopDocker workshop
Docker workshopEvans Ye
 
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...Puppet
 
Vagrant-Overview
Vagrant-OverviewVagrant-Overview
Vagrant-OverviewCrifkin
 
Installaling Puppet Master and Agent
Installaling Puppet Master and AgentInstallaling Puppet Master and Agent
Installaling Puppet Master and AgentRanjit Avasarala
 
Using Docker with Puppet - PuppetConf 2014
Using Docker with Puppet - PuppetConf 2014Using Docker with Puppet - PuppetConf 2014
Using Docker with Puppet - PuppetConf 2014Puppet
 
Preparation study of_docker - (MOSG)
Preparation study of_docker  - (MOSG)Preparation study of_docker  - (MOSG)
Preparation study of_docker - (MOSG)Soshi Nemoto
 
Instruction: dev environment
Instruction: dev environmentInstruction: dev environment
Instruction: dev environmentSoshi Nemoto
 
Docker puppetcamp london 2013
Docker puppetcamp london 2013Docker puppetcamp london 2013
Docker puppetcamp london 2013Tomas Doran
 
Vagrant and docker
Vagrant and dockerVagrant and docker
Vagrant and dockerDuckDuckGo
 
EC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and PackerEC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and PackerGeorge Miranda
 
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet
 
DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)Soshi Nemoto
 

What's hot (20)

Vagrant + Docker
Vagrant + DockerVagrant + Docker
Vagrant + Docker
 
Create your very own Development Environment with Vagrant and Packer
Create your very own Development Environment with Vagrant and PackerCreate your very own Development Environment with Vagrant and Packer
Create your very own Development Environment with Vagrant and Packer
 
Vagrant
Vagrant Vagrant
Vagrant
 
It Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software DevelopmentIt Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software Development
 
Docker workshop
Docker workshopDocker workshop
Docker workshop
 
Vagrant
VagrantVagrant
Vagrant
 
Vagrant for real
Vagrant for realVagrant for real
Vagrant for real
 
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
 
Vagrant-Overview
Vagrant-OverviewVagrant-Overview
Vagrant-Overview
 
Vagrant to-aws-flow
Vagrant to-aws-flowVagrant to-aws-flow
Vagrant to-aws-flow
 
Vagrant presentation
Vagrant presentationVagrant presentation
Vagrant presentation
 
Installaling Puppet Master and Agent
Installaling Puppet Master and AgentInstallaling Puppet Master and Agent
Installaling Puppet Master and Agent
 
Using Docker with Puppet - PuppetConf 2014
Using Docker with Puppet - PuppetConf 2014Using Docker with Puppet - PuppetConf 2014
Using Docker with Puppet - PuppetConf 2014
 
Preparation study of_docker - (MOSG)
Preparation study of_docker  - (MOSG)Preparation study of_docker  - (MOSG)
Preparation study of_docker - (MOSG)
 
Instruction: dev environment
Instruction: dev environmentInstruction: dev environment
Instruction: dev environment
 
Docker puppetcamp london 2013
Docker puppetcamp london 2013Docker puppetcamp london 2013
Docker puppetcamp london 2013
 
Vagrant and docker
Vagrant and dockerVagrant and docker
Vagrant and docker
 
EC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and PackerEC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and Packer
 
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
 
DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)
 

Viewers also liked

A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩Wen-Tien Chang
 
Vagrant and docker
Vagrant and dockerVagrant and docker
Vagrant and docker文峰 眭
 
Eclipse DemoCamp Munich - Docker Tooling and Vagrant Tooling
Eclipse DemoCamp Munich  - Docker Tooling and Vagrant ToolingEclipse DemoCamp Munich  - Docker Tooling and Vagrant Tooling
Eclipse DemoCamp Munich - Docker Tooling and Vagrant ToolingXavier Coulon
 
"Up" with vagrant and docker
"Up" with vagrant and docker"Up" with vagrant and docker
"Up" with vagrant and dockerHiroshi Miura
 
Vagrant and Docker
Vagrant and DockerVagrant and Docker
Vagrant and DockerNascenia IT
 
Vagrant vs Docker
Vagrant vs DockerVagrant vs Docker
Vagrant vs Dockerjchase50
 
Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...
Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...
Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...Carlos Sanchez
 
Linux Container Technology inside Docker with RHEL7
Linux Container Technology inside Docker with RHEL7Linux Container Technology inside Docker with RHEL7
Linux Container Technology inside Docker with RHEL7Etsuji Nakai
 
Transforming Organizations with CI/CD
Transforming Organizations with CI/CDTransforming Organizations with CI/CD
Transforming Organizations with CI/CDCprime
 
Ansible is the simplest way to automate. MoldCamp, 2015
Ansible is the simplest way to automate. MoldCamp, 2015Ansible is the simplest way to automate. MoldCamp, 2015
Ansible is the simplest way to automate. MoldCamp, 2015Alex S
 
Khaleel Devops Resume (2)
Khaleel Devops Resume (2)Khaleel Devops Resume (2)
Khaleel Devops Resume (2)khaleel a
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみたKazuto Kusama
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction Robert Reiz
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheLeslie Samuel
 

Viewers also liked (20)

A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 
Vagrant and docker
Vagrant and dockerVagrant and docker
Vagrant and docker
 
Eclipse DemoCamp Munich - Docker Tooling and Vagrant Tooling
Eclipse DemoCamp Munich  - Docker Tooling and Vagrant ToolingEclipse DemoCamp Munich  - Docker Tooling and Vagrant Tooling
Eclipse DemoCamp Munich - Docker Tooling and Vagrant Tooling
 
Framework codeigniter 2
Framework codeigniter 2Framework codeigniter 2
Framework codeigniter 2
 
Vagrant教學
Vagrant教學Vagrant教學
Vagrant教學
 
"Up" with vagrant and docker
"Up" with vagrant and docker"Up" with vagrant and docker
"Up" with vagrant and docker
 
Vagrant and Docker
Vagrant and DockerVagrant and Docker
Vagrant and Docker
 
Vagrant + ansible vs docker
Vagrant + ansible vs dockerVagrant + ansible vs docker
Vagrant + ansible vs docker
 
Vagrant vs Docker
Vagrant vs DockerVagrant vs Docker
Vagrant vs Docker
 
Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...
Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...
Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...
 
Introduction to Vagrant
Introduction to VagrantIntroduction to Vagrant
Introduction to Vagrant
 
Linux Container Technology inside Docker with RHEL7
Linux Container Technology inside Docker with RHEL7Linux Container Technology inside Docker with RHEL7
Linux Container Technology inside Docker with RHEL7
 
Transforming Organizations with CI/CD
Transforming Organizations with CI/CDTransforming Organizations with CI/CD
Transforming Organizations with CI/CD
 
Ansible is the simplest way to automate. MoldCamp, 2015
Ansible is the simplest way to automate. MoldCamp, 2015Ansible is the simplest way to automate. MoldCamp, 2015
Ansible is the simplest way to automate. MoldCamp, 2015
 
Khaleel Devops Resume (2)
Khaleel Devops Resume (2)Khaleel Devops Resume (2)
Khaleel Devops Resume (2)
 
Dev ops engineer
Dev ops engineerDev ops engineer
Dev ops engineer
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみた
 
reveal.js 3.0.0
reveal.js 3.0.0reveal.js 3.0.0
reveal.js 3.0.0
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
 

Similar to Vagrant

Create Development and Production Environments with Vagrant
Create Development and Production Environments with VagrantCreate Development and Production Environments with Vagrant
Create Development and Production Environments with VagrantBrian Hogan
 
Virtualization for Developers
Virtualization for DevelopersVirtualization for Developers
Virtualization for DevelopersJohn Coggeshall
 
Virtualization for Developers
Virtualization for DevelopersVirtualization for Developers
Virtualization for DevelopersJohn Coggeshall
 
Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Puppet
 
Node.js, Vagrant, Chef, and Mathoid @ Benetech
Node.js, Vagrant, Chef, and Mathoid @ BenetechNode.js, Vagrant, Chef, and Mathoid @ Benetech
Node.js, Vagrant, Chef, and Mathoid @ BenetechChristopher Bumgardner
 
Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013Hendrik Ebbers
 
Making Developers Productive with Vagrant, VirtualBox, and Docker
Making Developers Productive with Vagrant, VirtualBox, and DockerMaking Developers Productive with Vagrant, VirtualBox, and Docker
Making Developers Productive with Vagrant, VirtualBox, and DockerJohn Rofrano
 
Varying wordpressdevelopmentenvironment wp-campus2016
Varying wordpressdevelopmentenvironment wp-campus2016Varying wordpressdevelopmentenvironment wp-campus2016
Varying wordpressdevelopmentenvironment wp-campus2016David Brattoli
 
Varying WordPress Development Environment WordCamp Columbus 2016
Varying WordPress Development Environment WordCamp Columbus 2016Varying WordPress Development Environment WordCamp Columbus 2016
Varying WordPress Development Environment WordCamp Columbus 2016David Brattoli
 
Varying WordPress Development Environment WordCamp Cincinnati 2016
Varying WordPress Development Environment WordCamp Cincinnati 2016Varying WordPress Development Environment WordCamp Cincinnati 2016
Varying WordPress Development Environment WordCamp Cincinnati 2016David Brattoli
 
Run Docker On Windows Using Vagrant
Run Docker On Windows Using VagrantRun Docker On Windows Using Vagrant
Run Docker On Windows Using VagrantJulien Barbier
 
Vagrant-Binding JUG Dortmund
Vagrant-Binding JUG DortmundVagrant-Binding JUG Dortmund
Vagrant-Binding JUG DortmundHendrik Ebbers
 
Monitoring kubernetes with prometheus
Monitoring kubernetes with prometheusMonitoring kubernetes with prometheus
Monitoring kubernetes with prometheusBrice Fernandes
 
Oracle Developers APAC Meetup #1 - Working with Wercker Worksheets
Oracle Developers APAC Meetup #1 -  Working with Wercker WorksheetsOracle Developers APAC Meetup #1 -  Working with Wercker Worksheets
Oracle Developers APAC Meetup #1 - Working with Wercker WorksheetsDarrel Chia
 
Development with Vagrant
Development with VagrantDevelopment with Vagrant
Development with VagrantJohn Coggeshall
 
AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...
AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...
AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...Artefactual Systems - AtoM
 

Similar to Vagrant (20)

Create Development and Production Environments with Vagrant
Create Development and Production Environments with VagrantCreate Development and Production Environments with Vagrant
Create Development and Production Environments with Vagrant
 
Virtualization for Developers
Virtualization for DevelopersVirtualization for Developers
Virtualization for Developers
 
Virtualization for Developers
Virtualization for DevelopersVirtualization for Developers
Virtualization for Developers
 
Vagrant
VagrantVagrant
Vagrant
 
Vagrant Up in 5 Easy Steps
Vagrant Up in 5 Easy StepsVagrant Up in 5 Easy Steps
Vagrant Up in 5 Easy Steps
 
Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)
 
Vagrant For DevOps
Vagrant For DevOpsVagrant For DevOps
Vagrant For DevOps
 
Node.js, Vagrant, Chef, and Mathoid @ Benetech
Node.js, Vagrant, Chef, and Mathoid @ BenetechNode.js, Vagrant, Chef, and Mathoid @ Benetech
Node.js, Vagrant, Chef, and Mathoid @ Benetech
 
Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013
 
Making Developers Productive with Vagrant, VirtualBox, and Docker
Making Developers Productive with Vagrant, VirtualBox, and DockerMaking Developers Productive with Vagrant, VirtualBox, and Docker
Making Developers Productive with Vagrant, VirtualBox, and Docker
 
Varying wordpressdevelopmentenvironment wp-campus2016
Varying wordpressdevelopmentenvironment wp-campus2016Varying wordpressdevelopmentenvironment wp-campus2016
Varying wordpressdevelopmentenvironment wp-campus2016
 
Varying WordPress Development Environment WordCamp Columbus 2016
Varying WordPress Development Environment WordCamp Columbus 2016Varying WordPress Development Environment WordCamp Columbus 2016
Varying WordPress Development Environment WordCamp Columbus 2016
 
Varying WordPress Development Environment WordCamp Cincinnati 2016
Varying WordPress Development Environment WordCamp Cincinnati 2016Varying WordPress Development Environment WordCamp Cincinnati 2016
Varying WordPress Development Environment WordCamp Cincinnati 2016
 
Run Docker On Windows Using Vagrant
Run Docker On Windows Using VagrantRun Docker On Windows Using Vagrant
Run Docker On Windows Using Vagrant
 
Deployment automation
Deployment automationDeployment automation
Deployment automation
 
Vagrant-Binding JUG Dortmund
Vagrant-Binding JUG DortmundVagrant-Binding JUG Dortmund
Vagrant-Binding JUG Dortmund
 
Monitoring kubernetes with prometheus
Monitoring kubernetes with prometheusMonitoring kubernetes with prometheus
Monitoring kubernetes with prometheus
 
Oracle Developers APAC Meetup #1 - Working with Wercker Worksheets
Oracle Developers APAC Meetup #1 -  Working with Wercker WorksheetsOracle Developers APAC Meetup #1 -  Working with Wercker Worksheets
Oracle Developers APAC Meetup #1 - Working with Wercker Worksheets
 
Development with Vagrant
Development with VagrantDevelopment with Vagrant
Development with Vagrant
 
AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...
AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...
AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...
 

More from Michael Peacock

Immutable Infrastructure with Packer Ansible and Terraform
Immutable Infrastructure with Packer Ansible and TerraformImmutable Infrastructure with Packer Ansible and Terraform
Immutable Infrastructure with Packer Ansible and TerraformMichael Peacock
 
Test driven APIs with Laravel
Test driven APIs with LaravelTest driven APIs with Laravel
Test driven APIs with LaravelMichael Peacock
 
Symfony Workflow Component - Introductory Lightning Talk
Symfony Workflow Component - Introductory Lightning TalkSymfony Workflow Component - Introductory Lightning Talk
Symfony Workflow Component - Introductory Lightning TalkMichael Peacock
 
Alexa, lets make a skill
Alexa, lets make a skillAlexa, lets make a skill
Alexa, lets make a skillMichael Peacock
 
API Development with Laravel
API Development with LaravelAPI Development with Laravel
API Development with LaravelMichael Peacock
 
An introduction to Laravel Passport
An introduction to Laravel PassportAn introduction to Laravel Passport
An introduction to Laravel PassportMichael Peacock
 
Refactoring to symfony components
Refactoring to symfony componentsRefactoring to symfony components
Refactoring to symfony componentsMichael Peacock
 
Dance for the puppet master: G6 Tech Talk
Dance for the puppet master: G6 Tech TalkDance for the puppet master: G6 Tech Talk
Dance for the puppet master: G6 Tech TalkMichael Peacock
 
Powerful and flexible templates with Twig
Powerful and flexible templates with Twig Powerful and flexible templates with Twig
Powerful and flexible templates with Twig Michael Peacock
 
Introduction to OOP with PHP
Introduction to OOP with PHPIntroduction to OOP with PHP
Introduction to OOP with PHPMichael Peacock
 
Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsMichael Peacock
 
Evolution of a big data project
Evolution of a big data projectEvolution of a big data project
Evolution of a big data projectMichael Peacock
 
Real time voice call integration - Confoo 2012
Real time voice call integration - Confoo 2012Real time voice call integration - Confoo 2012
Real time voice call integration - Confoo 2012Michael Peacock
 
Dealing with Continuous Data Processing, ConFoo 2012
Dealing with Continuous Data Processing, ConFoo 2012Dealing with Continuous Data Processing, ConFoo 2012
Dealing with Continuous Data Processing, ConFoo 2012Michael Peacock
 
Data at Scale - Michael Peacock, Cloud Connect 2012
Data at Scale - Michael Peacock, Cloud Connect 2012Data at Scale - Michael Peacock, Cloud Connect 2012
Data at Scale - Michael Peacock, Cloud Connect 2012Michael Peacock
 
PHP Continuous Data Processing
PHP Continuous Data ProcessingPHP Continuous Data Processing
PHP Continuous Data ProcessingMichael Peacock
 
PHP North East Registry Pattern
PHP North East Registry PatternPHP North East Registry Pattern
PHP North East Registry PatternMichael Peacock
 

More from Michael Peacock (20)

Immutable Infrastructure with Packer Ansible and Terraform
Immutable Infrastructure with Packer Ansible and TerraformImmutable Infrastructure with Packer Ansible and Terraform
Immutable Infrastructure with Packer Ansible and Terraform
 
Test driven APIs with Laravel
Test driven APIs with LaravelTest driven APIs with Laravel
Test driven APIs with Laravel
 
Symfony Workflow Component - Introductory Lightning Talk
Symfony Workflow Component - Introductory Lightning TalkSymfony Workflow Component - Introductory Lightning Talk
Symfony Workflow Component - Introductory Lightning Talk
 
Alexa, lets make a skill
Alexa, lets make a skillAlexa, lets make a skill
Alexa, lets make a skill
 
API Development with Laravel
API Development with LaravelAPI Development with Laravel
API Development with Laravel
 
An introduction to Laravel Passport
An introduction to Laravel PassportAn introduction to Laravel Passport
An introduction to Laravel Passport
 
Phinx talk
Phinx talkPhinx talk
Phinx talk
 
Refactoring to symfony components
Refactoring to symfony componentsRefactoring to symfony components
Refactoring to symfony components
 
Dance for the puppet master: G6 Tech Talk
Dance for the puppet master: G6 Tech TalkDance for the puppet master: G6 Tech Talk
Dance for the puppet master: G6 Tech Talk
 
Powerful and flexible templates with Twig
Powerful and flexible templates with Twig Powerful and flexible templates with Twig
Powerful and flexible templates with Twig
 
Introduction to OOP with PHP
Introduction to OOP with PHPIntroduction to OOP with PHP
Introduction to OOP with PHP
 
Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friends
 
Evolution of a big data project
Evolution of a big data projectEvolution of a big data project
Evolution of a big data project
 
Real time voice call integration - Confoo 2012
Real time voice call integration - Confoo 2012Real time voice call integration - Confoo 2012
Real time voice call integration - Confoo 2012
 
Dealing with Continuous Data Processing, ConFoo 2012
Dealing with Continuous Data Processing, ConFoo 2012Dealing with Continuous Data Processing, ConFoo 2012
Dealing with Continuous Data Processing, ConFoo 2012
 
Data at Scale - Michael Peacock, Cloud Connect 2012
Data at Scale - Michael Peacock, Cloud Connect 2012Data at Scale - Michael Peacock, Cloud Connect 2012
Data at Scale - Michael Peacock, Cloud Connect 2012
 
Supermondays twilio
Supermondays twilioSupermondays twilio
Supermondays twilio
 
PHP & Twilio
PHP & TwilioPHP & Twilio
PHP & Twilio
 
PHP Continuous Data Processing
PHP Continuous Data ProcessingPHP Continuous Data Processing
PHP Continuous Data Processing
 
PHP North East Registry Pattern
PHP North East Registry PatternPHP North East Registry Pattern
PHP North East Registry Pattern
 

Recently uploaded

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 

Recently uploaded (20)

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 

Vagrant

  • 1. Vagrant: virtualise your development environment Michael Peacock August 2012, SuperMondays
  • 2. About Me @michaelpeacock Head Developer @ Ground Six Leading the development team and managing the development process We are a tech investment company: you bring ideas, we partner and build the product Author Occasional Speaker
  • 5. Virtualisation Abstraction layer for your hardware Lets multiple Operating Systems run concurrently, each running on their own virtual hardware
  • 6. Virtualisation Abstraction layer for your hardware Lets multiple Operating Systems run concurrently, each running on their own virtual hardware Limited by your own physical hardware and your host machine
  • 10. VirtualBox www.virtualbox.org Virtualisation software tool Provides the hardware abstraction layer and an interface for running VMs
  • 12. Vagrant www.vagrantup.com “Create and configure lightweight, reproducable, and portable development environments”
  • 13. Vagrant www.vagrantup.com “Create and configure lightweight, reproducable, and portable development environments” Set of command line tools which interacts with and automates VirtualBox
  • 14. Vagrant www.vagrantup.com “Create and configure lightweight, reproducable, and portable development environments” Set of command line tools which interacts with and automates VirtualBox Designed around portability
  • 16. Why?
  • 17. Why? Quick start time for new team members Vagrant up: you have a development environment
  • 18. Why? Quick start time for new team members Vagrant up: you have a development environment Server configuration can be version controlled
  • 19. Why? Quick start time for new team members Vagrant up: you have a development environment Server configuration can be version controlled Cross-platform: work from any machine
  • 20. Why? Quick start time for new team members Vagrant up: you have a development environment Server configuration can be version controlled Cross-platform: work from any machine Work on multiple projects? Easy to pickup an old, legacy project with its funky server configs
  • 21. Why? Quick start time for new team members Vagrant up: you have a development environment Server configuration can be version controlled Cross-platform: work from any machine Work on multiple projects? Easy to pickup an old, legacy project with its funky server configs Can run multiple VMs independently
  • 22. Why? Quick start time for new team members Vagrant up: you have a development environment Server configuration can be version controlled Cross-platform: work from any machine Work on multiple projects? Easy to pickup an old, legacy project with its funky server configs Can run multiple VMs independently Doesn’t mess with your local, host machine
  • 24. Some terms Host: Your physical machine
  • 25. Some terms Host: Your physical machine Guest: The VM
  • 29. Overview 1.Project specific configuration file 2.Import base box 3.Boot up Virtual Machine 1.Forward Ports 2.Share folders
  • 30. Overview 1.Project specific configuration file 2.Import base box 3.Boot up Virtual Machine 1.Forward Ports 2.Share folders 4.Configure / provision software
  • 31. 3 lines: up and running
  • 32. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 33. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 34. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 35. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 36. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 37. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 38. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 39. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 40. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 41. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 42. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 44.
  • 45.
  • 46.
  • 47.
  • 48. SSH into the box vagrant ssh
  • 50. Whats happened? Downloaded a base box of Ubuntu, configured for vagrant
  • 51. Whats happened? Downloaded a base box of Ubuntu, configured for vagrant Created a new project Configured to use this base box by default
  • 52. Whats happened? Downloaded a base box of Ubuntu, configured for vagrant Created a new project Configured to use this base box by default Booted the VM: vagrant up
  • 53. Whats happened? Downloaded a base box of Ubuntu, configured for vagrant Created a new project Configured to use this base box by default Booted the VM: vagrant up Connected into the VM: vagrant ssh
  • 55. Managing the VM Suspend vagrant suspend
  • 56. Managing the VM Suspend vagrant suspend Resume vagrant resume
  • 57. Managing the VM Suspend vagrant suspend Resume vagrant resume Shutdown vagrant halt
  • 58. Managing the VM Suspend vagrant suspend Resume vagrant resume Shutdown vagrant halt Turn on vagrant up (re-runs any provisioning tasks)
  • 62.
  • 64. When shit hits the fan vagrant destroy
  • 65.
  • 67. vagrant destroy: a warning The VM is completely wiped
  • 68. vagrant destroy: a warning The VM is completely wiped Anything that can’t be replicated from: Your project folder (shared folder) Vagrant base box Vagrant File Puppet Manifests
  • 69. vagrant destroy: a warning The VM is completely wiped Anything that can’t be replicated from: Your project folder (shared folder) Vagrant base box Vagrant File Puppet Manifests WILL BE LOST FOREVER E.g. Databases (hint: use a DB patching or versioning tool in your project folder)
  • 70. vagrant init Creates a new Vagrantfile, which instructs vagrant what too boot and how to do it. Let’s take a peak.
  • 71. # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant::Config.run do |config| config.vm.box = "base" end
  • 72. Box to use # use the box called base config.vm.box = "base" # Fallback URL, if we don't have a box called base, download from here config.vm.box_url = "http://files.vagrantup.com/precise64.box"
  • 74. Networking Host only VM is only visible to the host machine config.vm.network :hostonly, "192.168.33.10"
  • 75. Networking Host only VM is only visible to the host machine config.vm.network :hostonly, "192.168.33.10" Bridged Network connection to the VM is bridged, letting it appear as a device on the network config.vm.network :bridged
  • 76. Ports
  • 77. Ports Easiest way to use the VM is to forward ports Forwards port X on the host To port Y on the guest
  • 78. Ports Easiest way to use the VM is to forward ports Forwards port X on the host To port Y on the guest config.vm.forward_port 80, 4567
  • 80. Shared Folders Default: Current project (folder containing Vagrantfile) is mapped to /vagrant
  • 81. Shared Folders Default: Current project (folder containing Vagrantfile) is mapped to /vagrant New shared folders: config.vm.share_folder "name", "/guestmount", "../ hostfolder"
  • 82. Provisioning So far: we can build and d
  • 83. Provisioning with Puppet config.vm.provision :puppet do |puppet| puppet.manifests_path = "provision/manifests" puppet.manifest_file = "default.pp" puppet.module_path = "provision/modules" end
  • 85. What can Puppet do Checks conditions:
  • 86. What can Puppet do Checks conditions: Package installed
  • 87. What can Puppet do Checks conditions: Package installed File exists / contains / etc
  • 88. What can Puppet do Checks conditions: Package installed File exists / contains / etc Exec: Run an ad-hock command* * doesn’t sit well with Puppets “checking” nature. Execs get re-run (unless you use special conditions) on vagrant up
  • 89. Package package { "apache2": ensure => present, require => Exec['apt-get update'] }
  • 90. Service service { "apache2": ensure => running, require => Package["apache2"] }
  • 91. File file { '/etc/apache2/sites-available/default': source => '/vagrant/provision/modules/apache/files/default', owner => 'root', group => 'root' }
  • 92. Exec exec { 'apt-get update': command => '/usr/bin/apt-get update', require => Exec['preparenetworking'] }
  • 93. Users & Groups group { "wheel": ! ensure => "present", ! } ! ! exec { "/bin/echo "%wheel ALL=(ALL) ALL" >> /etc/sudoers": ! require => Group["wheel"] ! }
  • 94. Users & Groups user { "developer": ! ! ensure => "present", ! ! gid => "wheel", ! ! shell => "/bin/bash", ! ! home => "/home/developer", ! ! managehome => true, ! ! password => "passwordtest", ! ! require => Group["wheel"] ! }
  • 95. Stringing it together class apache { package { "apache2": ensure => present, require => Exec['apt-get update'] } file { '/var/www/src': ! ensure => 'link', ! target => '/vagrant/src', ! require => Package['apache2'] ! } ! ! file { '/etc/apache2/sites-available/default': ! ! source => '/vagrant/provision/modules/apache/files/default', ! ! owner => 'root', ! ! group => 'root' ! } service { "apache2": ensure => running, require => Package["apache2"] } }
  • 96.
  • 97. Using Puppet Modules import "apache" include apache
  • 98. Explicit ordering stage { 'first': before => Stage[main] } class {'apache': stage => first}
  • 100.
  • 101.
  • 102. Multiple VMs Within the vagrantfile, we can define multiple VMs E.g. need a separate VM for web and db server to mimic production environment? Vagrant::Config.run do |config| config.vm.define :web do |web_config| web_config.vm.box = "web" web_config.vm.forward_port 80, 8080 end config.vm.define :db do |db_config| db_config.vm.box = "db" db_config.vm.forward_port 3306, 3306 end end
  • 104. Plugins Backing up and snapshotting a VM Automated base box creators
  • 105. Exporting Box Always using the same stack / versions on your box? Slow un-reliable Internet connection means puppet takes an age to run? Export the base box with these pre-installed vagrant package
  • 106. Creating your own box Virtualbox configured: Guest additions SSH & key based authentication for the vagrant user Ruby, RubyGems, Puppet and Chef Export the box vagrantup.com/v1/docs/base_boxes.html
  • 107. The Future More than just VirtualBox
  • 109. Caveats Funky permissions Files created on the host shared folder show without permissions on the guest and are inaccessible Solution: upgrade virtualbox guest additions on guest
  • 110. Caveats Funky permissions Files created on the host shared folder show without permissions on the guest and are inaccessible Solution: upgrade virtualbox guest additions on guest Can’t chmod files within shared folder config.vm.share_folder("v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777') Thanks @AnthonySterling & @ChrisDKemper
  • 111. Caveats Funky permissions Files created on the host shared folder show without permissions on the guest and are inaccessible Solution: upgrade virtualbox guest additions on guest Can’t chmod files within shared folder config.vm.share_folder("v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777') Thanks @AnthonySterling & @ChrisDKemper Waiting for VM to boot Open VirtualBox Cancel, halt the VM and try again
  • 112. Caveats Funky permissions Files created on the host shared folder show without permissions on the guest and are inaccessible Solution: upgrade virtualbox guest additions on guest Can’t chmod files within shared folder config.vm.share_folder("v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777') Thanks @AnthonySterling & @ChrisDKemper Waiting for VM to boot Open VirtualBox Cancel, halt the VM and try again
  • 113. Conclusion Virtualise your development environment Easy to add new team members Easy to work from other machines So long “works on my Machine”

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n