DOCKER IN PRACTICE - leipzig.jugsaxony.camp · 28.03.2017 EXXETA GmbH 3 1-Klick-Installation mit...
Transcript of DOCKER IN PRACTICE - leipzig.jugsaxony.camp · 28.03.2017 EXXETA GmbH 3 1-Klick-Installation mit...
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