SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Downloaden Sie, um offline zu lesen
Vagrant
Vagrant
10.03.2015
Tilo Baller
Wer bist du?
● Tilo Baller
● Baujahr ‘86
● Web-Entwickler
● aus Berlin
● Vagrant seit 2012
● Docker seit 2014
● github.com/tbal
2
Du richtest deine
Entwicklungsumgebungen
immer noch manuell ein?
Und auch noch lokal?
3
Probleme
● stundenlanges Einrichten bei jedem Entwickler
● unterschiedliche Platformen (Linux, Mac)
● Konflikte mit Unterschiedlichen
Paketversionen (z.B. PHP 5.3 und 5.4)
● Port-Kollisions (z.B. Apache und Nginx)
● OS neu aufsetzen => alles von vorn einrichten
● “works on my machine” Ausrede
● usw.
4
● Easy-to-use Workflow
● Fokus auf Automatisierung
● Plattformunabhängig: Linux, Mac, Windows
● steigert Development/Production Parität
● komplette Konfiguration in einer Text-Datei:
Vagrantfile
Tool zur Erstellung von vollständigen
Entwicklungsumgebungen
5
Zahlen & Fakten
● FOSS
● Lizenz: MIT
● https://github.com/mitchellh/vagrant
○ 7200+ commits
○ 500+ contributors
○ 8700+ stars
○ 1900+ forks
● Cisco, Atlassian, Mozilla, O’Reilly, Nokia,
Airbnb, BBC, Disqus, Expedia, Twitch, ...
6
● Januar 2010 gestartet
● side-project von Mitchell Hashimoto
● November 2012 Gründung HashiCorp
● aktuell 9 feste Entwickler
● weitere Tools von HashiCorp:
○ Packer, Serf, Consul, Terraform, Atlas
“Building tools for the software managed datacenter.”
Die Macher
7
● Entwicklungsumgebung
für Software Entwicklung
○ gleiche Umgebung für alle Team-Mitglieder
○ platformunabhängig
○ portabel
○ isoliert
○ eigene IDEs, Browser und Debugger
trotzdem weiterhin nutzbar
○ quasi unsichtbar
Einsatzwecke
8
● Entwicklung + Testing von Deployments
○ Provisioning per Shell, Ansible, Chef, Puppet, Salt, etc.
○ lokal
■ VirtualBox, VMware, Parallels, Hyper-V, Docker,
QEMU/KVM, etc.
○ remote
■ AWS, RackSpace, DigitalOcean, OpenStack, etc.
Einsatzwecke
9
● Sandboxing
○ z.B. neue Programme testen, ohne das eigene System
zu verunreinigen
Einsatzwecke
10
Vagrant ‘Hello World’
$ vagrant init ubuntu/trusty64
$ vagrant up
11
Demo
vagrant init ubuntu/trusty64
ls -l
vagrant up
vagrant ssh
12
Vagrant bietet
einen einzigen Workflow
für alle Projekte
13
Basis CLI Befehle
● vagrant up → startet VM
● vagrant suspend → Ruhemodus
● vagrant halt → Herunterfahren
14
Typischer Workflow
$ git clone <git-repo-url>
$ vagrant up
Projekt X lokal einrichten
15
Typischer Workflow
$ vagrant up # morgens
… work it harder … make it better … do it faster …
$ vagrant suspend/halt # feierabend
Entwicklung an Projekt X
16
Weitere CLI Befehle
● vagrant status → Zustand der VM
● vagrant global-status → Zustand aller VMs
● vagrant ssh → SSH Zugriff auf VM
● vagrant reload → Neustart
17
Demo
git clone https://github.com/tbal/vagrant-bsp-lamp.git
vagrant up
Vagrantfile
vagrant status
vagrant global-status
vim app/index.php
vagrant suspend
vagrant up
vagrant ssh -- “df -h”
vagrant halt
vagrant up
18
mehr muss man nicht wissen,
um bei Vagrant gestützten
Projekten mitzuentwickeln
19
aber es gibt noch so viel mehr zu entdecken …
Vagrant Share Feature
● aktuelle VM temporär öffentlich teilen
○ HTTP Zugriff über öffentliche URL
■ z.B. für bleeding-edge Preview
○ SSH Zugriff von überall
■ z.B. für Pair-Programming, Debugging, etc.
○ Verbindung zu VM als wäre sie lokal
■ Zugriff auf alle freigegebenen Ports der VM
20
Vagrant Share Feature
● HTTP Zugriff über öffentliche URL
# Entwickler
$ vagrant share
# anderer Entwickler, Tester, Kunde, ...
$ google-chrome 
http://minute-puma-0901.vagrantshare.com
21
Vagrant Share Feature
● SSH Zugriff von überall
# Entwickler
$ vagrant share --ssh [--ssh-once]
# anderer Entwickler
$ vagrant connect --ssh minute-puma-0901
22
Demo
vagrant share
google-chrome <url>
vagrant share --ssh --ssh-once
vagrant connect --ssh <name>
23
● beschreibt
○ die Art der Machine
○ wie sie konfiguriert und eingerichtet werden soll
● Ruby Syntax
○ aber keine Ruby Kenntnisse nötig!
● überlicherweise im VCS Repository
Vagrantfile
24
● Provider = Virtualisierungslösung
○ Vagrant = Wrapper, der Provider per API kontrolliert
● Standard: VirtualBox (historisch bedingt)
○ Vorteile:
■ kostenlos, plattformunabhängig, einfache
Installation, open-source
○ Nachteil:
■ verhältnismäßig langsam
Provider
25
● Unterstützte Provider:
○ lokal: VirtualBox, VMware, Parallels, Hyper-V,
Docker, libvirt (QEMU, KVM), lxc, etc.
○ remote: AWS, RackSpace, DigitalOcean, etc.
● mehrere Provider mit einer Vagrantfile
konfigurierbar
Provider
26
Beispiel: Docker Provider
27
Vagrant.configure("2") do |config|
config.vm.provider "docker" do |d|
d.image = "jenkins"
d.ports = [“8080:8080”]
end
end
● Docker Container statt VMs
● Verwaltung mehrerer Docker Container
(ähnlich fig bzw. docker compose)
● startet unter Windows/Mac automatisch VM
$ vagrant up --provider docker
Demo
Vagrantfile
vagrant up --provider docker
docker ps
28
Boxes
● besitzen meist vorinstalliertes OS
○ z.B. Ubuntu, Debian, CentOS, Fedora, CoreOS,
Windows, etc.
● i.d.R. relativ “leer”, gibt aber auch
komplette Stacks (LAMP, Python, etc.)
29
Vagrant.configure("2") do |config|
config.vm.box = “ubuntu/trusty64”
end
● Box = Name für Images verschied. Provider
Boxes
30
● www.vagrantcloud.com
Provisioning
● automatisierte Ausführung von
○ Software Installation
○ Konfigurationsanpassungen
○ Projekt-Einrichtung
● Provisioners:
○ einfach: Datei, Shell (auch remote Scripte!)
○ fortgeschritten: Ansible, Salt, Puppet, Chef
● gleiches Provisioning für
Development, Staging und Production!
⇒ identische Umgebungen *
31
Provisioning Beispiele
32
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get update && sudo apt-get install -y apache2
echo "hello world" > /var/www/index.html
SHELL
end
Vagrant.configure("2") do |config|
config.vm.provision "puppet" do |puppet|
puppet.manifests_path = "my_manifests"
puppet.manifest_file = "default.pp"
end
end
Vagrant.configure("2") do |config|
config.vm.provision "shell",
path: “https://raw.githubusercontent.com/tbal/prjx/master/init.sh”
end
Netzwerk
● Port Forwarding
○ Zugriff nur vom Host selbst möglich
○ Aufruf z.B. per http://localhost:8080
33
Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest: 80, host: 8080
end
Netzwerk
● Private Network
○ Zugriff nur vom Host selbst möglich
○ Aufruf z.B. per http://192.168.33.10/
■ wenn in /etc/hosts eingetragen
z.B. per http://myproject.dev/
34
Vagrant.configure("2") do |config|
config.vm.network "private_network", type: "dhcp"
end
Vagrant.configure("2") do |config|
config.vm.network "private_network", ip: "192.168.50.4"
end
Netzwerk
● Public Network (bridged)
○ öffentlicher Zugriff
○ per Netzwerk-Interface Basis
○ Aufruf z.B. per http://192.168.33.10/
■ wenn in /etc/hosts eingetragen
z.B. per http://myproject.dev/
35
Vagrant.configure("2") do |config|
config.vm.network "public_network"
end
Vagrant.configure("2") do |config|
config.vm.network "public_network", ip: "192.168.50.4"
end
Synced Folders
● Austausch von Daten zwischen Host und Gast
36
Vagrant.configure("2") do |config|
config.vm.synced_folder "src/", "/var/www/website"
end
● Standardmäßig wird
Projektverzeichnis auf dem Host
nach /vagrant in dem Gast “gemountet”
Synced Folders
● verschiedene “Treiber” verfügbar
○ NFS, SMB (cifs), rsync, sshfs, etc.
37
Vagrant.configure("2") do |config|
config.vm.synced_folder "src/", "/var/www/website", type: “<type>”
end
● Standard, wenn kein Typ angegeben:
○ eigener Mechanismus von Provider
(VirtualBox/VMware/…)
Multi-Machine Setup
38
● Modellierung einer Multi-Server Umgebung
● Disaster-case testing: Ausfall einer Machine
● Interface testing: API zu Service Komponente
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: "echo Hello"
config.vm.define "web" do |web|
web.vm.box = "apache"
end
config.vm.define "db" do |db|
db.vm.box = "mysql"
end
end
Plugins
● sehr mächtig
● Großteil des Cores selbst als Plugins integriert
$ vagrant plugin install/uninstall <plugin-name>
$ vagrant plugin list
$ vagrant plugin update [<plugin-name>]
39
● Nennenswerte Plugins:
○ vagrant-hostsupdater, vagrant-libvirt,
vagrant-sahara, vagrant-vbox-snapshot,
vagrant-cachier
Demo
# vagrant im projekt
40
Vagrant vs. Docker
● http://stackoverflow.com/questions/16647069/should-i-use-vagrant-or-docke
r-io-for-creating-an-isolated-environment
● Docker = App Container, 1 Prozess
● Vagrant= Virtual Machines, n Prozesse
● Docker: Continuous Integration, Tests
● Vagrant: Entwicklungsumgebungen
● Docker Benutzer profitieren von Vagrant!
41
Online Konfiguratoren
● PuPHPet (https://puphpet.com/)
○ Puppet
● Protobox (http://getprotobox.com/)
○ Ansible / Ruby+Shell Scripts
● phansible (http://phansible.com/)
○ Ansible
● Rove.io (http://rove.io/)
○ Chef
42
Weitere Infos + Links
● Getting Started Guide
○ http://docs.vagrantup.com/v2/getting-started/
● Vagrant Book
○ http://www.amazon.de/gp/product/1449335837/
● Template für LAMP-Umgebung
○ https://github.com/tbal/vagrant-dev-box
● IntelliJ IDEA Vagrant Plugin
○ https://plugins.jetbrains.com/plugin/7379
43
Danke
Fragen?
44

Weitere ähnliche Inhalte

Was ist angesagt?

Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenOPITZ CONSULTING Deutschland
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesGregor Biswanger
 
Versionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und GitVersionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und Gitpaultcochrane
 
Docker Einführung @GPN15
Docker Einführung @GPN15Docker Einführung @GPN15
Docker Einführung @GPN15m1no
 
Foreman: Provisionierungswege (Webinar vom 31. März 2016)
Foreman: Provisionierungswege (Webinar vom 31. März 2016)Foreman: Provisionierungswege (Webinar vom 31. März 2016)
Foreman: Provisionierungswege (Webinar vom 31. März 2016)NETWAYS
 
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)NETWAYS
 
Anleitung zur Installation von Tomcat für Opencms
Anleitung zur Installation von Tomcat für OpencmsAnleitung zur Installation von Tomcat für Opencms
Anleitung zur Installation von Tomcat für OpencmsStefan Hilpp
 
Docker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemachtDocker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemachtB1 Systems GmbH
 
Git vs SVN DevCon 2011
Git vs SVN DevCon 2011Git vs SVN DevCon 2011
Git vs SVN DevCon 2011Mario Müller
 
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)Michael Whittaker
 
Software Defined Freifunk Backbones
Software Defined Freifunk BackbonesSoftware Defined Freifunk Backbones
Software Defined Freifunk BackbonesMaximilian Wilhelm
 
Salt-Orchtestrated Software Defined (Freifunk) Networks - Service-Provider-Ne...
Salt-Orchtestrated Software Defined (Freifunk) Networks - Service-Provider-Ne...Salt-Orchtestrated Software Defined (Freifunk) Networks - Service-Provider-Ne...
Salt-Orchtestrated Software Defined (Freifunk) Networks - Service-Provider-Ne...Maximilian Wilhelm
 
Rhomobile
RhomobileRhomobile
RhomobileJan Ow
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerNicholas Dille
 
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang BarthNagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang BarthNETWAYS
 
Git vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende EinführungGit vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende EinführungMario Müller
 

Was ist angesagt? (19)

Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
 
Versionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und GitVersionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und Git
 
Docker Einführung @GPN15
Docker Einführung @GPN15Docker Einführung @GPN15
Docker Einführung @GPN15
 
Was ist Docker ?
Was ist Docker ?Was ist Docker ?
Was ist Docker ?
 
Foreman: Provisionierungswege (Webinar vom 31. März 2016)
Foreman: Provisionierungswege (Webinar vom 31. März 2016)Foreman: Provisionierungswege (Webinar vom 31. März 2016)
Foreman: Provisionierungswege (Webinar vom 31. März 2016)
 
systemd & Docker
systemd & Dockersystemd & Docker
systemd & Docker
 
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)
 
Anleitung zur Installation von Tomcat für Opencms
Anleitung zur Installation von Tomcat für OpencmsAnleitung zur Installation von Tomcat für Opencms
Anleitung zur Installation von Tomcat für Opencms
 
Dockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloudDockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloud
 
Docker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemachtDocker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemacht
 
Git vs SVN DevCon 2011
Git vs SVN DevCon 2011Git vs SVN DevCon 2011
Git vs SVN DevCon 2011
 
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)
 
Software Defined Freifunk Backbones
Software Defined Freifunk BackbonesSoftware Defined Freifunk Backbones
Software Defined Freifunk Backbones
 
Salt-Orchtestrated Software Defined (Freifunk) Networks - Service-Provider-Ne...
Salt-Orchtestrated Software Defined (Freifunk) Networks - Service-Provider-Ne...Salt-Orchtestrated Software Defined (Freifunk) Networks - Service-Provider-Ne...
Salt-Orchtestrated Software Defined (Freifunk) Networks - Service-Provider-Ne...
 
Rhomobile
RhomobileRhomobile
Rhomobile
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit Docker
 
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang BarthNagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
 
Git vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende EinführungGit vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende Einführung
 

Ähnlich wie Vagrant - Einführung & Verwendung

Testumgebungen mit Vagrant
Testumgebungen mit VagrantTestumgebungen mit Vagrant
Testumgebungen mit Vagrantfrankstaude
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...inovex GmbH
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHFlorian Holzhauer
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppetinovex GmbH
 
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas LangeOSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas LangeNETWAYS
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...NETWAYS
 
docker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easydocker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easyinovex GmbH
 
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfSyahri Ramadhan
 
Entwicklungsumgebungen mit Vagrant
Entwicklungsumgebungen mit VagrantEntwicklungsumgebungen mit Vagrant
Entwicklungsumgebungen mit VagrantB1 Systems GmbH
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerB1 Systems GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17remigius-stalder
 
Django & Buildout
Django & BuildoutDjango & Buildout
Django & Buildoutzerok
 
Software Defined Freifunk Backbones
Software Defined Freifunk BackbonesSoftware Defined Freifunk Backbones
Software Defined Freifunk BackbonesMaximilan Wilhelm
 
OSMC 2015 | OMD - 5 Jahre Best Practice by Matthias Gallinger
OSMC 2015 | OMD - 5 Jahre Best Practice by Matthias GallingerOSMC 2015 | OMD - 5 Jahre Best Practice by Matthias Gallinger
OSMC 2015 | OMD - 5 Jahre Best Practice by Matthias GallingerNETWAYS
 

Ähnlich wie Vagrant - Einführung & Verwendung (20)

Testumgebungen mit Vagrant
Testumgebungen mit VagrantTestumgebungen mit Vagrant
Testumgebungen mit Vagrant
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HH
 
Was ist Docker?
Was ist Docker?Was ist Docker?
Was ist Docker?
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
 
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas LangeOSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
 
docker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easydocker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easy
 
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
 
Entwicklungsumgebungen mit Vagrant
Entwicklungsumgebungen mit VagrantEntwicklungsumgebungen mit Vagrant
Entwicklungsumgebungen mit Vagrant
 
Ein Gopher im Netz
Ein Gopher im NetzEin Gopher im Netz
Ein Gopher im Netz
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit Docker
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
Django & Buildout
Django & BuildoutDjango & Buildout
Django & Buildout
 
Software Defined Freifunk Backbones
Software Defined Freifunk BackbonesSoftware Defined Freifunk Backbones
Software Defined Freifunk Backbones
 
OSMC 2015 | OMD - 5 Jahre Best Practice by Matthias Gallinger
OSMC 2015 | OMD - 5 Jahre Best Practice by Matthias GallingerOSMC 2015 | OMD - 5 Jahre Best Practice by Matthias Gallinger
OSMC 2015 | OMD - 5 Jahre Best Practice by Matthias Gallinger
 

Vagrant - Einführung & Verwendung

  • 2. Wer bist du? ● Tilo Baller ● Baujahr ‘86 ● Web-Entwickler ● aus Berlin ● Vagrant seit 2012 ● Docker seit 2014 ● github.com/tbal 2
  • 3. Du richtest deine Entwicklungsumgebungen immer noch manuell ein? Und auch noch lokal? 3
  • 4. Probleme ● stundenlanges Einrichten bei jedem Entwickler ● unterschiedliche Platformen (Linux, Mac) ● Konflikte mit Unterschiedlichen Paketversionen (z.B. PHP 5.3 und 5.4) ● Port-Kollisions (z.B. Apache und Nginx) ● OS neu aufsetzen => alles von vorn einrichten ● “works on my machine” Ausrede ● usw. 4
  • 5. ● Easy-to-use Workflow ● Fokus auf Automatisierung ● Plattformunabhängig: Linux, Mac, Windows ● steigert Development/Production Parität ● komplette Konfiguration in einer Text-Datei: Vagrantfile Tool zur Erstellung von vollständigen Entwicklungsumgebungen 5
  • 6. Zahlen & Fakten ● FOSS ● Lizenz: MIT ● https://github.com/mitchellh/vagrant ○ 7200+ commits ○ 500+ contributors ○ 8700+ stars ○ 1900+ forks ● Cisco, Atlassian, Mozilla, O’Reilly, Nokia, Airbnb, BBC, Disqus, Expedia, Twitch, ... 6
  • 7. ● Januar 2010 gestartet ● side-project von Mitchell Hashimoto ● November 2012 Gründung HashiCorp ● aktuell 9 feste Entwickler ● weitere Tools von HashiCorp: ○ Packer, Serf, Consul, Terraform, Atlas “Building tools for the software managed datacenter.” Die Macher 7
  • 8. ● Entwicklungsumgebung für Software Entwicklung ○ gleiche Umgebung für alle Team-Mitglieder ○ platformunabhängig ○ portabel ○ isoliert ○ eigene IDEs, Browser und Debugger trotzdem weiterhin nutzbar ○ quasi unsichtbar Einsatzwecke 8
  • 9. ● Entwicklung + Testing von Deployments ○ Provisioning per Shell, Ansible, Chef, Puppet, Salt, etc. ○ lokal ■ VirtualBox, VMware, Parallels, Hyper-V, Docker, QEMU/KVM, etc. ○ remote ■ AWS, RackSpace, DigitalOcean, OpenStack, etc. Einsatzwecke 9
  • 10. ● Sandboxing ○ z.B. neue Programme testen, ohne das eigene System zu verunreinigen Einsatzwecke 10
  • 11. Vagrant ‘Hello World’ $ vagrant init ubuntu/trusty64 $ vagrant up 11
  • 12. Demo vagrant init ubuntu/trusty64 ls -l vagrant up vagrant ssh 12
  • 13. Vagrant bietet einen einzigen Workflow für alle Projekte 13
  • 14. Basis CLI Befehle ● vagrant up → startet VM ● vagrant suspend → Ruhemodus ● vagrant halt → Herunterfahren 14
  • 15. Typischer Workflow $ git clone <git-repo-url> $ vagrant up Projekt X lokal einrichten 15
  • 16. Typischer Workflow $ vagrant up # morgens … work it harder … make it better … do it faster … $ vagrant suspend/halt # feierabend Entwicklung an Projekt X 16
  • 17. Weitere CLI Befehle ● vagrant status → Zustand der VM ● vagrant global-status → Zustand aller VMs ● vagrant ssh → SSH Zugriff auf VM ● vagrant reload → Neustart 17
  • 18. Demo git clone https://github.com/tbal/vagrant-bsp-lamp.git vagrant up Vagrantfile vagrant status vagrant global-status vim app/index.php vagrant suspend vagrant up vagrant ssh -- “df -h” vagrant halt vagrant up 18
  • 19. mehr muss man nicht wissen, um bei Vagrant gestützten Projekten mitzuentwickeln 19 aber es gibt noch so viel mehr zu entdecken …
  • 20. Vagrant Share Feature ● aktuelle VM temporär öffentlich teilen ○ HTTP Zugriff über öffentliche URL ■ z.B. für bleeding-edge Preview ○ SSH Zugriff von überall ■ z.B. für Pair-Programming, Debugging, etc. ○ Verbindung zu VM als wäre sie lokal ■ Zugriff auf alle freigegebenen Ports der VM 20
  • 21. Vagrant Share Feature ● HTTP Zugriff über öffentliche URL # Entwickler $ vagrant share # anderer Entwickler, Tester, Kunde, ... $ google-chrome http://minute-puma-0901.vagrantshare.com 21
  • 22. Vagrant Share Feature ● SSH Zugriff von überall # Entwickler $ vagrant share --ssh [--ssh-once] # anderer Entwickler $ vagrant connect --ssh minute-puma-0901 22
  • 23. Demo vagrant share google-chrome <url> vagrant share --ssh --ssh-once vagrant connect --ssh <name> 23
  • 24. ● beschreibt ○ die Art der Machine ○ wie sie konfiguriert und eingerichtet werden soll ● Ruby Syntax ○ aber keine Ruby Kenntnisse nötig! ● überlicherweise im VCS Repository Vagrantfile 24
  • 25. ● Provider = Virtualisierungslösung ○ Vagrant = Wrapper, der Provider per API kontrolliert ● Standard: VirtualBox (historisch bedingt) ○ Vorteile: ■ kostenlos, plattformunabhängig, einfache Installation, open-source ○ Nachteil: ■ verhältnismäßig langsam Provider 25
  • 26. ● Unterstützte Provider: ○ lokal: VirtualBox, VMware, Parallels, Hyper-V, Docker, libvirt (QEMU, KVM), lxc, etc. ○ remote: AWS, RackSpace, DigitalOcean, etc. ● mehrere Provider mit einer Vagrantfile konfigurierbar Provider 26
  • 27. Beispiel: Docker Provider 27 Vagrant.configure("2") do |config| config.vm.provider "docker" do |d| d.image = "jenkins" d.ports = [“8080:8080”] end end ● Docker Container statt VMs ● Verwaltung mehrerer Docker Container (ähnlich fig bzw. docker compose) ● startet unter Windows/Mac automatisch VM $ vagrant up --provider docker
  • 29. Boxes ● besitzen meist vorinstalliertes OS ○ z.B. Ubuntu, Debian, CentOS, Fedora, CoreOS, Windows, etc. ● i.d.R. relativ “leer”, gibt aber auch komplette Stacks (LAMP, Python, etc.) 29 Vagrant.configure("2") do |config| config.vm.box = “ubuntu/trusty64” end ● Box = Name für Images verschied. Provider
  • 31. Provisioning ● automatisierte Ausführung von ○ Software Installation ○ Konfigurationsanpassungen ○ Projekt-Einrichtung ● Provisioners: ○ einfach: Datei, Shell (auch remote Scripte!) ○ fortgeschritten: Ansible, Salt, Puppet, Chef ● gleiches Provisioning für Development, Staging und Production! ⇒ identische Umgebungen * 31
  • 32. Provisioning Beispiele 32 Vagrant.configure("2") do |config| config.vm.provision "shell", inline: <<-SHELL sudo apt-get update && sudo apt-get install -y apache2 echo "hello world" > /var/www/index.html SHELL end Vagrant.configure("2") do |config| config.vm.provision "puppet" do |puppet| puppet.manifests_path = "my_manifests" puppet.manifest_file = "default.pp" end end Vagrant.configure("2") do |config| config.vm.provision "shell", path: “https://raw.githubusercontent.com/tbal/prjx/master/init.sh” end
  • 33. Netzwerk ● Port Forwarding ○ Zugriff nur vom Host selbst möglich ○ Aufruf z.B. per http://localhost:8080 33 Vagrant.configure("2") do |config| config.vm.network "forwarded_port", guest: 80, host: 8080 end
  • 34. Netzwerk ● Private Network ○ Zugriff nur vom Host selbst möglich ○ Aufruf z.B. per http://192.168.33.10/ ■ wenn in /etc/hosts eingetragen z.B. per http://myproject.dev/ 34 Vagrant.configure("2") do |config| config.vm.network "private_network", type: "dhcp" end Vagrant.configure("2") do |config| config.vm.network "private_network", ip: "192.168.50.4" end
  • 35. Netzwerk ● Public Network (bridged) ○ öffentlicher Zugriff ○ per Netzwerk-Interface Basis ○ Aufruf z.B. per http://192.168.33.10/ ■ wenn in /etc/hosts eingetragen z.B. per http://myproject.dev/ 35 Vagrant.configure("2") do |config| config.vm.network "public_network" end Vagrant.configure("2") do |config| config.vm.network "public_network", ip: "192.168.50.4" end
  • 36. Synced Folders ● Austausch von Daten zwischen Host und Gast 36 Vagrant.configure("2") do |config| config.vm.synced_folder "src/", "/var/www/website" end ● Standardmäßig wird Projektverzeichnis auf dem Host nach /vagrant in dem Gast “gemountet”
  • 37. Synced Folders ● verschiedene “Treiber” verfügbar ○ NFS, SMB (cifs), rsync, sshfs, etc. 37 Vagrant.configure("2") do |config| config.vm.synced_folder "src/", "/var/www/website", type: “<type>” end ● Standard, wenn kein Typ angegeben: ○ eigener Mechanismus von Provider (VirtualBox/VMware/…)
  • 38. Multi-Machine Setup 38 ● Modellierung einer Multi-Server Umgebung ● Disaster-case testing: Ausfall einer Machine ● Interface testing: API zu Service Komponente Vagrant.configure("2") do |config| config.vm.provision "shell", inline: "echo Hello" config.vm.define "web" do |web| web.vm.box = "apache" end config.vm.define "db" do |db| db.vm.box = "mysql" end end
  • 39. Plugins ● sehr mächtig ● Großteil des Cores selbst als Plugins integriert $ vagrant plugin install/uninstall <plugin-name> $ vagrant plugin list $ vagrant plugin update [<plugin-name>] 39 ● Nennenswerte Plugins: ○ vagrant-hostsupdater, vagrant-libvirt, vagrant-sahara, vagrant-vbox-snapshot, vagrant-cachier
  • 40. Demo # vagrant im projekt 40
  • 41. Vagrant vs. Docker ● http://stackoverflow.com/questions/16647069/should-i-use-vagrant-or-docke r-io-for-creating-an-isolated-environment ● Docker = App Container, 1 Prozess ● Vagrant= Virtual Machines, n Prozesse ● Docker: Continuous Integration, Tests ● Vagrant: Entwicklungsumgebungen ● Docker Benutzer profitieren von Vagrant! 41
  • 42. Online Konfiguratoren ● PuPHPet (https://puphpet.com/) ○ Puppet ● Protobox (http://getprotobox.com/) ○ Ansible / Ruby+Shell Scripts ● phansible (http://phansible.com/) ○ Ansible ● Rove.io (http://rove.io/) ○ Chef 42
  • 43. Weitere Infos + Links ● Getting Started Guide ○ http://docs.vagrantup.com/v2/getting-started/ ● Vagrant Book ○ http://www.amazon.de/gp/product/1449335837/ ● Template für LAMP-Umgebung ○ https://github.com/tbal/vagrant-dev-box ● IntelliJ IDEA Vagrant Plugin ○ https://plugins.jetbrains.com/plugin/7379 43

Hinweis der Redaktion

  1. Gliederung Grundlegendes Wie nutzt man Vagrant als Entwickler Praxisbeispiele Konfigurationsmöglichkeiten Tipps & Tricks
  2. 40s