Docker
Motivation für den Einsatz von Container-Images
Gegenüberstellung virtuelle Maschine vs. Container
Begrifflichkeiten
Docker-Kommando
- Docker-Images laden, verwalten, starten
- Port-Mapping
- Logs einsehen
- Kommandos im Container ausführen
Image-Erstellung
- Dockerfiles
- Java/JEE-Anwendung in Image packen
- Eigene Basisimages erstellen, bspw. für provisionierte EE-Server
- Multi-Stage-Builds zur Optimierung der Image-Größe nutzen
Volumes einrichten und nutzen
Registrys einsetzen
Kubernetes
Motivation für die Orchestrierung von Containern mit Kubernetes
Grundsätzlicher Aufbau der Plattform
Deklarativer Ansatz
YAML-Files zur Beschreibung von Kubernetes-Objekten
Building Blocks von Kubernetes
- Pod
- Deployment, Replica Set
- Service
- Volume, Volume Claim, Persistent Volume Claim, Storage Provider
- Nodeport, Loadbalancer und Ingress
- Namespace
- Secret
- Config Map
- Stateful Set
- Job
Vorbereitung und Überwachung
- Init Container
- Readiness und Liveness Probe
Continuous Delivery/Deployment
Motivation für Automatisierung
Abgrenzung Continuous Integration, Delivery, Deployment
Überblick unterschiedliche Vorgehensweisen für Deployment
Gitlab
Docker-Build in Container
Deployment in Kubernetes-Cluster
GitOps
- Deployen von Kubernetes-Manifesten aus Git
- Grundlegende Vorgehensweise
- Überblick über Tools
- Argo-CD als Beispiel
- Deployment aus Pipeline
Lokale Entwicklung
Generelle Problemstellung
Entwickeln von lokaler IDE gegen Kubernetes-Cluster
- Einfaches Bereitstellen von Umgebungen für lokales Testen
- Überblick Werkzeuge (Skaffold, DevSpace, Telepresence, ...)
- Vorgehensweisen für Java (EE)-Anwendungen
- Möglichkeiten der gängigen Java IDEs
Die Themen werden mit übergreifenden Übungen vertieft. Dabei kommen realistische Beispiele von Java/JEE-Anwendungen zum Einsatz: Standalone-Anwendungen, EE-Anwendungen, Persistenz mit Datenbanken. Darüber hinaus wird eine realistische Pipeline für Continuos Delivery entwickelt.