DOCKER IN PRACTICE - leipzig.jugsaxony.camp · 28.03.2017 EXXETA GmbH 3 1-Klick-Installation mit...

18
EXXETA GmbH 28.03.2017 1 DOCKER IN PRACTICE Matthias Zober EXXETA GmbH Leipzig

Transcript of DOCKER IN PRACTICE - leipzig.jugsaxony.camp · 28.03.2017 EXXETA GmbH 3 1-Klick-Installation mit...

EXXETA GmbH28.03.2017 1

DOCKER IN PRACTICE

Matthias Zober

EXXETA GmbH Leipzig

EXXETA GmbH28.03.2017 2

1. Typische Installationen – Typische Probleme

HowTos die nicht funktionieren?

• Jenkins + Maven + Plugins manuell installieren

→Worst Case Dauer: > ½ Tag

EXXETA GmbH28.03.2017 3

1-Klick-Installation mit der Container-Technologie Docker

Verwendung vorgefertiger Docker-Images

• Z.B.: jenkins:latest

• Artefakt mit lauffähiger Jenkins-Version

Installationsschritte:

• docker build <path-to-Dockerfile>

• docker run <Image-name>

1. Manuelle Installation war Gestern

EXXETA GmbH28.03.2017 4

1. Installation mit Docker - Image erstellen

create, modify

Dockerfile

Jenkins Image

FROM jenkins:1.625.3

COPY resources/...

USER root

RUN apt-get ...

ENV MAVEN_HOME ...

CMD...

docker build .

Dockerfile – Makefile für Docker-Images

• Beinhaltet die notwendigen Schritte für die Bereitstellung der Software:

→ FROM Befehle von Image erben

→ COPY Ressourcen kopieren

→ ENV Umgebungsvariablen setzen

→ RUN Befehl ausführen

→ ...

→ CMD Startbefehl der Software

Demonstration am Beispiel

• Docker-Image: myjenkins

EXXETA GmbH28.03.2017 5

Container 1

Name: j2

Port: 8000

1. Installation mit Docker – Container erstellen

Jenkins ImageDocker-Container

• Aktiver Prozess der ausgelieferten Software

• Benötigt fehlende Konfigurationen wie Port, Name, ...

Demonstration am Beispiel:

1. myjenkins j1

2. myjenkins j2

Container 1

Name: j1

Port: 8080

docker run docker run

--name j1 --name j2

-p 8080:8080 –p 8000:8080

myjenkins myjenkins

EXXETA GmbH28.03.2017 6

2. Warum ging das so einfach?

Docker = Container-Technologie um Software-

Komponenten zu virtualisieren

• Nutzung von leichtgewichtigen VMs

• Isolierte Container

• Container teilen sich ein OS und deren Libraries

EXXETA GmbH28.03.2017 7

3. Viele Services?

Dockerfile1

Container

Development

Abhängigkeit:

muss

vorher

starten

Image

Oracle v.12c

Dockerfile2Image

Java - Anwendung

Container

Test

Container

Geschäftslogik

Development

EXXETA GmbH28.03.2017 8

3. Viele Services?

Dockerfile1

Container

Development

Abhängigkeit:

muss

vorher

starten

Image

Oracle v.12c

Dockerfile2Image

Java - Anwendung

Container

Test

Container

Geschäftslogik

Development

→Gleichzeitig bauen und ausliefern?

??? ???

Naive Notlösung: alle Komponenten in einem Container

→ Schwergewichtig und schlecht wartbar

EXXETA GmbH28.03.2017 9

3. Viele Services? Docker-Compose

Dockerfile1

Container

Development

Abhängigkeit:

muss

vorher

starten

Image

Oracle v.12c

Dockerfile2Image

Java - Anwendung

Container

Test

Container

Geschäftslogik

Development

→Gleichzeitig bauen und ausliefern?

docker-compose build docker-compose start

EXXETA GmbH28.03.2017 10

3. Viele Services? Docker-Compose

docker-compose.yml

services:

db-dev:

build: <path-to-Dockerfile1>

db-test:

build: <path-to-Dockerfile1>

app:

build: <path-to-Dockerfile2>

depends_on: db-dev

docker-compose build docker-compose start

db-dev

db-test

app

EXXETA GmbH28.03.2017 11

Jenkins automatisiert Tests, aber:

→ Keine Webdriver-Tests gegen verschiedene Browser

→ Build-Pipeline um Webdriver-Tests erweitern

Demonstration von Docker-Compose

• Webdriver-Tests mit Selenium Grid und Jenkins

• Neue Services:

→ Selenium-Hub

→ Selenium-Firefox-Node

→ Selenium-Chrome-Node

3. Praktisches Beispiel: Oberflächentests

EXXETA GmbH28.03.2017 12

Daten

Kein Datei-Explorer, aber:

• docker cp foo.txt container:/foo.txt

• docker cp container:/foo.txt foo.txt

Daten sichern? Volume erstellen

3. Daten und Netzwerk

EXXETA GmbH28.03.2017 13

Daten

Kein Datei-Explorer, aber:

• docker cp foo.txt container:/foo.txt

• docker cp container:/foo.txt foo.txt

Daten sichern? Volume erstellen

3. Daten und Netzwerk

Netzwerk-Management

Docker0 – Hostnetzwerk weist Containern Ips zu

Container verfügbar machen

• –p (Containerport) 8080:80 (Hostport)

• <IP-Docker-Container>:8080

Docker nimmt Port-Management nicht ab!

EXXETA GmbH28.03.2017 14

Service mit komplexer Datenhaltung?

Testdaten für Webdriver-Tests

→ Keine DB vorhanden

Demonstration von Docker-Compose

• Hinzufügen einer MySQL-DB

• Interaktion mit MySQL-Container

3. Erweiterung: Datenhaltung

EXXETA GmbH28.03.2017 15

4. Einsatz in - CI/CD - Pipeline

Docker-Images

Docker-Maven-PluginDocker-Container

EXXETA GmbH28.03.2017 16

Schnelle Installation von Komponenten

CONTAINER ID IMAGE ... NAMES

C123849e49a5 exxeta/mts.tso.nom.ecg:40.0.0-SNAPSHOT ... webdriver_mtsnom_1

e46a4f0ac45b exxeta/mts.tso.abpm:40.0.0-SNAPSHOT ... webdriver_abpm_1

0af9da657de2 exxeta/mts.tso.uibackend:40.0.0-SNAPSHOT ... webdriver_uibackend_1

5079342e390a exxeta/mts.tso.asec:40.0.0-SNAPSHOT ... webdriver_asec_1

5f381f12114e exxeta/bpm.uploader:2.1.0-SNAPSHOT ... webdriver_bpm-uploader_1

7dead7feea05 exxeta/mts.tso.oraclexe:40.0.0-SNAPSHOT ... webdriver_oracle_1

9c3b5de3015f rabbitmq:3.5.7-management ... webdriver_amsg_1

Einfache Lastverteilung

→ Jenkins-Slaves docker-compose scale ... ...

4. Nutzen im Entwickler-Alltag

EXXETA GmbH28.03.2017 17

Änderungen schnell realisierbar

Mehrere Anwendungen der gleichen Installation

Development Test Productiv ...

4. Nutzen im Entwickler-Alltag

MTS.NOM

Port:8000

ASEC

Port:7474

Oracle

Port:3306

MTS.NOM

Port:8080

ASEC

Port:7474Oracle

Port:3306

AMSG

Port:8000

EXXETA GmbH28.03.2017 18

Automatisierung nerviger Installations- und Konfigurationsprozesse

→ Drastische Verkürzung der Auslieferungszeiten

→ Ein Ort für alle Konfigurationen

Isolierte Container

→ Keine Abhängigkeitsprobleme

→ Zweimal dieselbe Installation? Kein Problem!

Komplexe Architektur mit vielen Abhängigkeiten?

→ Definierbar durch Docker-Compose

→ Leichtes Management komplexer Konfigurationen und Abhängigkeiten

Best-Practices:

→ Stärken von Docker nutzen Micro-Service-Ansatz wählen leichtgewichtige Container definieren

→ Build-Pipelines definieren mit CI-Systemen komplexe Vorgänge vorbereiten

5. Zusammenfassung