Virtuelle Entwicklungsumgebungen mit Vagrant

Virtuelle Entwicklungsumgebungen mit Vagrant

Den ersten Teil des Vortrags nimmt die Einführung in das Konzept von Vagrant und dessen Installation ein. Anhand eines einfachen Beispiels werden Funktion und Nutzung erläutert.

Durch den Einsatz von Provisioning Tools wie Chef oder Puppet können vorhandene Konfigurationen der Produktiv-Systeme zum Setup der Virtuellen Maschinen genutzt werden. So lassen sich auch komplexe Cluster-Setups aufbauen. Auch dies wird mit Beispielen demonstriert.

Abschließend wird darauf eingegangen, wie man selbst Vagrant Boxen erstellen kann und wie die Unterstützung für die unterschiedlichen Virtualisierer aussieht.

Die Teilnehmer sollten Grundkenntnisse in den Bereichen Linux, Virtuelle Maschinen und Provisioning haben.

Transcript

  1. Virtuelle Entwicklungsumgebungen mit Vagrant Markus Zapke-Gründemann LinuxTag 2013

  2. Übersicht • Vorstellung • Was ist Vagrant? • Warum Vagrant?

    • Installation • Anwendung
  3. Markus Zapke-Gründemann • Softwareentwickler seit 2001 • Softwareentwicklung mit Python,

    Django und Mercurial • Selbstständig seit 2008 • Seit 2011 Geschäftsführer bei Inqbus
  4. Was ist Vagrant?

  5. Verwaltung von Virtuellen Maschinen

  6. VM Provider (z.B. VirtualBox)

  7. Ruby

  8. Open Source

  9. Mitchell Hashimoto

  10. vagrantup.com

  11. Warum Vagrant?

  12. Software Stack einfacher managen

  13. Wissenstransfer

  14. Zeit sparen

  15. Vagrant installieren 1. Provider installieren (z.B. VirtualBox) 2. Vagrant Paket

    installieren (OS X, Windows, Debian, RedHat und Arch Linux verfügbar)
  16. Vagrant nutzen I

  17. Vagrant nutzen I $ vagrant box add precise32 http://files.vagrantup.com/precise32.box

  18. Vagrant nutzen I $ vagrant box add precise32 http://files.vagrantup.com/precise32.box $

    vagrant init precise32
  19. Vagrant nutzen I $ vagrant box add precise32 http://files.vagrantup.com/precise32.box $

    vagrant init precise32 $ vagrant up
  20. Vagrant nutzen I $ vagrant box add precise32 http://files.vagrantup.com/precise32.box $

    vagrant init precise32 $ vagrant up $ ls -A .vagrant Vagrantfile
  21. Vagrantfile I $ cat Vagrantfile Vagrant.configure("2") do |config| config.vm.box =

    "precise32" end
  22. Vagrantfile II $ cat Vagrantfile Vagrant.configure("2") do |config| config.vm.box =

    "precise32" # Port forwarding for Django config.vm.network :forwarded_port, guest: 8000, host: 8080 end
  23. Vagrant nutzen II

  24. Vagrant nutzen II $ vagrant ssh

  25. Vagrant nutzen II $ vagrant ssh vagrant@vagrant-precise32:~$ ls -A /vagrant

    .vagrant Vagrantfile
  26. Vagrant nutzen II $ vagrant ssh vagrant@vagrant-precise32:~$ ls -A /vagrant

    .vagrant Vagrantfile vagrant@vagrant-precise32:~$ logout
  27. Vagrant nutzen II $ vagrant ssh vagrant@vagrant-precise32:~$ ls -A /vagrant

    .vagrant Vagrantfile vagrant@vagrant-precise32:~$ logout $ vagrant halt
  28. Vagrant nutzen II $ vagrant ssh vagrant@vagrant-precise32:~$ ls -A /vagrant

    .vagrant Vagrantfile vagrant@vagrant-precise32:~$ logout $ vagrant halt $ vagrant destroy
  29. Vagrant Box

  30. Vagrant Box $ vagrant box list precise32 (virtualbox)

  31. Vagrant Box $ vagrant box list precise32 (virtualbox) $ ls

    ~/.vagrant.d/boxes precise32
  32. Vagrant Box $ vagrant box list precise32 (virtualbox) $ ls

    ~/.vagrant.d/boxes precise32 $ ls ~/.vagrant.d/boxes/precise32/virtualbox Vagrantfile box-disk1.vmdk box.ovf metadata.json
  33. Vagrant Box $ vagrant box list precise32 (virtualbox) $ ls

    ~/.vagrant.d/boxes precise32 $ ls ~/.vagrant.d/boxes/precise32/virtualbox Vagrantfile box-disk1.vmdk box.ovf metadata.json $ vagrant box remove precise32
  34. Provider & Plugins

  35. Multi-Provider Support seit Vagrant 1.1

  36. Plugins $ vagrant plugin install <name>

  37. Multi-Provider

  38. Multi-Provider $ vagrant box add precise32 http://files.vagrantup.com/precise32.box

  39. Multi-Provider $ vagrant box add precise32 http://files.vagrantup.com/precise32.box $ vagrant box

    list precise32 (virtualbox) precise32 (vmware_fusion)
  40. Multi-Provider $ vagrant box add precise32 http://files.vagrantup.com/precise32.box $ vagrant box

    list precise32 (virtualbox) precise32 (vmware_fusion) $ vagrant up --provider=vmware_fusion
  41. Provisioning

  42. Provisioning Shell Ansible Chef Solo Chef Server Puppet Apply Puppet

    Agent Saltstack (Plugin)
  43. Provisioning: Puppet I $ cat Vagrantfile Vagrant.configure("2") do |config| config.vm.box

    = "precise32" config.vm.provision :puppet end
  44. Provisioning: Puppet II $ cat manifests/default.pp group { 'puppet': ensure

    => present, } class basic_setup { exec { 'apt-get update': path => "/usr/bin", } package { 'vim': ensure => present, } package { 'sqlite3': ensure => present, } } include basic_setup
  45. Woher eine Box bekommen?

  46. vagrantbox.es

  47. Eine Box selber bauen!

  48. VeeWee https://github.com/jedi4ever/veewee

  49. VeeWee I • VeeWee erstellt Boxen für • Vagrant •

    VMWare • KVM • Parallels $ gem install veewee
  50. VeeWee II

  51. VeeWee II $ bundle exec veewee vbox templates | grep

    -i debian-7 bundle exec veewee vbox define '' 'Debian-7.0-amd64-netboot' bundle exec veewee vbox define '' 'Debian-7.0-i386-netboot'
  52. VeeWee II $ bundle exec veewee vbox templates | grep

    -i debian-7 bundle exec veewee vbox define '' 'Debian-7.0-amd64-netboot' bundle exec veewee vbox define '' 'Debian-7.0-i386-netboot' $ bundle exec veewee vbox define 'debian7' 'Debian-7.0-amd64-netboot'
  53. VeeWee II $ bundle exec veewee vbox templates | grep

    -i debian-7 bundle exec veewee vbox define '' 'Debian-7.0-amd64-netboot' bundle exec veewee vbox define '' 'Debian-7.0-i386-netboot' $ bundle exec veewee vbox define 'debian7' 'Debian-7.0-amd64-netboot' $ ls definitions/debian7 definition.rb postinstall.sh preseed.cfg
  54. VeeWee II $ bundle exec veewee vbox templates | grep

    -i debian-7 bundle exec veewee vbox define '' 'Debian-7.0-amd64-netboot' bundle exec veewee vbox define '' 'Debian-7.0-i386-netboot' $ bundle exec veewee vbox define 'debian7' 'Debian-7.0-amd64-netboot' $ ls definitions/debian7 definition.rb postinstall.sh preseed.cfg $ bundle exec veewee vbox build 'debian7'
  55. VeeWee II $ bundle exec veewee vbox templates | grep

    -i debian-7 bundle exec veewee vbox define '' 'Debian-7.0-amd64-netboot' bundle exec veewee vbox define '' 'Debian-7.0-i386-netboot' $ bundle exec veewee vbox define 'debian7' 'Debian-7.0-amd64-netboot' $ ls definitions/debian7 definition.rb postinstall.sh preseed.cfg $ bundle exec veewee vbox build 'debian7' $ bundle exec veewee vbox validate 'debian7'
  56. VeeWee II $ bundle exec veewee vbox templates | grep

    -i debian-7 bundle exec veewee vbox define '' 'Debian-7.0-amd64-netboot' bundle exec veewee vbox define '' 'Debian-7.0-i386-netboot' $ bundle exec veewee vbox define 'debian7' 'Debian-7.0-amd64-netboot' $ ls definitions/debian7 definition.rb postinstall.sh preseed.cfg $ bundle exec veewee vbox build 'debian7' $ bundle exec veewee vbox validate 'debian7' $ bundle exec veewee vbox export 'debian7'
  57. VeeWee II $ bundle exec veewee vbox templates | grep

    -i debian-7 bundle exec veewee vbox define '' 'Debian-7.0-amd64-netboot' bundle exec veewee vbox define '' 'Debian-7.0-i386-netboot' $ bundle exec veewee vbox define 'debian7' 'Debian-7.0-amd64-netboot' $ ls definitions/debian7 definition.rb postinstall.sh preseed.cfg $ bundle exec veewee vbox build 'debian7' $ bundle exec veewee vbox validate 'debian7' $ bundle exec veewee vbox export 'debian7' $ vagrant box add 'debian7' debian7.box
  58. VeeWee II $ bundle exec veewee vbox templates | grep

    -i debian-7 bundle exec veewee vbox define '' 'Debian-7.0-amd64-netboot' bundle exec veewee vbox define '' 'Debian-7.0-i386-netboot' $ bundle exec veewee vbox define 'debian7' 'Debian-7.0-amd64-netboot' $ ls definitions/debian7 definition.rb postinstall.sh preseed.cfg $ bundle exec veewee vbox build 'debian7' $ bundle exec veewee vbox validate 'debian7' $ bundle exec veewee vbox export 'debian7' $ vagrant box add 'debian7' debian7.box $ vagrant init debian7
  59. Fragen? www.inqbus.de www.keimlink.de @keimlink