Inhalt des Trainings
Dieses Seminar führt zunächst in die Nutzung von Docker und Kubernetes ein. Der Fokus liegt hier auf den für die Entwicklung von containerisierten Java/JEE-Anwendungen wichtigen Werkzeugen, Konzepten und Vorgehensweisen der Container-Umgebung Docker und der Orchestrierungsplattform Kubernetes. Anschließend wird der Aufbau von Build Pipelines für Continuous Delivery/Deployment mit Systemen wie Gitlab-CI oder Jenkins thematisiert, welche das automatisierte Ausrollen der Anwendung in einem Kubernetes-Cluster ermöglichen.
Im Laufe des Kurses erstellen Sie aus Java-SE- und -EE-Anwendungen lauffähige Container-Images, betreiben diese in einem Kubernetes-Cluster und entwickeln eine dazugehörige realistische Build Pipeline für Continuous Delivery. Dabei wird auch auf die Möglichkeiten und Problemstellungen der lokalen Entwicklung eingegangen.
Nach diesem Seminar beherrschen Sie die Grundlagen von Docker und Kubernetes und können Java/JEE-Anwendungen damit betreiben und automatisiert qualitätsgesichert in Kubernetes-Cluster ausrollen.
Zielgruppen
Entwickler und Teamleiter, die Java/JEE-Anwendungen für Container-Umgebungen entwickeln, in Docker/Kubernetes betreiben und mit Continuous Delivery ausrollen wollen.
Vorkenntnisse
Grundlegende Java-Kenntnisse werden vorausgesetzt.
Kenntnisse über Linux und Networking sind hilfreich, werden aber nicht vorausgesetzt.
Detail-Inhalte
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.