View
2.978
Download
0
Category
Preview:
Citation preview
VagrantVirtualize your development environment.
Thursday, September 9, 2010
Mitchell Hashimotogithub.com/mitchellhtwitter.com/mitchellh
Thursday, September 9, 2010
$ git clone git://.../website.git...$ ???WTF!#A@#)!???...$ script/server...
Thursday, September 9, 2010
$ git clone git://.../website.git...$ ???WTF!#A@#)!???...$ script/server...
Thursday, September 9, 2010
Operating System
User space
WebServer
DBServer
AppServer
QueueServer
Other Server
Browser
IRC IM
EditorMusic
Thursday, September 9, 2010
BIG PROBLEMS
Thursday, September 9, 2010
BIG PROBLEMS1. No isolation (Oh sorry, is that Tweetie Server Edition™?)
Thursday, September 9, 2010
BIG PROBLEMS1. No isolation (Oh sorry, is that Tweetie Server Edition™?)
2. Not repeatable (That README ain’t gonna run itself)
Thursday, September 9, 2010
BIG PROBLEMS1. 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
EC2, Slicehost, Linode, Xen, KVM, ...
VIRTUALIZATION!
Thursday, September 9, 2010
EC2, Slicehost, Linode, Xen, KVM, ...
VIRTUALIZATION!
Thursday, September 9, 2010
Operating System
User space
WebServer
DBServer
AppServer
QueueServer
Other Server
Browser
IRC IM
EditorMusic
Thursday, September 9, 2010
Operating System
User space
Browser
IRC IM
Editor
Virtualized OS
Web Server
DB Server
App Server
Thursday, September 9, 2010
PROBLEMS SOLVED
Thursday, September 9, 2010
PROBLEMS SOLVED1. Isolation
Thursday, September 9, 2010
PROBLEMS SOLVED1. Isolation
2. Repeatable
Thursday, September 9, 2010
PROBLEMS SOLVED1. 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, September 9, 2010
BUSINESS BENEFITS• Lower resource on-boarding time
• Version controlled server infrastructure
• Designers get up and running in minutes
Thursday, September 9, 2010
WHY NOW?(Why haven’t we been doing this all along?)
Thursday, September 9, 2010
WHY NOW?
• Big companies have been!
(Why haven’t we been doing this all along?)
Thursday, September 9, 2010
WHY NOW?
• Big companies have been!
• Only recently possible on local machines
(Why haven’t we been doing this all along?)
Thursday, September 9, 2010
WHY NOW?
• Big companies have been!
• Only recently possible on local machines
๏ Low RAM cost (4 GB standard, 8 GB quickly coming)
(Why haven’t we been doing this all along?)
Thursday, September 9, 2010
WHY NOW?
• Big companies have been!
• Only recently possible on local machines
๏ Low RAM cost (4 GB standard, 8 GB quickly coming)
๏ Desktop virtualization API
(Why haven’t we been doing this all along?)
Thursday, September 9, 2010
VagrantVirtualize your development environment.
Thursday, September 9, 2010
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
Vagrantfile
• Describes the virtual machine environment in code
๏ One per project
๏ Commit to version control
๏ Pure Ruby - Limitless configuration.
Thursday, September 9, 2010
Vagrant::Config.run do |config| config.vm.box = "lucid32"end
Vagrantfile
Thursday, September 9, 2010
Virtual Machine Lifecycle
$ vagrant up$ vagrant halt$ vagrant suspend$ vagrant destroy$ vagrant reload$ vagrant ssh$ vagrant --help
‣ vagrant binary
‣ Completely managed from creation to destruction
๏ (and creation... and destruction... and creation... and so on!)
Thursday, September 9, 2010
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
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?)
๏ Use the same tools as production
Thursday, September 9, 2010
Vagrant::Config.run do |config| config.vm.box = "lucid32" config.vm.provisioner = :chef_soloend
Provisioning
Thursday, September 9, 2010
Networking
• Assign an IP to your VM
๏ Access VM using your own browser
Thursday, September 9, 2010
Vagrant::Config.run do |config| config.vm.box = "lucid32" config.vm.provisioner = :chef_solo config.vm.network("33.33.33.10")end
Networking
Thursday, September 9, 2010
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
๏ Minimize setup time
Thursday, September 9, 2010
Multi-VM• Represent multi-server environments
๏ e.g. web + db + utility
Thursday, September 9, 2010
Vagrant::Config.run do |config| config.vm.define :web do |web| # ... end
config.vm.define :db do |db| # ... endend
Multi-VM
Thursday, September 9, 2010
Rake Integration
• Use vagrant as a library
๏ Invoke command line actions
๏ Custom SSH commands
Thursday, September 9, 2010
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") endend
Rake Integration
Thursday, September 9, 2010
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
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
LOSE NOTHING. GAIN EVERYTHING.
Thursday, September 9, 2010
VagrantVirtualize your development environment.
IN ACTION
Thursday, September 9, 2010
• 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
• 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
• 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
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
Getting Started + More Info
• Website: vagrantup.com
• IRC: #vagrant on Freenode
• Github: http://github.com/mitchellh/vagrant
Thursday, September 9, 2010
Recommended