Slide of a workshop about DevOps with Docker in German.
DevOps mit Docker - ein Workshop für Softwareentwickler und Systemadministratoren
Docker zieht seit einiger Zeit viel Aufmerksamkeit auf sich, hauptsächlich weil es das aktuelle sehr populäre Thema DevOps adressiert. Bei Docker handelt es sich eine offene Plattform für Software-Entwickler und Sysadmins, mit der sie Software annähernd überall bauen, ausliefern und betreiben können. In diesem Workshop werden Sie lernen wie Software-Container gebaut, ausgeliefert, konfiguriert und betrieben werden. Der Vortragende wird sie anhand von praktischen Beispielen an seinen Erfahrungen teilhaben lassen.
2. Abstract
DevOps mit Docker - ein Workshop für Softwareentwickler und
Systemadministratoren
Docker zieht seit einiger Zeit viel Aufmerksamkeit auf sich,
hauptsächlich weil es das aktuelle sehr populäre Thema DevOps
adressiert. Bei Docker handelt es sich eine offene Plattform für
Software-Entwickler und Sysadmins, mit der sie Software annähernd
überall bauen, ausliefern und betreiben können. In diesem Workshop
werden Sie lernen wie Software-Container gebaut, ausgeliefert,
konfiguriert und betrieben werden. Der Vortragende wird sie anhand
von praktischen Beispielen an seinen Erfahrungen teilhaben lassen.
3. Christian Noack
Dipl.-Informatiker
Software-Entwicklung seit 1988
Selbstständig seit 2004
Agile Methoden
Projektmanagement
Software-Entwicklung
Gesamter Software-Lifecycle
Banken, Versicherung, Logistik, Gesundheitswesen
www.agile-methoden.de
4. Am Ende der Software-Enwicklung:
Bauen der Software
⟹ Auslieferung
⟹ Systemintegration
⟹ Ausführung
Systemintegration ist ein häufig vernachlässigtes Thema
mit unerwartet hohem Aufwand
Unsere heutige Agenda daher:
5. Am Ende der Software-Enwicklung:
Bauen der Software
⟹ Auslieferung
⟹ Systemintegration
⟹ Ausführung
Systemintegration ist ein häufig vernachlässigtes Thema
mit unerwartet hohem Aufwand
Unsere heutige Agenda daher:
BUILD, SHIP, RUN !
8. Rental King
Herbert Hitzegrad Baumaschinenverleih
10 Mitarbeiter
1 Standort
Windows-PC
Standard-SW
Trailer Rental
Stachoviak
Zick Zack
Maschinenverleih
Fusionierung
200 Mitarbeiter
40 Standorte
Gründung IT-Abteilung
9. Erste Aufgabe der IT
✤ Einführung SAP
✤ Entwicklung einer spezialisierten Software für Verleih/
Vermietung
✤ Systemhaus
10. Erste Aufgabe der IT
✤ Einführung SAP
✤ Entwicklung einer spezialisierten Software für Verleih/
Vermietung
✤ Systemhaus Peek & Poke
11. Software-Entwicklung
✤ non fuctional requirements:
✤ Java, JBoss, SAP-Anbindung, Postgresql
✤ Betrieb im Rechenzentrum „Hans Petersen“
✤ Installation, Wartung, Backup durch HaPe
✤ RHEL, SAP als Service
12. Initialisierung
✤ Neue Funktionalität getrieben durch Fachabteilung
oder Gesetzgeber
✤ Anforderungsanalyse IT/FA
✤ Priorisierung, Festlegung des Umfangs
✤ Festpreisprojekt
✤ Iterative Entwicklung mit Change-Management
13. Implementierung
✤ Test am Ende einer Iteration auf Entwicklungsserver von Peek
& Poke
✤ Debian 7, JBoss 7, Postgresql 9.4, JDK8, SAP-Testserver
✤ Nach 5 Iterationen ⟹ Release
✤ Lieferung von P&P:
✤ War-Files, Jar-Files, Konfigurationsdateien
✤ Migrationsscripts, Installationsanleitung
14. Installation in Abnahmeumgebung
✤ Abnahme bei Rental King
✤ lokaler physischer Server im Intranet
✤ PC, 16 GB, Ubuntu 14.04 LTS
✤ Postgresql 9.3, JDK 7, JBoss 6
✤ Manuelle Installation:
✤ Kopieren, Stoppen, Starten, Konfigurationsdateien anpassen
✤ Files löschen, sichern usw. einige manuelle Anpassungen wg.
Versionsinkompabilitäten
✤ Test & Abnahme durch Fachabteilung
15. Installation in
Produktionsumgebung
✤ Übertragung: war, jar, Config-Files, Migrationsscripts, modif.
Installationsdateien
✤ Manuelle Installation im RZ durch Mitarbeiter von HaPe
✤ Zielumgebung:
✤ REHL 7, JBoss 6, JDK 7, Postgresql 9.2, SAP as a Service
✤ Einige Probleme bei Installation, manuelle Korrekturen
✤ Test durch IT v. Rental King ⟹ Freigabe
✤ Online Schaltung durch HaPe
16. Weiterentwicklung
✤ Erweiterungen
✤ Neue Online-Angebote für Kunden
✤ Internes PM & Ticketing-System (Redmine)
✤ ….
✤ Teilweise entwickelt durch Peek & Poke
✤ Teilweise Open-Source
✤ Umzug in neues Rechenzentrum
17. Probleme
✤ umgebungsspez. Konfigurationen
✤ Probleme bei Deployment d. Java-Anwendungen
✤ OutOfMemory, HeapSpace, Rechte, Systemabhängigkeiten, fehlende
Bibliotheken, falsche Java-Version
✤ Eingriffe durch das RZ notwendig
✤ Rollback ≙ Neuauslieferung
✤ Unterschiedliche Installationsprozesse für verschiedene Anwendungen
(Java, RoR, …)
✤ Umzug auf neuen Server bedeutet Neuinstallation
20. „Die Systemintegration wird häufig völlig unterschätzt.“
Ursache ist die starke Trennung zwischen
Software-Entwicklung und Betrieb
Thema gewinnt in letzter Zeit deutlich an Interesse
21. „Die Systemintegration wird häufig völlig unterschätzt.“
Ursache ist die starke Trennung zwischen
Software-Entwicklung und Betrieb
Thema gewinnt in letzter Zeit deutlich an Interesse
DevOps
22. Alternative: Scripting
✤ Umgebungsspez. Scripts für autom. Installation
✤ Wo werden Scripts getestet?
✤ Scripts unterliegen kontinuierliche Anpassung
✤ Nicht trivial
✤ Nur umgebungsspezifische Reproduzierbarkeit
24. Wie kam es dazu?
✤ 1995: Konrad Zuse trifft Bill Gates auf der CeBit
✤ Zuse: Rechner über Funktion aus, Software beschreibt
Funktion. Software alleine wertlos
✤ Gates erkennt Wert von Software unabhängig von Hardware
✤ Gates betrachtet Trennung aber vor allem
betriebswirtschaftl.
✤ Techn. besteht Abhängigkeit (Intel-Prozessoren)
25. Entkopplung Software/Hardware
✤ In der Software-Entwicklung Trennung von
Applikationscode und Hardware durch virtualisierte
Ausführungsumgebung für Bytecode (Smalltalk-80,
Java 1995)
✤ Bytecode ist HW-unabhängig
✤ VM ist Prozessor und OS-spezifisch
✤ Portable Software
26. Web 2.0
✤ 2000er: Google, Facebook, Amazon (RZ, Cloud-
Services, Kindle)
✤ SW übt Funktion aus, HW annähernd beliebig
✤ HW durch Virtualisierung vollständig abstrahiert
✤ Verwendung von eigenen Virtualisierungstechniken
✤ Linux Kernel LXC
27. Entwicklung vs. Betrieb
✤ Entwicklung immer öfter virtualisiert
✤ Virtual Box, Vagrant …
✤ Betrieb i.d.R. in traditioneller Infrastruktur
✤ Standardisierten Virtualisierungsverfahren erst am Anfang
✤ Ausnahme:
✤ RZ für Privatkunden und kleinere Unternehmen (HostEurope,
Strato, Hetzer)
✤ Spezialisierte RZ (Heruko)
29. Beispiel
✤ Einführung eines Redmine-Systems bei Rental King
✤ Dazu brauchen wir:
✤ Redmine
✤ Postgresql-Datenbank
✤ Anbindung an vorhandenen SMTP-Server
31. Kapselung
✤ Redmine und Postgresql soweit kapseln, dass bereits
bei Entwicklung alles enthalten ist, was später in der
Produktion gebraucht wird
✤ bis auf: vorhandene Infrastrukturkomponenten:
✤ SMTP-Server
✤ Storage (NAS/SAN)
33. Minimale Vorraussetzungen an
Ausführungsumgebung
✤ Linux-Kernel > 3.x
✤ Docker-Installation > 1.5
✤ Minimales OS (CoreOs, TinyOs) oder vollständiges OS
(Ubuntu, Debian, RedHat …)
✤ Nicht benötigt:
✤ spezielle Bibliotheken/Systemblibliotheken
✤ Java-, PHP-, Ruby-Installationen
34. Gewünschte Entkopplung der
Container
✤ Container enthält alles was für Ausführung der
Anwendung benötigt wird
✤ Container können verbunden werden (Link)
✤ Unser Beispiel: 2 Container
35. Gewünschte Entkopplung der
Container
✤ Container enthält alles was für Ausführung der
Anwendung benötigt wird
✤ Container können verbunden werden (Link)
✤ Unser Beispiel: 2 Container
POSTGRESQL REDMINE
45. V4: Volumes
✤ Datenverlust bei Neustart des Containers, weil Daten im Container
✤ Container wächst
✤ Ziel:
✤ Daten im Container sind volatil
✤ Persistente Daten außerhalb des containers
✤ Initialisierung immer automatisch
✤ Start mit -d als Daemon
✤ Definition des VOLUME im Dockerfile
✤ start/stop Daten bleiben erhalten
46. V5: Volumes
✤ Festgelegte Volumes im Host Filesytem
✤ Starten mit -v
✤ Entfernen von Volume aus Dockerfile
✤ Einführung eines Startskripts
✤ Rechte auf Ordner setzen
✤ Daten persistent im Filesystem
47. V6: Volume Container
✤ Volume Container statt direct mounting auf Host FS
✤ Host-FS an Volume Container gebunden
✤ Postgres-Container verwendet Volume-Container
✤ Volume-Container wird nur erzeugt, muss nicht laufen
sudo docker create -v $PGDATA:/var/lib/postgresql/data …
--name docker-volume ubuntu:trusty /bin/true
docker run … volumes-from docker-volume
48. Redmine
Registry
8081
8081
805000
Mac OS X
Git
Safari
Atom
Virtual Box Server (Vagrant)
Postgres Volume
FS
FSConsole
Docker Commands
virtual box internal network
Virtual Box Target (Vagrant)
Volume
Redmine
Postgres
FSConsole
Docker Commands
8082
8081
5555
5555
5432
49. Redmine
Registry
8081
8081
805000
Mac OS X
Git
Safari
Atom
Virtual Box Server (Vagrant)
Postgres Volume
FS
FSConsole
Docker Commands
virtual box internal network
Virtual Box Target (Vagrant)
Volume
Redmine
Postgres
FSConsole
Docker Commands
8082
8081
5555
5555
5432
50. V7: Parameter
✤ Parameter f. Postgres-Container beim Run mitgeben
✤ DB-Password über Kommandozeile abfragen
docker run … -e DB_NAME_VAR='redmine' …
51. V8: Besseres Init-System
✤ Bisher Ubuntu Basis-Image:
✤ Start der Anwendung mit CMD oder ENTRYPOINT
✤ Problem: Ubuntu-Init-System (Upstart) läuft nicht
✤ Kind-Prozesse des CMD werden nicht abgeräumt
✤ Zombie-Prozesse im Container
✤ Probleme beim start/stop
✤ docker stop SIGTERM nur an obersten Prozess
52. V8: Phusion Base-Image
✤ bislang kein syslog und kein cron
✤ Umstellung von Ubuntu auf Phusion
✤ Sauberes Init-System mit SIGTERM-Behandlung
✤ Anpassung Dockerfile
✤ Neues Run-Script
FROM phusion/baseimage:0.9.16
55. Mac OS X
Git
Safari
Atom
Virtual Box Server (Vagrant)
Postgres
Redmine
Registry
Volume
FS
FSConsole
Docker Commands
virtual box internal network
Virtual Box Target (Vagrant)
Volume
Redmine
Postgres
FSConsole
Docker Commands
8082
8081
5555
5555
8081
8081
5432805000
56. Mac OS X
Git
Safari
Atom
Virtual Box Server (Vagrant)
Postgres
Redmine
Registry
Volume
FS
FSConsole
Docker Commands
virtual box internal network
Virtual Box Target (Vagrant)
Volume
Redmine
Postgres
FSConsole
Docker Commands
8082
8081
5555
5555
8081
8081
5432805000
57. Transfer Image in Target Env
✤ Zielumgebung aufbauen: Linux 64 + Docker
✤ Manuelles Kopieren der Images
✤ Anlegen der Startskripts
✤ create volume
✤ start postgres
✤ start redmine
58. Eigene Registry verwenden
✤ Statt DockerHub
✤ Registry aus Basis-Image erstellen und starten
✤ Images pushen
✤ Images auf anderer Maschine (Target) pullen
sudo docker run -d -p 5000:5000 --restart=always
--name registry registry:2
59. sudo docker tag agilemethoden/postgres:v8
localhost:5000/agilemethoden/postgres:v8
sudo docker images
Vorhandenes Image taggen, damit es später in neue Registry
übertragen werden kann:
In neues Registry pushen
sudo docker push localhost:5000/agilemethoden/postgres:v8
sudo docker pull 192.168.50.4:5000/agilemethoden/postgres:v8
Auf anderer Maschine aus dem Registry pullen
60. Mac OS X
Git
Safari
Atom
Virtual Box Server (Vagrant)
Postgres
Redmine
Registry
Volume
FS
FSConsole
Docker Commands
virtual box internal network
Virtual Box Target (Vagrant)
Volume
Redmine
Postgres
FSConsole
Docker Commands
8082
8081
5555
5555
8081
8081
5432805000