docker workshop experten forum stuttgart 2015, agile methoden gmbh

Post on 16-Aug-2015

120 Views

Category:

Software

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

10. Juli 2015

Docker - ein Workshop für DevOpsExperten 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.-InformatikerSoftware-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 Kingein fiktives Praxisbeispiel

Rental King

Herbert Hitzegrad Baumaschinenverleih

10 Mitarbeiter1 Standort

Windows-PCStandard-SW

Rental King

Herbert Hitzegrad Baumaschinenverleih

10 Mitarbeiter1 Standort

Windows-PCStandard-SW

Trailer RentalStachoviak

Zick ZackMaschinenverleih

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

Lokale Um

gebung

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

FSConsoleDocker Commands

virtual box internal network

Virtual Box Target (Vagrant)

Volume

Redmine

Postgres

FSConsoleDocker Commands

8082

8081

5555

5555

8081

8081

5432

80

5000

Mac OS X

Git

Safari

Atom

Virtual Box Server (Vagrant)

Postgres

Redmine

Registry

Volume

FS

FSConsoleDocker Commands

virtual box internal network

Virtual Box Target (Vagrant)

Volume

Redmine

Postgres

FSConsoleDocker Commands

8082

8081

5555

5555

8081

8081

5432

80

5000

Mac OS X

Git

Safari

Atom

Virtual Box Server (Vagrant)

Postgres

Redmine

Registry

Volume

FS

FSConsoleDocker Commands

virtual box internal network

Virtual Box Target (Vagrant)

Volume

Redmine

Postgres

FSConsoleDocker Commands

8082

8081

5555

5555

8081

8081

5432

80

5000

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

80

5000

Mac OS X

Git

Safari

Atom

Virtual Box Server (Vagrant)

Postgres Volume

FS

FSConsoleDocker Commands

virtual box internal network

Virtual Box Target (Vagrant)

Volume

Redmine

Postgres

FSConsoleDocker Commands

8082

8081

5555

5555

5432

Redmine

Registry

8081

8081

80

5000

Mac OS X

Git

Safari

Atom

Virtual Box Server (Vagrant)

Postgres Volume

FS

FSConsoleDocker Commands

virtual box internal network

Virtual Box Target (Vagrant)

Volume

Redmine

Postgres

FSConsoleDocker 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

FSConsoleDocker Commands

virtual box internal network

Virtual Box Target (Vagrant)

Volume

Redmine

Postgres

FSConsoleDocker Commands

8082

8081

5555

5555

8081

8081

5432

80

5000

Mac OS X

Git

Safari

Atom

Virtual Box Server (Vagrant)

Postgres

Redmine

Registry

Volume

FS

FSConsoleDocker Commands

virtual box internal network

Virtual Box Target (Vagrant)

Volume

Redmine

Postgres

FSConsoleDocker Commands

8082

8081

5555

5555

8081

8081

5432

80

5000

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:v8sudo 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

FSConsoleDocker Commands

virtual box internal network

Virtual Box Target (Vagrant)

Volume

Redmine

Postgres

FSConsoleDocker Commands

8082

8081

5555

5555

8081

8081

5432

80

5000

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 Containersudo 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

top related