SlideShare una empresa de Scribd logo
1 de 64
Descargar para leer sin conexión
10. Juli 2015
Docker - ein Workshop für DevOps
Experten Forum Stuttgart
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.
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
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:
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 !
Rental King
ein fiktives Praxisbeispiel
Rental King
Herbert Hitzegrad Baumaschinenverleih
10 Mitarbeiter
1 Standort
Windows-PC
Standard-SW
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
Erste Aufgabe der IT
✤ Einführung SAP
✤ Entwicklung einer spezialisierten Software für Verleih/
Vermietung
✤ Systemhaus
Erste Aufgabe der IT
✤ Einführung SAP
✤ Entwicklung einer spezialisierten Software für Verleih/
Vermietung
✤ Systemhaus Peek & Poke
Software-Entwicklung
✤ non fuctional requirements:
✤ Java, JBoss, SAP-Anbindung, Postgresql
✤ Betrieb im Rechenzentrum „Hans Petersen“
✤ Installation, Wartung, Backup durch HaPe
✤ RHEL, SAP als Service
Initialisierung
✤ Neue Funktionalität getrieben durch Fachabteilung
oder Gesetzgeber
✤ Anforderungsanalyse IT/FA
✤ Priorisierung, Festlegung des Umfangs
✤ Festpreisprojekt
✤ Iterative Entwicklung mit Change-Management
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
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
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
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
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
„Die Systemintegration wird häufig völlig unterschätzt.“
– Jens-Uwe Pipka
„Die Systemintegration wird häufig völlig unterschätzt.“
„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
„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
Alternative: Scripting
✤ Umgebungsspez. Scripts für autom. Installation
✤ Wo werden Scripts getestet?
✤ Scripts unterliegen kontinuierliche Anpassung
✤ Nicht trivial
✤ Nur umgebungsspezifische Reproduzierbarkeit
Alternative: Container
✤ Docker (www.docker.com)
✤ RKT/Rocket (https://coreos.com/rkt/docs/latest/)
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)
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
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
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)
Etablierung der Container-
Technologie 2013
Vollständige Entkopplung von Software und Hardware
Beispiel
✤ Einführung eines Redmine-Systems bei Rental King
✤ Dazu brauchen wir:
✤ Redmine
✤ Postgresql-Datenbank
✤ Anbindung an vorhandenen SMTP-Server
Non functional requirements
✤ Portierbarkeit
✤ Kapselung
✤ Reproduzierbarkeit
✤ Testbarkeit
✤ Unabhängigkeit von Ausführungsumgebung
✤ OS-Version
✤ Installierte Systembibliotheken
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)
Kapselung
BUILD, SHIP, RUN !
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
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
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
Gewünschte Entkopplung der
Container
POSTGRESQL REDMINE
Zuerst
DockerHub
Produktionsumg.
Dockerfile
LokaleUmgebung
Image
Basis-
Image
EngineContainer
Image
EngineContainer
Vorraussetzungen f. Entwicklung
✤ Linux-System 64bit (physikl. oder virtuell)
✤ Kernel 3.x
✤ Docker-Installation> 1.6
✤ Windows: boot2docker oder vagrant
✤ Mac: boot2docker, kitematic oder vagrant
✤ Empfehlung Debian-basiertes Linux-System
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
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
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
V1: Funktionsloses Image
✤ Dockerfile
✤ docker build
✤ Versionsnummer
✤ Layer
✤ docker run mit /bin/bash
✤ FROM, MAINTAINER, ENV
sudo docker build -t agilemethoden/postgres:v1 .
V2: Postgres installieren
✤ Layer
✤ Ubuntu apt-get im Container
✤ CMD
V3: Postgres-Konfiguration
✤ Start von Postgres
✤ ADD, EXPOSE, ENTRYPOINT
✤ Start mit -P oder -p 5555:5432
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
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
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
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
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
V7: Parameter
✤ Parameter f. Postgres-Container beim Run mitgeben
✤ DB-Password über Kommandozeile abfragen
docker run … -e DB_NAME_VAR='redmine' …
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
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
Granularität
✤ Microservices vs. Anwendungen
✤ Was ist Infrastruktur?
✤ Was gehört in einen Container?
V10: Redmine-Container
✤ Erstellen des vorbereiteten Redmine-Images
✤ Einbinden des Volume-Containers
✤ Linking an Postgres-Container
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
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
Transfer Image in Target Env
✤ Zielumgebung aufbauen: Linux 64 + Docker
✤ Manuelles Kopieren der Images
✤ Anlegen der Startskripts
✤ create volume
✤ start postgres
✤ start redmine
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
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
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
Ausblick
✤ Weiterentwicklung Docker
✤ Konkurrenz Rocket
✤ Management-Tools:
✤ Consul
✤ Kubernetes
✤ Docker-Machine
✤ Fabric8
Sinnvolle Kommandos
sudo docker inspect -f "{{.Volumes}}" containername
sudo docker run -t -i -p 5555:5432 -d —name containername agilemethoden/postgres:v4
sudo docker ps
# Connect an laufenden Container

sudo docker exec -t -i redminepg /bin/bash
# Delete all containers

sudo docker rm $(docker ps -a -q)
# Delete all images

sudo docker rmi $(docker images -q)
# Delete all untagged images

sudo docker rmi $(docker images | grep '^<none>' | awk '{print $3}')
„noch Fragen?“
Danke
Folien zum Vortrag auf
http://de.slideshare.net/agilemethoden/docker-workshopefs2015
Infos zum Autor auf
http://www.agile-methoden.de
Bei Fragen gerne auch:
info@agile-methoden.de
© 2015, Christian Noack, Agile Methoden GmbH

Más contenido relacionado

La actualidad más candente

Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...inovex GmbH
 
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
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumNicholas Dille
 
Hendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit DockerHendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit Dockergedoplan
 
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenContinuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenNicholas Dille
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker ContainerAndreas Koop
 
Docker and Raspberry Pi. A dream team?
Docker and Raspberry Pi. A dream team?Docker and Raspberry Pi. A dream team?
Docker and Raspberry Pi. A dream team?Govinda Fichtner
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows ContainerThomas Wilhelm Wiefel
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17remigius-stalder
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...B1 Systems GmbH
 
Versionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und GitVersionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und Gitpaultcochrane
 
OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!Tobias Schneck
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturQAware GmbH
 
SLAC 2009 - Disaster Recovery und P2V-Migrationen mit Relax and Recover (ReaR)
SLAC 2009 - Disaster Recovery und P2V-Migrationen mit Relax and Recover (ReaR)SLAC 2009 - Disaster Recovery und P2V-Migrationen mit Relax and Recover (ReaR)
SLAC 2009 - Disaster Recovery und P2V-Migrationen mit Relax and Recover (ReaR)Schlomo Schapiro
 

La actualidad más candente (20)

Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
 
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
 
Was ist Docker ?
Was ist Docker ?Was ist Docker ?
Was ist Docker ?
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-Universum
 
Hendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit DockerHendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit Docker
 
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenContinuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
 
Jenkins Acceleration
Jenkins AccelerationJenkins Acceleration
Jenkins Acceleration
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker Container
 
Docker and Raspberry Pi. A dream team?
Docker and Raspberry Pi. A dream team?Docker and Raspberry Pi. A dream team?
Docker and Raspberry Pi. A dream team?
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows Container
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
 
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
 
Versionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und GitVersionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und Git
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
 
Nginx
NginxNginx
Nginx
 
SLAC 2009 - Disaster Recovery und P2V-Migrationen mit Relax and Recover (ReaR)
SLAC 2009 - Disaster Recovery und P2V-Migrationen mit Relax and Recover (ReaR)SLAC 2009 - Disaster Recovery und P2V-Migrationen mit Relax and Recover (ReaR)
SLAC 2009 - Disaster Recovery und P2V-Migrationen mit Relax and Recover (ReaR)
 

Destacado

Docker introduction
Docker introductionDocker introduction
Docker introductionLayne Peng
 
OOP 2012 - Udo Pracht - DevOps Einführung und Überblick
OOP 2012 - Udo Pracht - DevOps Einführung und ÜberblickOOP 2012 - Udo Pracht - DevOps Einführung und Überblick
OOP 2012 - Udo Pracht - DevOps Einführung und ÜberblickUdo Pracht
 
Using Rancher and Docker with RightScale at Industrie IT
Using Rancher and Docker with RightScale at Industrie IT Using Rancher and Docker with RightScale at Industrie IT
Using Rancher and Docker with RightScale at Industrie IT RightScale
 
Continuous integration eine Einführung für Unkundige
Continuous integration   eine Einführung für UnkundigeContinuous integration   eine Einführung für Unkundige
Continuous integration eine Einführung für Unkundigeabuwipp
 
Preparing your dockerised application for production deployment
Preparing your dockerised application for production deploymentPreparing your dockerised application for production deployment
Preparing your dockerised application for production deploymentDave Ward
 
Telekom Techtalk - Practical DevOps
Telekom Techtalk - Practical DevOpsTelekom Techtalk - Practical DevOps
Telekom Techtalk - Practical DevOpsSchlomo Schapiro
 
DevOps: Revolution im IT Betrieb?
DevOps: Revolution im IT Betrieb?DevOps: Revolution im IT Betrieb?
DevOps: Revolution im IT Betrieb?Digicomp Academy AG
 
Einblick in die Intranet Transformation bei Swisscom AG
Einblick in die Intranet Transformation bei Swisscom AGEinblick in die Intranet Transformation bei Swisscom AG
Einblick in die Intranet Transformation bei Swisscom AGThomas Maeder
 
Container Tag – Nie mehr warten auf die IT! - Tag Management Lösung
Container Tag – Nie mehr warten auf die IT! - Tag Management LösungContainer Tag – Nie mehr warten auf die IT! - Tag Management Lösung
Container Tag – Nie mehr warten auf die IT! - Tag Management LösungConnected-Blog
 

Destacado (9)

Docker introduction
Docker introductionDocker introduction
Docker introduction
 
OOP 2012 - Udo Pracht - DevOps Einführung und Überblick
OOP 2012 - Udo Pracht - DevOps Einführung und ÜberblickOOP 2012 - Udo Pracht - DevOps Einführung und Überblick
OOP 2012 - Udo Pracht - DevOps Einführung und Überblick
 
Using Rancher and Docker with RightScale at Industrie IT
Using Rancher and Docker with RightScale at Industrie IT Using Rancher and Docker with RightScale at Industrie IT
Using Rancher and Docker with RightScale at Industrie IT
 
Continuous integration eine Einführung für Unkundige
Continuous integration   eine Einführung für UnkundigeContinuous integration   eine Einführung für Unkundige
Continuous integration eine Einführung für Unkundige
 
Preparing your dockerised application for production deployment
Preparing your dockerised application for production deploymentPreparing your dockerised application for production deployment
Preparing your dockerised application for production deployment
 
Telekom Techtalk - Practical DevOps
Telekom Techtalk - Practical DevOpsTelekom Techtalk - Practical DevOps
Telekom Techtalk - Practical DevOps
 
DevOps: Revolution im IT Betrieb?
DevOps: Revolution im IT Betrieb?DevOps: Revolution im IT Betrieb?
DevOps: Revolution im IT Betrieb?
 
Einblick in die Intranet Transformation bei Swisscom AG
Einblick in die Intranet Transformation bei Swisscom AGEinblick in die Intranet Transformation bei Swisscom AG
Einblick in die Intranet Transformation bei Swisscom AG
 
Container Tag – Nie mehr warten auf die IT! - Tag Management Lösung
Container Tag – Nie mehr warten auf die IT! - Tag Management LösungContainer Tag – Nie mehr warten auf die IT! - Tag Management Lösung
Container Tag – Nie mehr warten auf die IT! - Tag Management Lösung
 

Similar a Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH

Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerSteven Grzbielok
 
Container im Betrieb - Ergebnisse der Validieren Docker vs. LXC
Container im Betrieb - Ergebnisse der Validieren Docker vs. LXCContainer im Betrieb - Ergebnisse der Validieren Docker vs. LXC
Container im Betrieb - Ergebnisse der Validieren Docker vs. LXCBild GmbH & Co. KG
 
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationGWAVA
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringQAware GmbH
 
Vagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungVagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungTilo Baller
 
oVirt 3.5 - Einführung und Evaluierungsergebnisse
oVirt 3.5 - Einführung und EvaluierungsergebnisseoVirt 3.5 - Einführung und Evaluierungsergebnisse
oVirt 3.5 - Einführung und Evaluierungsergebnisseinovex GmbH
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Docker Entwicklungsumgebung für TYPO3 mit xdebug
Docker Entwicklungsumgebung für TYPO3 mit xdebugDocker Entwicklungsumgebung für TYPO3 mit xdebug
Docker Entwicklungsumgebung für TYPO3 mit xdebugAlexander Bohndorf
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
NetBeans für PHP-Entwickler
NetBeans für PHP-EntwicklerNetBeans für PHP-Entwickler
NetBeans für PHP-EntwicklerIngo Reinhart
 
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...Marc Müller
 
Gebäudeautomation mit Java und OpenRemote
 Gebäudeautomation mit Java und OpenRemote Gebäudeautomation mit Java und OpenRemote
Gebäudeautomation mit Java und OpenRemotegedoplan
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringQAware GmbH
 
Die Containerplattform Lego für DevOps
Die Containerplattform Lego für DevOpsDie Containerplattform Lego für DevOps
Die Containerplattform Lego für DevOpsATIX AG
 
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)Trivadis
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & DominoUlrich Krause
 
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
 

Similar a Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH (20)

Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
 
Container im Betrieb - Ergebnisse der Validieren Docker vs. LXC
Container im Betrieb - Ergebnisse der Validieren Docker vs. LXCContainer im Betrieb - Ergebnisse der Validieren Docker vs. LXC
Container im Betrieb - Ergebnisse der Validieren Docker vs. LXC
 
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform Engineering
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker Container
 
Vagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungVagrant - Einführung & Verwendung
Vagrant - Einführung & Verwendung
 
oVirt 3.5 - Einführung und Evaluierungsergebnisse
oVirt 3.5 - Einführung und EvaluierungsergebnisseoVirt 3.5 - Einführung und Evaluierungsergebnisse
oVirt 3.5 - Einführung und Evaluierungsergebnisse
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Docker Entwicklungsumgebung für TYPO3 mit xdebug
Docker Entwicklungsumgebung für TYPO3 mit xdebugDocker Entwicklungsumgebung für TYPO3 mit xdebug
Docker Entwicklungsumgebung für TYPO3 mit xdebug
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
NetBeans für PHP-Entwickler
NetBeans für PHP-EntwicklerNetBeans für PHP-Entwickler
NetBeans für PHP-Entwickler
 
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
 
Gebäudeautomation mit Java und OpenRemote
 Gebäudeautomation mit Java und OpenRemote Gebäudeautomation mit Java und OpenRemote
Gebäudeautomation mit Java und OpenRemote
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform Engineering
 
Die Containerplattform Lego für DevOps
Die Containerplattform Lego für DevOpsDie Containerplattform Lego für DevOps
Die Containerplattform Lego für DevOps
 
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
 
Docker Workbench
Docker WorkbenchDocker Workbench
Docker Workbench
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & Domino
 
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
 

Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH

  • 1. 10. Juli 2015 Docker - ein Workshop für DevOps Experten Forum Stuttgart
  • 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 !
  • 6. Rental King ein fiktives Praxisbeispiel
  • 7. Rental King Herbert Hitzegrad Baumaschinenverleih 10 Mitarbeiter 1 Standort Windows-PC Standard-SW
  • 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
  • 18. „Die Systemintegration wird häufig völlig unterschätzt.“ – Jens-Uwe Pipka
  • 19. „Die Systemintegration wird häufig völlig unterschätzt.“
  • 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
  • 23. Alternative: Container ✤ Docker (www.docker.com) ✤ RKT/Rocket (https://coreos.com/rkt/docs/latest/)
  • 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)
  • 28. Etablierung der Container- Technologie 2013 Vollständige Entkopplung von Software und Hardware
  • 29. Beispiel ✤ Einführung eines Redmine-Systems bei Rental King ✤ Dazu brauchen wir: ✤ Redmine ✤ Postgresql-Datenbank ✤ Anbindung an vorhandenen SMTP-Server
  • 30. Non functional requirements ✤ Portierbarkeit ✤ Kapselung ✤ Reproduzierbarkeit ✤ Testbarkeit ✤ Unabhängigkeit von Ausführungsumgebung ✤ OS-Version ✤ Installierte Systembibliotheken
  • 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
  • 38. Vorraussetzungen f. Entwicklung ✤ Linux-System 64bit (physikl. oder virtuell) ✤ Kernel 3.x ✤ Docker-Installation> 1.6 ✤ Windows: boot2docker oder vagrant ✤ Mac: boot2docker, kitematic oder vagrant ✤ Empfehlung Debian-basiertes Linux-System
  • 39. 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
  • 40. 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
  • 41. 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
  • 42. V1: Funktionsloses Image ✤ Dockerfile ✤ docker build ✤ Versionsnummer ✤ Layer ✤ docker run mit /bin/bash ✤ FROM, MAINTAINER, ENV sudo docker build -t agilemethoden/postgres:v1 .
  • 43. V2: Postgres installieren ✤ Layer ✤ Ubuntu apt-get im Container ✤ CMD
  • 44. V3: Postgres-Konfiguration ✤ Start von Postgres ✤ ADD, EXPOSE, ENTRYPOINT ✤ Start mit -P oder -p 5555:5432
  • 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
  • 53. Granularität ✤ Microservices vs. Anwendungen ✤ Was ist Infrastruktur? ✤ Was gehört in einen Container?
  • 54. V10: Redmine-Container ✤ Erstellen des vorbereiteten Redmine-Images ✤ Einbinden des Volume-Containers ✤ Linking an Postgres-Container
  • 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
  • 61. Ausblick ✤ Weiterentwicklung Docker ✤ Konkurrenz Rocket ✤ Management-Tools: ✤ Consul ✤ Kubernetes ✤ Docker-Machine ✤ Fabric8
  • 62. Sinnvolle Kommandos sudo docker inspect -f "{{.Volumes}}" containername sudo docker run -t -i -p 5555:5432 -d —name containername agilemethoden/postgres:v4 sudo docker ps # Connect an laufenden Container
 sudo docker exec -t -i redminepg /bin/bash # Delete all containers
 sudo docker rm $(docker ps -a -q) # Delete all images
 sudo docker rmi $(docker images -q) # Delete all untagged images
 sudo docker rmi $(docker images | grep '^<none>' | awk '{print $3}')
  • 64. Danke Folien zum Vortrag auf http://de.slideshare.net/agilemethoden/docker-workshopefs2015 Infos zum Autor auf http://www.agile-methoden.de Bei Fragen gerne auch: info@agile-methoden.de © 2015, Christian Noack, Agile Methoden GmbH