Vagrant
                              Virtualize your development environment.




Thursday, September 9, 2010
Mitchell Hashimoto
                                  github.com/mitchellh
                                  twitter.com/mi...
$ git clone git://.../website.git
                    ...
                    $ ???WTF!#A@#)!???
                    ...
 ...
$ git clone git://.../website.git
                    ...
                    $ ???WTF!#A@#)!???
                    ...
 ...
User space
                                         Browser                   Editor
                                     ...
BIG PROBLEMS




Thursday, September 9, 2010
BIG PROBLEMS
    1. No isolation (Oh sorry, is that Tweetie Server Edition™?)




Thursday, September 9, 2010
BIG PROBLEMS
    1. No isolation (Oh sorry, is that Tweetie Server Edition™?)

    2. Not repeatable (That README ain’t go...
BIG PROBLEMS
    1. No isolation (Oh sorry, is that Tweetie Server Edition™?)

    2. Not repeatable (That README ain’t go...
VIRTUALIZATION!

                              EC2, Slicehost, Linode, Xen, KVM, ...




Thursday, September 9, 2010
VIRTUALIZATION!

                              EC2, Slicehost, Linode, Xen, KVM, ...




Thursday, September 9, 2010
User space
                                         Browser                   Editor
                                     ...
User space
                                         Virtualized OS

             Browser          Editor
                 ...
PROBLEMS SOLVED




Thursday, September 9, 2010
PROBLEMS SOLVED
    1. Isolation




Thursday, September 9, 2010
PROBLEMS SOLVED
    1. Isolation

    2. Repeatable




Thursday, September 9, 2010
PROBLEMS SOLVED
    1. Isolation

    2. Repeatable

    3. Guarantees




Thursday, September 9, 2010
BUSINESS BENEFITS




Thursday, September 9, 2010
BUSINESS BENEFITS
    • Lower resource on-boarding time




Thursday, September 9, 2010
BUSINESS BENEFITS
    • Lower resource on-boarding time
    • Version controlled server infrastructure




Thursday, Septe...
BUSINESS BENEFITS
    • Lower resource on-boarding time
    • Version controlled server infrastructure
    • Designers get...
WHY NOW?
                        (Why haven’t we been doing this all along?)




Thursday, September 9, 2010
WHY NOW?
                        (Why haven’t we been doing this all along?)

     • Big companies have been!




Thursday...
WHY NOW?
                        (Why haven’t we been doing this all along?)

     • Big companies have been!
     • Only ...
WHY NOW?
                        (Why haven’t we been doing this all along?)

     • Big companies have been!
     • Only ...
WHY NOW?
                        (Why haven’t we been doing this all along?)

     • Big companies have been!
     • Only ...
Vagrant
                              Virtualize your development environment.




Thursday, September 9, 2010
HIGH LEVEL OVERVIEW
    ‣     Describe environment via versionable Vagrantfile

    ‣     Manage virtual machine lifecycle...
Vagrantfile
    • Describes the virtual machine environment in code
          ๏     One per project

          ๏     Commit...
Vagrantfile
              Vagrant::Config.run do |config|
                config.vm.box = "lucid32"
              end




T...
Virtual Machine Lifecycle
    ‣     vagrant binary

    ‣     Completely managed from creation to destruction

         ๏ ...
Shared Folders via NFS
    ‣     File changes on host are immediately mirrored in the VM

    ‣     Continue using your fa...
DEMO




Thursday, September 9, 2010
Onto the good stuff...
                                 (let’s make it useful)




Thursday, September 9, 2010
Provisioning
    • Use Chef, Puppet, Bash, etc. to provision your VM
          ๏     Repeatable! (BIG Problem #2, remember...
Provisioning

              Vagrant::Config.run do |config|
                config.vm.box = "lucid32"
                conf...
Networking
    • Assign an IP to your VM
          ๏     Access VM using your own browser




Thursday, September 9, 2010
Networking

              Vagrant::Config.run do |config|
                config.vm.box = "lucid32"
                config...
DEMO




Thursday, September 9, 2010
Other stuff...
                              (no demos here, you can experiment)




Thursday, September 9, 2010
Packaging
    • Package built development environments
          ๏     vagrant package

          ๏     Distributable

   ...
Multi-VM
    • Represent multi-server environments
          ๏     e.g. web + db + utility




Thursday, September 9, 2010
Multi-VM
              Vagrant::Config.run do |config|
                config.vm.define :web do |web|
                  # ...
Rake Integration
    • Use vagrant as a library
          ๏     Invoke command line actions

          ๏     Custom SSH co...
Rake Integration

              require 'vagrant'

              desc "Restart the web application"
              task :re...
Plugins (0.6)
    • Extend Vagrant using a supported API
    • Add new commands to vagrant binary
    • Add new configurati...
Review

    • Continue using your existing development tools
    • Run your web app in a VM
    • VM setup file (Vagrantfile...
LOSE NOTHING. GAIN EVERYTHING.




Thursday, September 9, 2010
Vagrant IN ACTION
                              Virtualize your development environment.




Thursday, September 9, 2010
• Vagrant for all projects since March
    • Around 15 to 20 developers using it all day every day
    • Unexpected: Uniqu...
• All Rails projects since July on Vagrant
    • Massive reduction in on-boarding difficulty for new hires
    • Looking in...
• Multi-VM setup (web + db + flash media server)
    • Solved: No easy way to emulate FMS on Mac.
    • Forced devops good ...
About the Project
    • Current release: 0.5.4
    • Started development in January. First release in March.
    • 0.6 dev...
Getting Started + More Info
    • Website: vagrantup.com
    • IRC: #vagrant on Freenode
    • Github: http://github.com/m...
Upcoming SlideShare
Loading in …5
×

Vagrant at LA Ruby

2,899 views
2,808 views

Published on

Vagrant presentation at LA Ruby in September 2010.

The main takeaway for this presentation I wanted to give was the reasoning and importance for virtualization development environments.

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,899
On SlideShare
0
From Embeds
0
Number of Embeds
34
Actions
Shares
0
Downloads
30
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Vagrant at LA Ruby

  1. 1. Vagrant Virtualize your development environment. Thursday, September 9, 2010
  2. 2. Mitchell Hashimoto github.com/mitchellh twitter.com/mitchellh Thursday, September 9, 2010
  3. 3. $ git clone git://.../website.git ... $ ???WTF!#A@#)!??? ... $ script/server ... Thursday, September 9, 2010
  4. 4. $ git clone git://.../website.git ... $ ???WTF!#A@#)!??? ... $ script/server ... Thursday, September 9, 2010
  5. 5. User space Browser Editor Queue Other Music Server Server Web DB App IRC IM Server Server Server Operating System Thursday, September 9, 2010
  6. 6. BIG PROBLEMS Thursday, September 9, 2010
  7. 7. BIG PROBLEMS 1. No isolation (Oh sorry, is that Tweetie Server Edition™?) Thursday, September 9, 2010
  8. 8. BIG PROBLEMS 1. No isolation (Oh sorry, is that Tweetie Server Edition™?) 2. Not repeatable (That README ain’t gonna run itself) Thursday, September 9, 2010
  9. 9. BIG PROBLEMS 1. No isolation (Oh sorry, is that Tweetie Server Edition™?) 2. Not repeatable (That README ain’t gonna run itself) 3. No guarantees (But it works on my computer!!) Thursday, September 9, 2010
  10. 10. VIRTUALIZATION! EC2, Slicehost, Linode, Xen, KVM, ... Thursday, September 9, 2010
  11. 11. VIRTUALIZATION! EC2, Slicehost, Linode, Xen, KVM, ... Thursday, September 9, 2010
  12. 12. User space Browser Editor Queue Other Music Server Server Web DB App IRC IM Server Server Server Operating System Thursday, September 9, 2010
  13. 13. User space Virtualized OS Browser Editor Web DB App Server Server Server IRC IM Operating System Thursday, September 9, 2010
  14. 14. PROBLEMS SOLVED Thursday, September 9, 2010
  15. 15. PROBLEMS SOLVED 1. Isolation Thursday, September 9, 2010
  16. 16. PROBLEMS SOLVED 1. Isolation 2. Repeatable Thursday, September 9, 2010
  17. 17. PROBLEMS SOLVED 1. Isolation 2. Repeatable 3. Guarantees Thursday, September 9, 2010
  18. 18. BUSINESS BENEFITS Thursday, September 9, 2010
  19. 19. BUSINESS BENEFITS • Lower resource on-boarding time Thursday, September 9, 2010
  20. 20. BUSINESS BENEFITS • Lower resource on-boarding time • Version controlled server infrastructure Thursday, September 9, 2010
  21. 21. BUSINESS BENEFITS • Lower resource on-boarding time • Version controlled server infrastructure • Designers get up and running in minutes Thursday, September 9, 2010
  22. 22. WHY NOW? (Why haven’t we been doing this all along?) Thursday, September 9, 2010
  23. 23. WHY NOW? (Why haven’t we been doing this all along?) • Big companies have been! Thursday, September 9, 2010
  24. 24. WHY NOW? (Why haven’t we been doing this all along?) • Big companies have been! • Only recently possible on local machines Thursday, September 9, 2010
  25. 25. WHY NOW? (Why haven’t we been doing this all along?) • Big companies have been! • Only recently possible on local machines ๏ Low RAM cost (4 GB standard, 8 GB quickly coming) Thursday, September 9, 2010
  26. 26. WHY NOW? (Why haven’t we been doing this all along?) • Big companies have been! • Only recently possible on local machines ๏ Low RAM cost (4 GB standard, 8 GB quickly coming) ๏ Desktop virtualization API Thursday, September 9, 2010
  27. 27. Vagrant Virtualize your development environment. Thursday, September 9, 2010
  28. 28. HIGH LEVEL OVERVIEW ‣ Describe environment via versionable Vagrantfile ‣ Manage virtual machine lifecycle ‣ Share folder from host to guest via NFS ‣ Provide SSH access to instance ‣ Provision instance using Chef, Puppet, etc. ‣ Manage host/guest networking Thursday, September 9, 2010
  29. 29. Vagrantfile • Describes the virtual machine environment in code ๏ One per project ๏ Commit to version control ๏ Pure Ruby - Limitless configuration. Thursday, September 9, 2010
  30. 30. Vagrantfile Vagrant::Config.run do |config| config.vm.box = "lucid32" end Thursday, September 9, 2010
  31. 31. Virtual Machine Lifecycle ‣ vagrant binary ‣ Completely managed from creation to destruction ๏ (and creation... and destruction... and creation... and so on!) $ vagrant up $ vagrant halt $ vagrant suspend $ vagrant destroy $ vagrant reload $ vagrant ssh $ vagrant --help Thursday, September 9, 2010
  32. 32. Shared Folders via NFS ‣ File changes on host are immediately mirrored in the VM ‣ Continue using your favorite editor on your machine! ‣ By default mounted to /vagrant in VM Thursday, September 9, 2010
  33. 33. DEMO Thursday, September 9, 2010
  34. 34. Onto the good stuff... (let’s make it useful) Thursday, September 9, 2010
  35. 35. Provisioning • Use Chef, Puppet, Bash, etc. to provision your VM ๏ Repeatable! (BIG Problem #2, remember?) ๏ Use the same tools as production Thursday, September 9, 2010
  36. 36. Provisioning Vagrant::Config.run do |config| config.vm.box = "lucid32" config.vm.provisioner = :chef_solo end Thursday, September 9, 2010
  37. 37. Networking • Assign an IP to your VM ๏ Access VM using your own browser Thursday, September 9, 2010
  38. 38. Networking Vagrant::Config.run do |config| config.vm.box = "lucid32" config.vm.provisioner = :chef_solo config.vm.network("33.33.33.10") end Thursday, September 9, 2010
  39. 39. DEMO Thursday, September 9, 2010
  40. 40. Other stuff... (no demos here, you can experiment) Thursday, September 9, 2010
  41. 41. Packaging • Package built development environments ๏ vagrant package ๏ Distributable ๏ Minimize setup time Thursday, September 9, 2010
  42. 42. Multi-VM • Represent multi-server environments ๏ e.g. web + db + utility Thursday, September 9, 2010
  43. 43. Multi-VM Vagrant::Config.run do |config| config.vm.define :web do |web| # ... end config.vm.define :db do |db| # ... end end Thursday, September 9, 2010
  44. 44. Rake Integration • Use vagrant as a library ๏ Invoke command line actions ๏ Custom SSH commands Thursday, September 9, 2010
  45. 45. Rake Integration require 'vagrant' desc "Restart the web application" task :restart do env = Vagrant::Environment.load! env.ssh.execute do |ssh| ssh.exec!("touch /vagrant/tmp/restart.txt") end end Thursday, September 9, 2010
  46. 46. Plugins (0.6) • Extend Vagrant using a supported API • Add new commands to vagrant binary • Add new configuration options • Modify existing commands • e.g. vagrant rake - Just pass through arguments to rake on the VM. Thursday, September 9, 2010
  47. 47. Review • Continue using your existing development tools • Run your web app in a VM • VM setup file (Vagrantfile) in version control Thursday, September 9, 2010
  48. 48. LOSE NOTHING. GAIN EVERYTHING. Thursday, September 9, 2010
  49. 49. Vagrant IN ACTION Virtualize your development environment. Thursday, September 9, 2010
  50. 50. • Vagrant for all projects since March • Around 15 to 20 developers using it all day every day • Unexpected: Unique testing not possible before Thursday, September 9, 2010
  51. 51. • All Rails projects since July on Vagrant • Massive reduction in on-boarding difficulty for new hires • Looking into using it for Java-based projects in the near future Thursday, September 9, 2010
  52. 52. • Multi-VM setup (web + db + flash media server) • Solved: No easy way to emulate FMS on Mac. • Forced devops good practices • Example of successful distribution of boxes Thursday, September 9, 2010
  53. 53. About the Project • Current release: 0.5.4 • Started development in January. First release in March. • 0.6 development well under way: ๏ 179 commits, 226 files changed, 4081 lines added, 5730 lines deleted. ๏ Aiming for release in about 4 weeks. ๏ Biggest release yet Thursday, September 9, 2010
  54. 54. Getting Started + More Info • Website: vagrantup.com • IRC: #vagrant on Freenode • Github: http://github.com/mitchellh/vagrant Thursday, September 9, 2010

×