Richard Attermeyer 
OPITZ CONSULTING Deutschland GmbH 
Vagrant, Puppet, Docker für 
Entwickler und Architekten
Ihr Sprecher 
Richard Attermeyer 
richard.attermeyer@opitz-consulting.com 
twitter/attermr 
github/rattermeyer 
blog.devopsarchitect.de / www.thecattlecrew.com
Agenda
High-Level Überblick
High-Level Überblick 
Entwicklung + Continuous 
Delivery
High-Level Überblick 
Entwicklung + Continuous 
Delivery 
VMs, Config Mgmt, Container
Los geht‘s
DevOps 
Kultur- und Prozesswandel 
Wir haben noch nicht alle Antworten 
Umfasst unterschiedliche Gruppen 
Name ist neu 
Mehr Firmen beschäftigen sich damit
Continuous Delivery 
Sammlung von Techniken, Prozessen und 
Werkzeugen, die den Softwarelieferprozess 
verbessern
Bildquelle / URL 
Aber womit anfangen?
Dauer bis Arbeitsumgebung steht
Dauer bis Arbeitsumgebung steht 
Dauer bis Änderung in 
Arbeitsumgebung verteilt
Dauer bis Arbeitsumgebung steht 
Dauer bis Änderung in 
Arbeitsumgebung verteilt 
Versionierung von 
Arbeitsumgebungen
Dauer bis Arbeitsumgebung steht 
Dauer bis Änderung in 
Arbeitsumgebung verteilt 
Versionierung von 
Arbeitsumgebungen 
„Works on my machine“
Virtuelle Maschinen
Lösungsmöglichkeit 
Golden Image
Aber:
Golden Image: Probleme 
 Groß 
 Verteilung dauert 
 Einfaches Customizing schwierig 
 Viele verschiedene Konfigurationen 
 Jede kleine Änderung erzeugt direkt große Datenmenge 
und komplette Re-Installation 
 Keine Zusammenarbeit 
 Versionierung schwierig
Und jetzt?
Lösungsmöglichkeit 
Development environments 
made easy.
Entwickler-Workflow 
> git clone https://gh.com/rattermeyer/jenkins-in-a-box.git* 
> cd jenkins-in-a-box 
> vagrant up 
* git clone https://github.com/rattermeyer/jenkins-in-a-box.git
Vagrant: Vagrantfile 
VAGRANTFILE_API_VERSION = "2" 
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
config.vm.box = "phusion/ubuntu-14.04-amd64" 
config.vm.provider "virtualbox" do |vb| 
vb.customize ["modifyvm", :id, "--memory", "1024"] 
vb.customize ["modifyvm", :id, "--cpus", "1"] 
end 
config.vm.provision "puppet" do |puppet| 
puppet.manifests_path = "puppet/manifests" 
puppet.manifest_file = "site.pp" 
puppet.module_path = "puppet/modules" 
puppet.options = "--verbose --debug" 
end 
config.vm.network "private_network", ip: "192.168.33.10" 
end
Base Box 
 Vorgefertigtes Vagrant VM image, ready-to-run 
 Eigene Erstellung möglich 
 Base Box ist Basis für weiteres Provisioning
Provisioning 
Projekt: 
Ubuntu Base 
Provisioning 
Spezifische 
VM 
Projekt: 
Ubuntu 
Base 
Provisioning 
Tomcat 
JDK 
IDE 
Entwicklungs-umgebung
Provisionierung 
Hohe 
Flexibilität 
Lange Dauer 
Provisioning 
Geringe 
Flexibilität 
Kurze 
Provisionierungs-dauer
Zusammenfassung 
 Viele vorgefertigte Images 
siehe Vagrant Cloud und Vagrantbox.es . 
 Vagrantfiles. 
Aufsetzen der Box bei Initialisierung 
 Maschinen-Schnappschüsse als Vagrant Box file 
(Verteilung und Austausch) 
 Feinabstimmung der VM Parameter 
RAM, CPU, APIC... 
 Integration mit CM Werkzeugen 
Puppet, Chef, Ansible, Salt
Puppet / Config Management
Wie kann Puppet helfen? 
 Transparenz 
 Systemdefinition an zentraler Stelle 
 Systemdefinition ist klar strukturiert und verständlich 
 Reporting über Änderungen 
 Automatisierung 
 Systemaufbau „auf Knopfdruck“ 
 Nicht nur initial, sondern über den ganzen Lifecycle 
 Reproduzierbarkeit 
 Systemaufbau ist durch Definitionsdatei zuverlässig reproduzierbar 
 Konfigurationsänderungen sind sichtbar und bei Bedarf revidierbar 
 Änderungen sind versionierbar
Arbeitsablauf mit Puppet 
Grundidee: 
„Beschreibe das Zielsystem, Puppet kümmert sich um den Weg dahin“ 
Resource 
Definition 
Reporting apply --noop 
apply
Deklarativ 
Infrastructure-as-Code
Deklaration einer Ressource 
Wichtigste Ressourcetypen 
 File 
 Package 
 Service 
 Außerdem: exec, user, group, 
notice 
file { "/var/tmp/foo": 
ensure => present, 
owner => "ec2-user", 
group => "ec2-user", 
}
Klassen 
 Zur Gruppierung 
zusammenhängender 
Ressourcen 
 Klassen können auch 
parametriert werden 
 Aber: Jede Klasse wird pro 
Knoten nur einmal instanziiert! 
class ntp { 
package { "ntp": 
ensure => present, 
} 
service { "ntp": 
ensure => running, 
require => Package["ntp"], 
} 
}
Module 
 Einheitliche Struktur und Kapsel 
für ein Feature 
 Module in Puppets Modulepath 
können direkt eingebunden 
werden 
 Über puppet modules können 
Module von PuppetForge 
geladen werden 
<name> 
manifests/ 
init.pp 
… 
files/ 
tests/ 
templates 
lib/
Infrastructure-as-Code 
package { 'curl': 
} 
class { '::java' : 
} 
include profiles::jenkinsmaster 
include ssh::client 
class profiles::jenkinsmaster ( 
$lts = true 
) { 
class { 'jenkins': 
lts => $lts, 
install_java => false, 
} 
include jenkins::master 
create_resources('jenkins::plugin', 
hiera_hash('jenkinsmaster::plugins')) 
}
Deklarativ 
Versionskontrolle 
Teilen von Modulen
Zurück zu Vagrant
Use Cases?
Entwicklungsumgebung
Entwicklungsumgebung 
< 5 Maschinen
Entwicklungsumgebung 
< 5 Maschinen 
„Resourcenhungrig“
Mehr unabhängige VMs? 
Build Once Run Anywhere?
Bildquelle / URL 
Build Ship Run
BSD Jails / Solaris Zones 
Linux Containers 
Docker Container / Images
App A App B 
Gast BS Gast BS 
Hypervisor 
Host BS 
App A App B 
Docker Engine 
Hypervisor 
Host BS 
Virtuelle 
Maschinen 
Container
docker run –it ubuntu bash
Dockerfile 
FROM rattermeyer/ubuntu-jdk:1.0 
maintainer richard.attermeyer@gmail.com 
ENV PROJECT_VERSION 0.0.1-SNAPSHOT 
ENV PROJECT_NAME todo-list-backend 
RUN mkdir /opt/${PROJECT_NAME} 
ADD ${PROJECT_NAME}-${PROJECT_VERSION}.jar /opt/${PROJECT_NAME}/ 
EXPOSE 8080 
ENTRYPOINT java -jar /opt/${PROJECT_NAME}/${PROJECT_NAME}- 
${PROJECT_VERSION}.jar
Zusammenfassung 
 Leichtgewichtig 
Docker Images sind viel leichtgewichtiger als volle VMs. Start 
dauert Sekunden anstatt wenige Minuten. Zu verteilende 
Images i.d.R. kleiner (nur Delta, neuer FS Layer) 
 Versionskontrolle der Images 
Daher einfacheres Handling von Builds. Und damit auch 
geeigneter für eine Continuous Delivery Pipeline 
 Lots of images (again)
Use Cases, Kosten und Nutzen
CD Build Agent / Slave 
Jenkins / GO CD 
Source Code 
Puppet / Java / 
Schemaverwaltung 
Entwicklung 
Vagrant 
Continuous Delivery 
Pipeline 
Jenkins / GO CD 
Test 
Docker / Vagrant 
Produktion 
Docker / VM 
Puppet
Docker 
Use Case Aufwand / Nutzen 
 Leichtgewichtige VMs 
 Statisch, homogene 
Umgebungen 
 Isolation von mehreren 
Slaves im CD Prozess 
 Gut für Microservices 
Verteile nicht das war / ear 
sondern den ganzen 
Container 
 Spring Boot, DropWizard, self 
contained deployment 
 Flache Lernkurve 
 Recht schnell guter Nutzen 
für Continuous Delivery 
 Betrieb noch mit Aufwand 
verbunden
Vagrant 
Use Case Aufwand / Nutzen 
 Entwicklerumgebung 
(Entwicklung in the Box inkl. 
IDE) 
 Testgrid (auch für CD) für 
verschiedene 
Betriebssysteme 
 Ubuntu, RedHat, Windows 
 CM Tool für einheitliches 
Provisioning über 
unterschiedliche OS 
 Homogene Umgebung 
 Einfach, Shell / Ansible Provisioning 
 Flache Lernkurve 
 Schnell guter Nutzen 
 Test Grid / Unterschiedliche 
Umgebungen 
 Schwer. Erfordert CM Know-how 
 Hoher Aufwand Planung 
 Wenige (Inhouse-)Projekte haben 
diese Anforderungen
Puppet 
Use Case Aufwand / Nutzen 
 Management status-behafteter 
Umgebungen 
 Abstraktion von Resourcen / 
Distributionen 
 Nutzung in bestehenden 
Prozessen 
 Hohe Lernkurve 
 Strategische Entscheidung 
 Schwierig: Unterschiedliche 
Umgebungen (Debian vs. RedHat) 
 Gute Module finden / selber entwickeln 
aufwändig 
 Einfacher: Homogene Umgebung 
 Aber warum dann nicht ansible? 
 Nützlich: In Kombination etwa mit 
Docker 
 Konfiguration des Hosts mit Puppet 
 Guests: Docker Container
Bildquelle / URL 
Ausblick
Entwicklungsumgebungen 
 Vagrant 
 Fig: Für Docker Umgebungen 
 Vortex: nodejs basiert 
Ecosystem 
 Vagrant Plugins 
 Vagrant Cloud 
 Vagrant Jenkins Plugin 
Config Management 
 Puppet 
 Chef 
 Ansible, Saltstack 
Ecosystem 
 Puppet Forge 
 Chef Recipes 
 Ansible Galaxy 
 … 
Containerization 
 Docker 
 Linux Container 
 OpenVZ 
Ecosystem 
 CoreOS 
 Maestro-ng, fig, 
 Consul, SkyDns, SkyDock, Serf 
 Kubernetes
Viele neue Projekte
Viele neue Projekte 
Wenig Erfahrungen im 
Enterprise Umfeld
Viele neue Projekte 
Wenig Erfahrungen im 
Enterprise Umfeld 
Heute Hip, morgen out
DevOps und CD wichtig
DevOps und CD wichtig 
Einzelne Aspekte gut 
verstanden
DevOps und CD wichtig 
Einzelne Aspekte gut 
verstanden 
Nichts tun: Keine Option
Es gibt viel zu tun: 
Packen wir‘s an
Bildquelle / URL 
Fragen?
Demo?
Demo 
 Vagrant startet docker host 
 Docker: Sonar, Nexus, Git-Server, Jenkins-Master, Jenkins- 
Slave 
 Jenkins-Master: Provisioniert mit Puppet
Kontakt 
Richard Attermeyer 
Senior Solution Architect 
OPITZ CONSULTING GmbH 
Kirchstr. 6 | 51647 Gummersbach 
Phone: +49 173 727 9004 
Mail: richard.attermeyer@opitz-consulting.com 
Twitter: @attermr 
Blog: blog.devopsarchitect.de 
youtube.com/opitzconsulting 
@OC_WIRE 
slideshare.net/opitzconsulting 
xing.com/net/opitzconsulting
Fotoreferenzen 
„Computer Problems“ by CollegeDegrees360 is licensed under CC BY 2.0 
Git Logo by Jason Long is licensed under the Creative Commons Attribution 3.0 Unported 
License. 
“Crossroads” by Carsten Tokmit is licensed under CC BY-SA 2.0 
“Gucker” by H.P. Brinkmann is licensed under CC BY 2.0

Vagrant, Puppet, Docker für Entwickler und Architekten

  • 1.
    Richard Attermeyer OPITZCONSULTING Deutschland GmbH Vagrant, Puppet, Docker für Entwickler und Architekten
  • 2.
    Ihr Sprecher RichardAttermeyer richard.attermeyer@opitz-consulting.com twitter/attermr github/rattermeyer blog.devopsarchitect.de / www.thecattlecrew.com
  • 3.
  • 4.
  • 5.
    High-Level Überblick Entwicklung+ Continuous Delivery
  • 6.
    High-Level Überblick Entwicklung+ Continuous Delivery VMs, Config Mgmt, Container
  • 7.
  • 8.
    DevOps Kultur- undProzesswandel Wir haben noch nicht alle Antworten Umfasst unterschiedliche Gruppen Name ist neu Mehr Firmen beschäftigen sich damit
  • 9.
    Continuous Delivery Sammlungvon Techniken, Prozessen und Werkzeugen, die den Softwarelieferprozess verbessern
  • 10.
    Bildquelle / URL Aber womit anfangen?
  • 11.
  • 12.
    Dauer bis Arbeitsumgebungsteht Dauer bis Änderung in Arbeitsumgebung verteilt
  • 13.
    Dauer bis Arbeitsumgebungsteht Dauer bis Änderung in Arbeitsumgebung verteilt Versionierung von Arbeitsumgebungen
  • 14.
    Dauer bis Arbeitsumgebungsteht Dauer bis Änderung in Arbeitsumgebung verteilt Versionierung von Arbeitsumgebungen „Works on my machine“
  • 15.
  • 16.
  • 17.
  • 18.
    Golden Image: Probleme  Groß  Verteilung dauert  Einfaches Customizing schwierig  Viele verschiedene Konfigurationen  Jede kleine Änderung erzeugt direkt große Datenmenge und komplette Re-Installation  Keine Zusammenarbeit  Versionierung schwierig
  • 19.
  • 20.
  • 21.
    Entwickler-Workflow > gitclone https://gh.com/rattermeyer/jenkins-in-a-box.git* > cd jenkins-in-a-box > vagrant up * git clone https://github.com/rattermeyer/jenkins-in-a-box.git
  • 22.
    Vagrant: Vagrantfile VAGRANTFILE_API_VERSION= "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "phusion/ubuntu-14.04-amd64" config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--memory", "1024"] vb.customize ["modifyvm", :id, "--cpus", "1"] end config.vm.provision "puppet" do |puppet| puppet.manifests_path = "puppet/manifests" puppet.manifest_file = "site.pp" puppet.module_path = "puppet/modules" puppet.options = "--verbose --debug" end config.vm.network "private_network", ip: "192.168.33.10" end
  • 23.
    Base Box Vorgefertigtes Vagrant VM image, ready-to-run  Eigene Erstellung möglich  Base Box ist Basis für weiteres Provisioning
  • 24.
    Provisioning Projekt: UbuntuBase Provisioning Spezifische VM Projekt: Ubuntu Base Provisioning Tomcat JDK IDE Entwicklungs-umgebung
  • 25.
    Provisionierung Hohe Flexibilität Lange Dauer Provisioning Geringe Flexibilität Kurze Provisionierungs-dauer
  • 26.
    Zusammenfassung  Vielevorgefertigte Images siehe Vagrant Cloud und Vagrantbox.es .  Vagrantfiles. Aufsetzen der Box bei Initialisierung  Maschinen-Schnappschüsse als Vagrant Box file (Verteilung und Austausch)  Feinabstimmung der VM Parameter RAM, CPU, APIC...  Integration mit CM Werkzeugen Puppet, Chef, Ansible, Salt
  • 27.
    Puppet / ConfigManagement
  • 28.
    Wie kann Puppethelfen?  Transparenz  Systemdefinition an zentraler Stelle  Systemdefinition ist klar strukturiert und verständlich  Reporting über Änderungen  Automatisierung  Systemaufbau „auf Knopfdruck“  Nicht nur initial, sondern über den ganzen Lifecycle  Reproduzierbarkeit  Systemaufbau ist durch Definitionsdatei zuverlässig reproduzierbar  Konfigurationsänderungen sind sichtbar und bei Bedarf revidierbar  Änderungen sind versionierbar
  • 29.
    Arbeitsablauf mit Puppet Grundidee: „Beschreibe das Zielsystem, Puppet kümmert sich um den Weg dahin“ Resource Definition Reporting apply --noop apply
  • 30.
  • 31.
    Deklaration einer Ressource Wichtigste Ressourcetypen  File  Package  Service  Außerdem: exec, user, group, notice file { "/var/tmp/foo": ensure => present, owner => "ec2-user", group => "ec2-user", }
  • 32.
    Klassen  ZurGruppierung zusammenhängender Ressourcen  Klassen können auch parametriert werden  Aber: Jede Klasse wird pro Knoten nur einmal instanziiert! class ntp { package { "ntp": ensure => present, } service { "ntp": ensure => running, require => Package["ntp"], } }
  • 33.
    Module  EinheitlicheStruktur und Kapsel für ein Feature  Module in Puppets Modulepath können direkt eingebunden werden  Über puppet modules können Module von PuppetForge geladen werden <name> manifests/ init.pp … files/ tests/ templates lib/
  • 34.
    Infrastructure-as-Code package {'curl': } class { '::java' : } include profiles::jenkinsmaster include ssh::client class profiles::jenkinsmaster ( $lts = true ) { class { 'jenkins': lts => $lts, install_java => false, } include jenkins::master create_resources('jenkins::plugin', hiera_hash('jenkinsmaster::plugins')) }
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
    Entwicklungsumgebung < 5Maschinen „Resourcenhungrig“
  • 41.
    Mehr unabhängige VMs? Build Once Run Anywhere?
  • 42.
    Bildquelle / URL Build Ship Run
  • 43.
    BSD Jails /Solaris Zones Linux Containers Docker Container / Images
  • 44.
    App A AppB Gast BS Gast BS Hypervisor Host BS App A App B Docker Engine Hypervisor Host BS Virtuelle Maschinen Container
  • 45.
    docker run –itubuntu bash
  • 46.
    Dockerfile FROM rattermeyer/ubuntu-jdk:1.0 maintainer richard.attermeyer@gmail.com ENV PROJECT_VERSION 0.0.1-SNAPSHOT ENV PROJECT_NAME todo-list-backend RUN mkdir /opt/${PROJECT_NAME} ADD ${PROJECT_NAME}-${PROJECT_VERSION}.jar /opt/${PROJECT_NAME}/ EXPOSE 8080 ENTRYPOINT java -jar /opt/${PROJECT_NAME}/${PROJECT_NAME}- ${PROJECT_VERSION}.jar
  • 47.
    Zusammenfassung  Leichtgewichtig Docker Images sind viel leichtgewichtiger als volle VMs. Start dauert Sekunden anstatt wenige Minuten. Zu verteilende Images i.d.R. kleiner (nur Delta, neuer FS Layer)  Versionskontrolle der Images Daher einfacheres Handling von Builds. Und damit auch geeigneter für eine Continuous Delivery Pipeline  Lots of images (again)
  • 48.
  • 49.
    CD Build Agent/ Slave Jenkins / GO CD Source Code Puppet / Java / Schemaverwaltung Entwicklung Vagrant Continuous Delivery Pipeline Jenkins / GO CD Test Docker / Vagrant Produktion Docker / VM Puppet
  • 50.
    Docker Use CaseAufwand / Nutzen  Leichtgewichtige VMs  Statisch, homogene Umgebungen  Isolation von mehreren Slaves im CD Prozess  Gut für Microservices Verteile nicht das war / ear sondern den ganzen Container  Spring Boot, DropWizard, self contained deployment  Flache Lernkurve  Recht schnell guter Nutzen für Continuous Delivery  Betrieb noch mit Aufwand verbunden
  • 51.
    Vagrant Use CaseAufwand / Nutzen  Entwicklerumgebung (Entwicklung in the Box inkl. IDE)  Testgrid (auch für CD) für verschiedene Betriebssysteme  Ubuntu, RedHat, Windows  CM Tool für einheitliches Provisioning über unterschiedliche OS  Homogene Umgebung  Einfach, Shell / Ansible Provisioning  Flache Lernkurve  Schnell guter Nutzen  Test Grid / Unterschiedliche Umgebungen  Schwer. Erfordert CM Know-how  Hoher Aufwand Planung  Wenige (Inhouse-)Projekte haben diese Anforderungen
  • 52.
    Puppet Use CaseAufwand / Nutzen  Management status-behafteter Umgebungen  Abstraktion von Resourcen / Distributionen  Nutzung in bestehenden Prozessen  Hohe Lernkurve  Strategische Entscheidung  Schwierig: Unterschiedliche Umgebungen (Debian vs. RedHat)  Gute Module finden / selber entwickeln aufwändig  Einfacher: Homogene Umgebung  Aber warum dann nicht ansible?  Nützlich: In Kombination etwa mit Docker  Konfiguration des Hosts mit Puppet  Guests: Docker Container
  • 53.
  • 54.
    Entwicklungsumgebungen  Vagrant  Fig: Für Docker Umgebungen  Vortex: nodejs basiert Ecosystem  Vagrant Plugins  Vagrant Cloud  Vagrant Jenkins Plugin Config Management  Puppet  Chef  Ansible, Saltstack Ecosystem  Puppet Forge  Chef Recipes  Ansible Galaxy  … Containerization  Docker  Linux Container  OpenVZ Ecosystem  CoreOS  Maestro-ng, fig,  Consul, SkyDns, SkyDock, Serf  Kubernetes
  • 55.
  • 56.
    Viele neue Projekte Wenig Erfahrungen im Enterprise Umfeld
  • 57.
    Viele neue Projekte Wenig Erfahrungen im Enterprise Umfeld Heute Hip, morgen out
  • 58.
  • 59.
    DevOps und CDwichtig Einzelne Aspekte gut verstanden
  • 60.
    DevOps und CDwichtig Einzelne Aspekte gut verstanden Nichts tun: Keine Option
  • 61.
    Es gibt vielzu tun: Packen wir‘s an
  • 62.
  • 63.
  • 64.
    Demo  Vagrantstartet docker host  Docker: Sonar, Nexus, Git-Server, Jenkins-Master, Jenkins- Slave  Jenkins-Master: Provisioniert mit Puppet
  • 65.
    Kontakt Richard Attermeyer Senior Solution Architect OPITZ CONSULTING GmbH Kirchstr. 6 | 51647 Gummersbach Phone: +49 173 727 9004 Mail: richard.attermeyer@opitz-consulting.com Twitter: @attermr Blog: blog.devopsarchitect.de youtube.com/opitzconsulting @OC_WIRE slideshare.net/opitzconsulting xing.com/net/opitzconsulting
  • 66.
    Fotoreferenzen „Computer Problems“by CollegeDegrees360 is licensed under CC BY 2.0 Git Logo by Jason Long is licensed under the Creative Commons Attribution 3.0 Unported License. “Crossroads” by Carsten Tokmit is licensed under CC BY-SA 2.0 “Gucker” by H.P. Brinkmann is licensed under CC BY 2.0

Hinweis der Redaktion

  • #3 Womit beschäftige ich mich: Aktuell: Early Life Support (3. Woche) für Projekt „Kleine Schwester“, daneben weiterhin Support „großer Bruder“ (seit über 3 Jahren) DevOps, Continuous Delivery, Softwareentwicklung im agilen Umfeld Business Development
  • #4 Präsentation für ca 60min
  • #5 Was ist die Agenda für den heutigen Vortrag? Kollegen fragen: Was verbirgt sich hinter Puppet, Docker? Wie passt das zusammen?
  • #6 Konzentration auf: Entwicklung + Continuous Delivery
  • #7 Auch wenn der Vortrag: Vagrant, Puppet und Docker heißt. Eigentlich geht es um die Ideen von Virtuellen Maschinen, Configuration Mgmt und Container am Beispiel der konkreten Technologien …
  • #8 Präsentation für ca 60min
  • #9 Motivation: Wer kann definieren was DevOps ist? Wir bekommen bestimmt so viele Antworten, wie Teilnehmer im Raum Wenn wir uns um Entwicklung und Continuous Delivery kümmern, dann kommen wir an den Begriffen DevOps + Continuous Delivery nicht vorbei. Daher hier ein paar Worte dazu: Der Begriff DevOps ist nicht einfach zu fassen. DevOps ist eine fachliche und kulturelle Bewegung. Sie wird fachlich von den beiden im Unternehmensumfeld getrennt betrachteten Organisationseinheiten /Communities Entwickler (Development) und den Systemadministratoren (Operations) getragen. Das Silodenken wird von Mitgliedern dieser Einheiten häufig als hinderlich betrachtet. Die Anhänger der DevOps-Bewegung wollen diese Kultur ändern und Entwicklung und Betrieb näher zusammen bringen. Beide Seiten können voneinander lernen. Beide sind zusammen verantwortlich dafür, dass eine Codeänderung schnell vom Commit einer Änderung bis in die Produktion gelangt.
  • #10 Unter Continuous Delivery versteht man eine konkrete Sammlung von Techniken, Prozessen und Werkzeugen, die den Softwareentwicklungsprozess verbessern. Und im Folgenden sollen einige Werkzeuge einmal näher betrachtet werden und wie diese Continuous Delivery unterstützen können.
  • #11 Motivation: Teams: eher selten, dass neue Kollegen eingephast werden müssen Aber: Consultant und MSA Herausforderungen
  • #15 Works on my machine: Abweichungen zw. Entwicklung und CI / Test / Produktionsumgebung führt dazu, dass Code entwickelt wird, der Spezifika der Umgebung berücksichtigt (etwa JDK Versionen, Library Versionen, …) Probleme treten dann erst beim CI zu Tage. Suche beginnt.
  • #17 A golden image is a template for a virtual machine (VM), virtual desktop, server or hard disk drive.  A golden image may also be referred to as a clone image or master image. Golden Image: Hat etwas mythisches: Meistens bringt das Probleme mit sich …
  • #20 Die Frage hat sich auch Mitchell Hashimoto gestellt. Während seines Studiums hat er als Freiberufler für verschiedene Kunden und Projekte gearbeitet und musste sich seine Entwicklungsumgebung immer neu zusammenstellen. Das verbrauchte Platz der 2010 noch etwas knapp auf Laptops zur Verfügung stand. Seine Antwort …
  • #26 Hier besteht Abwägungsaufwand: Im Netz finden Sie häufig nur Basisboxen (Bare Images) Das Provisionieren dauert relativ lange Es ist nicht ganz so einfach eine „saubere“ Basisbox zu erstellen
  • #33 Beispiel 4
  • #34 Beispiel 6
  • #35 Klassen werden mit include <classname> eingebunden
  • #36 Deklarativ: Beschreibe den Soll-Zustand der Umgebung Versionskontrolle: Puppet Scripts sind einfache Textfiles und als solche einfach versionierbar. Puppet von Hause etwas schwach was Abhängigkeitsmanagement angehet, aber mit librarian Puppet schon gut
  • #39 Eine Entwicklungsumgebung aus virtuellen Maschinen ist relativ Ressourcenhungrig, da sie immer den kompletten Betriebssystemstack benötigt.
  • #40 Eine Entwicklungsumgebung aus virtuellen Maschinen ist relativ Ressourcenhungrig, da sie immer den kompletten Betriebssystemstack benötigt.
  • #41 Eine Entwicklungsumgebung aus virtuellen Maschinen ist relativ Ressourcenhungrig, da sie immer den kompletten Betriebssystemstack benötigt.
  • #43 Build: Develop an app using Docker containers with any language and any toolchain. Ship: Ship the “Dockerized” app and dependencies anywhere - to QA, teammates, or the cloud - without breaking anything. Run: Scale to 1000s of nodes, move between data centers and clouds, update with zero downtime and more.
  • #44 Docker images are essentially a collection of files which include everything needed to run that process. This is everything from the OS packages and up. A docker image has a default process it runs when it is instantiated. This could be bash, to drop you into the terminal, or a web server so you can access it from the browser. To construct a docker image you use “docker build” which uses a docker configuration file. This file is usually about 5-6 lines of unix commands, such as apt-get. You can think of it as a bash script, but it is much simpler, and it is targeted towards the construction of image layers. Therefore, you might have a line for the base Operating System, then for installing Apache web-server, then a line for installing your programming language runtimes and then your code, or the process, that you want to run. The simplest docker image is “busybox,” which is 5Mb linux distribution, so it is very small. Layers Docker images are built up in layers. So, for instance, if you need to run WordPress, you would build the Ubuntu layer, add a layer for Apache2 web server, add a PHP layer and then a layer for the WordPress files. Lower layers can be re-used. We might take the PHP layer and layer on Drupal instead of WordPress, or update our WordPress layer with a newer version or Wordpress. Because we can re-use layers, we can make new docker images very cheaply. We can create a new docker image by changing just a single line of one file and we do not have to rebuild the whole stack. The beauty of docker images being “just files” means that the difference between two docker images is just a diff of the files they contain.
  • #45 Virtual Machines Each virtualized application includes not only the application - which may be only 10s of MB - and the necessary binaries and libraries, but also an entire guest operating system - which may weigh 10s of GB. Docker The Docker Engine container comprises just the application and its dependencies. It runs as an isolated process in userspace on the host operating system, sharing the kernel with other containers. Thus, it enjoys the resource isolation and allocation benefits of VMs but is much more portable and efficient.