Ein spannendes Interview mit Martin Helmich zum Thema Docker gibt es in der einhunderteinundzwanzigsten Episode des Anwendungsentwickler-Podcasts.
TL;DR
Mit Martin Helmig gehe ich der Frage nach, wie Docker dir als IT-Azubi beim Entwickeln hilft: Container kapseln Anwendungen samt Laufzeitumgebung, lassen sich schnell starten und über Images automatisiert bereitstellen. Dadurch kannst du deine produktive Umgebung lokal nachbauen und dieselben Images später auf einem Server betreiben. Kubernetes verteilt Container auf mehrere Server, wobei du dich um dauerhaften Speicher und die Netzwerkanbindung kümmern musst. Für deine Anwendungen spielen dabei möglichst zustandslose Prozesse und klar beschriebene Abhängigkeiten eine Rolle.
Podcast: Play in new window | Download (Duration: 1:09:40 — 31.0MB)
Abonnieren: Apple Podcasts | Spotify | RSS
Kapitelmarken
- [00:00:00] Einführung in Docker und Containerisierung
- [00:01:12] Martin Helmig und seine Arbeit bei Mittwald
- [00:02:22] Ausbildung, Studium und der Einstieg in Docker
- [00:05:18] Programmiersprachen im Arbeitsalltag
- [00:08:14] Go: Typsicherheit und ausführbare Programme
- [00:11:40] Was Docker ist und wie Container funktionieren
- [00:14:16] Container und virtuelle Maschinen
- [00:15:52] Schnell starten und Abläufe automatisieren
- [00:17:23] Infrastructure as Code und Immutable Infrastructure
- [00:20:22] Kubernetes und Container-Orchestrierung
- [00:22:32] Container-Netzwerke und externe Zugriffe
- [00:24:43] Vorteile für deinen Entwicklungsalltag
- [00:29:18] Docker unter Windows
- [00:32:08] Software aktualisieren und Container ersetzen
- [00:33:38] Basis-Images und differenzielle Schichten
- [00:36:51] Go, PHP und geeignete Anwendungsarchitekturen
- [00:40:32] Desktop-Anwendungen, Kommandozeilentools und Batch-Jobs
- [00:43:35] Container-Landschaften und Kubernetes bei Mittwald
- [00:45:53] Dauerhafte Daten und Netzwerkspeicher
- [00:48:50] Herausforderungen beim produktiven Cluster-Betrieb
- [00:50:57] Einarbeiten und mit Minikube ausprobieren
- [00:52:31] Anwendungen für Container entwickeln
- [00:55:20] Weitere Container-Lösungen: rkt, LXC und LXD
- [00:57:27] IT-Ausbildung und interne Trainings
- [00:58:32] Barcamps und Austausch im Unternehmen
- [01:02:44] Neue Themen praktisch erlernen
- [01:04:44] Buchempfehlung: The Clean Coder
- [01:06:11] Kontakt zu Martin Helmig
- [01:07:44] Docker in der Ausbildung und Shownotes
Allgemeines zur Person
- Wie ist dein Name und wo arbeitest du?
- Martin Helmich von Mittwald.
- An welchen Projekten arbeitest du zur Zeit in deinem Tagesjob?
- Einsatz von Containern in Hosting-Umgebungen.
- Wie bist du zur Informatik bzw. Softwareentwicklung gekommen?
- Als Kind schon mit dem Programmieren angefangen.
- Welche Ausbildung bzw. welches Studium hast du im Bereich der Informatik absolviert?
- Wirtschaftsinformatik (Bachelor) an der PHWT Vechta und danach Master in Informatik mit Schwerpunkt Mobile Anwendungen an der Hochschule Osnabrück.
- Mit welcher/n Programmiersprache/n arbeitest du im Alltag?
- JavaScript (NodeJS), Go, PHP.
- Was ist deine Lieblingsprogrammiersprache und warum?
- Go, weil sie Vieles besser/einfacher/sicherer macht als C.
Docker
- Was ist Docker?
- Eine Software zur Containervirtualisierung.
- Warum gibt es aktuell so einen Hype rund um Docker?
- Wird viel im Zusammenhang mit DevOps verwendet. Container sind in aller Munde. Viele Buzzwords, die durch die Entwicklerszene geistern.
- Warum nimmt man nicht einfach die „guten alten“ virtuellen Maschinen?
- Zu aufwändig für einzelne Services/Prozesse. Kleiner und leichter zu (ver-)teilen (siehe Docker Hub). Bessere Performance. Einfache Automatisierung.
- Was hat das Ganze mit „infrastructure as code“ zu tun?
- Bei Docker spricht man eher von „immutable infrastructure“, also zustandsloser Infrastruktur.
- Wozu braucht man in der Praxis Container?
- Infrastrukturbetrieb soll einfacher werden. Leicht in die Breite zu skalieren.
- Was ist Kubernetes und wofür braucht man das?
- Docker kann nicht selbst clustern usw. Kubernetes oder Docker Swarm sind Container Orchestrators, die das übernehmen. Kubernetes ist der de-facto Standard. Die Orchestrierer abstrahieren von der konkreten Infrastruktur (Hardware, Netzwerk usw.). Wichtig, wenn Container untereinander kommunizieren sollen, z.B. Webanwendung mit Datenbank.
- Welche Vorteile bieten mir als Softwareentwickler Container?
- Entwicklungs-/Produktionsumgebung exakt nachbauen. Versionen und Abhängigkeiten exakt nachstellen. Zielumgebung für Deplyoment kann durch Entwickler vorgegeben werden. Spart Zeit und gibt Sicherheit beim Deployment. Fehler können besser nachgestellt werden. Verhindert das „Works on my machine“-Syndrom.
- Ist der Einsatz von Docker auch auf auf Windows möglich?
- Man kann Linux-Container unter Windows starten. Man kann auch Windows-Container starten.
- Wie (einfach) aktualisiert man vorhandene Container (z.B. bei Betriebssystemupdates)?
- Ein Container soll sich eigentlich nicht mehr ändern. Images können auf Basis neuer Images neu gebaut werden. Das Basisimage ist z.B. Ubuntu und nur die Unterschiede werden in den darüberliegenden Containern gespeichert. Docker ist sehr intelligent, wenn es um das Ermitteln der Deltas geht.
- Gibt es Programmiersprachen oder -umgebungen, die sich besonders gut zum Einsatz in Containern eignen?
- Eigentlich geht alles.
- Für welche Applikationen/Unternehmen eignet sich der Einsatz von Containern besonders gut? Nur für Webanwendungen?
- Das Schreiben von Daten geht nicht und muss auf externe Speicher umgeleitet werden. Am besten fährt man den Container hoch und fasst ihn nie wieder an. Es gibt auch Kommandozeilentools, die als Container verpackt werden und z.B. ein komplettes Java mit allen Abhängigkeiten mitbringen.
- Wofür setzt du konkret Docker ein? Welche Vorteile hast du dadurch?
- Aufbau einer Containerlandschaft z.B. für TYPO3-/Wordpress-Hosting. Automatisierung dieser Infrastruktur mit Kubernetes und Erweiterung von Kubernetes um eigene Funktionen.
- Wo speichern die Datenbanken ihre Daten?
- Extern gemountete Partitionen können persistenten Speicher bereitstellen. Netzwerk-Storages werden auch von Kubernetes angeboten und sind transparent durch Kubernetes vom konkreten Dateisystem abstrahiert.
- Gibt es deiner Erfahrung nach auch Probleme/Nachteile beim Einsatz von Docker?
- Netzwerkspeicher und Datenbanken können umziehen. (IP-)Adressen ändern sich. Zustandslosigkeit der Services ist Voraussetzung. Das interne Netzwerk führt ggfs. zu Latenzen. Traffic von außen in das Containernetzwerk zu bekommen und Load Balancer einzurichten könnte schwierig sein. Initial ist es ein hoher Aufwand, die Infrastruktur ans Laufen zu bekommen. Es gibt aber z.B. Minikube als Startprojekt oder man startet direkt in der Cloud, z.B. mit AWS oder Azure.
- Ist die Architektur der Anwendung betroffen? Was hat Docker z.B. mit Microservices/DDD zu tun?
- Das Dateisystem kann wechseln, IP-Adressen ändern sich, root-Rechte sollten nicht erforderlich sein. Microservices passen gut in Container, aber das Umgekehrte gilt nicht zwingend.
- Gibt es Alternativen zu Docker?
Aus- und Weiterbildung
- Bildest du selbst Entwickler-Nachwuchs aus und wenn ja, wie ist das Vorgehen?
- Nein, ich arbeite eher bei innerbetrieblichen Fortbildungen mit. Wir haben z.B. ein Barcamp bei Mittwald durchgeführt. Außerdem nehme ich an Konferenzen teil.
- Was ist dein absolutes Lieblingsbuch mit Bezug zur IT/Programmierung und warum?
- The Clean Coder* von Uncle Bob.
*
- The Clean Coder* von Uncle Bob.
- Wie bildest du dich selbst weiter?
- Einfach anfangen! Z.B. ein Tutorial durcharbeiten. Ich bin eher „hands on“, Bücher funktionieren bei mir nicht so gut.
Mehr über Martin und Mittwald
- Wo können die Hörer mehr über dich erfahren bzw. dich kontaktieren?
- Auf meiner Website oder bei GitHub.
- Mehr über Mittwald gibt es auf der Website und der speziellen Karriereseite.
Links
Zusammenfassung
Martin Helmigs Weg zur Softwarearchitektur
Mein Gesprächspartner Martin Helmig arbeitet als Systemarchitekt bei Mittwald und beschäftigt sich dort mit Container-Infrastrukturen. Er begann als Kind zu programmieren und verband später eine Ausbildung zum/zur Fachinformatiker:in Anwendungsentwicklung mit einem dualen Studium der Wirtschaftsinformatik. Anschließend absolvierte er einen Informatik-Master mit dem Schwerpunkt verteilte und mobile Anwendungen.
In seiner betrieblichen Masterarbeit untersuchte er, wie sich eine über Jahrzehnte gewachsene PHP-Anwendung in eine moderne Architektur überführen lässt. Dabei beschäftigte er sich mit Microservices und Docker.
Für eigene Projekte arbeitet Martin vor allem mit Node.js samt TypeScript oder mit Go. An Go schätzt er die statische Typisierung, durch die der Compiler Fehler früh erkennen kann. Die Sprache kompiliert zu nativem Maschinencode und kommt mit wenig Speicher aus. Zahlreiche Bibliotheken erleichtern ihm die Arbeit; außerdem übernimmt die Sprache das Speichermanagement. Passend kompilierte Go-Anwendungen lassen sich als eigenständige ausführbare Datei verteilen.
Wie Docker-Container funktionieren
Docker isoliert Prozesse, die auf demselben Rechner laufen. Ein Container erhält dafür eine eigene Umgebung mit einem Dateisystem. Üblicherweise läuft darin ein einzelner Dienst, etwa ein Webserver oder ein Applikationsserver.
Alle Container teilen sich den Betriebssystemkern des Hosts. Eine virtuelle Maschine besitzt einen eigenen Kernel und bringt ein vollständiges Betriebssystem mit. Bei Docker beschränkt sich die Umgebung auf das, was der jeweilige Dienst braucht. Zusätzliche Systemdienste wie ein SSH-Server gehören üblicherweise nicht dazu.
Der gemeinsame Kernel bestimmt, welche Container direkt auf einem Host laufen können. Für einen Windows-Container ist ein Windows-Kernel erforderlich.
Docker stellt Werkzeuge bereit, mit denen du Images bauen und Container daraus starten kannst. Ein Image enthält das Dateisystem und die benötigte Software. Du beschreibst, wie es aufgebaut werden soll, und kannst den Ablauf automatisieren. Wenn das Image bereits vorliegt, lässt sich ein Container laut Martin häufig innerhalb von ein bis zwei Sekunden starten.
Infrastruktur durch Code beschreiben
Mit Infrastructure as Code beschreibst du deine Infrastruktur so, dass sie anhand dieser Vorgaben erneut aufgebaut werden kann. Im Gespräch fallen dafür Werkzeuge wie Puppet und Ansible.
Bei Container-Infrastrukturen spielt außerdem Immutable Infrastructure eine Rolle. Die Server sollen möglichst wenig eigenen Zustand behalten, während die benötigte Umgebung durch die darauf laufenden Container beschrieben wird. Dadurch lassen sich Rechner austauschen und dieselben Container auf anderer Hardware starten.
Für Mittwald eröffnet das Möglichkeiten, Anwendungen zwischen Servern zu verschieben oder zusätzliche Instanzen bereitzustellen, wenn mehr Anfragen verarbeitet werden müssen.
Kubernetes verteilt Container auf mehrere Server
Die Docker-Engine wird im Gespräch als Werkzeug für einen einzelnen Rechner betrachtet. Für einen Cluster kommt ein Container-Orchestrator wie Kubernetes hinzu.
Kubernetes fasst die Rechenkapazität mehrerer Server zu einem gemeinsamen Pool zusammen. Du gibst beispielsweise vor, dass zehn Instanzen eines Container-Images laufen sollen. Kubernetes sucht dafür Rechner mit freien Kapazitäten und startet dort die Container.
Damit die Anwendungen miteinander kommunizieren können, gibt es ein internes Netzwerk. Darüber erreicht etwa ein Applikationsserver seine Datenbank.
Wie Anfragen aus dem Internet in den Cluster gelangen, hängt von dessen Aufbau ab. Cloud-Anbieter stellen dafür fertige Komponenten bereit. Bei einem selbst betriebenen Cluster musst du passende Lösungen einrichten, beispielsweise einen Load-Balancer. Auch Netzwerkhardware lässt sich über entsprechende Integrationen automatisch konfigurieren.
Was Docker dir beim Entwickeln bringt
Wenn du als IT-Azubi an einer Anwendung arbeitest, kannst du ihre spätere Laufzeitumgebung in einem Image abbilden. Darin liegen die passenden Versionen der benötigten Software sowie deren Abhängigkeiten.
Ein:e Administrator:in kann dir ein Image bereitstellen, mit dem du die produktive Umgebung auf deinem Arbeitsplatzrechner nachbaust. Du kannst die Umgebung auch selbst definieren und deine Anwendung gemeinsam mit ihr ausliefern. Als Beispiel nennt Martin eine Java-Anwendung, die Tomcat und Java 8 benötigt.
Dasselbe Image kann lokal und im produktiven Betrieb eingesetzt werden. Dadurch sinkt der Aufwand, die Umgebung von Hand nachzubauen, und Fehler durch unterschiedliche Softwarestände lassen sich vermeiden. Das Image kannst du selbst bereitstellen oder an eine Person übergeben, die den Betrieb übernimmt.
Docker unter Windows
Im Gespräch werden zwei Wege beschrieben:
- Linux-Container unter Windows: Im Hintergrund läuft eine virtuelle Maschine mit Linux und einer Docker-Engine. Die Werkzeuge lassen sich unter Windows bedienen, beispielsweise über die PowerShell. Die Docker-Engine stellt dafür eine REST-API bereit.
- Native Windows-Container: Entsprechende Windows-Server-Versionen können Container mit Windows-Prozessen auf dem Windows-Kernel betreiben. Martin hat damit zum Zeitpunkt des Gesprächs noch keine eigenen praktischen Erfahrungen.
Images aufbauen und Software aktualisieren
Für ein Update baust du nach dem vorgesehenen Docker-Prinzip ein neues Image mit aktueller Software. Anschließend werden die bisherigen Container durch neue ersetzt, die aus diesem Image entstehen. So bleibt ihr Aufbau nachvollziehbar.
Eigene Images können auf Basis-Images aufbauen, die etwa ein Betriebssystemhersteller bereitstellt. Darauf ergänzt du die Software für deine Anwendung.
Docker-Images bestehen aus mehreren Schichten, den Layers. Wenn du auf einem Basis-Image einen Apache-Webserver installierst, enthält die zusätzliche Schicht die Änderungen gegenüber der Basis. Deine eigene Anwendung kann in einer weiteren Schicht hinzukommen. Zusammen ergeben diese Schichten das Dateisystem des Containers.
Beim Übertragen in eine Image-Registry erkennt Docker bereits vorhandene Schichten. Es müssen dann nur die veränderten oder zusätzlichen Layers übertragen werden.
Welche Anwendungen sich in Containern betreiben lassen
Ein statisch kompiliertes Go-Programm kann bei passendem Aufbau ohne weitere Bibliotheken auskommen. Sein Container-Image benötigt dann im Wesentlichen die ausführbare Datei. Je mehr Abhängigkeiten eine Anwendung hat, desto aufwendiger wird es, ihr Image aufzubauen.
Bei PHP beschreibt Martin zusätzlichen Aufwand durch das Zusammenspiel von Webserver und PHP-FPM. Diese Prozesse müssen aufeinander abgestimmt werden.
Anwendungen nach den 12-Factor-App-Richtlinien passen gut zu Containern. Eine Webanwendung läuft dabei beispielsweise als einzelner Prozess und lauscht auf einem Port. Auch bestehende Anwendungen lassen sich häufig mit wenigen Änderungen containerisieren, weil ihre bisherige Laufzeitumgebung im Image nachgebildet werden kann. Microservices harmonieren mit Containern; ebenso lassen sich andere Architekturen darin betreiben.
Für grafische Desktop-Anwendungen müssen unter Linux Zugriffe auf benötigte Geräte eingerichtet werden, etwa für die Bildausgabe oder Eingabegeräte. Das macht ihren Betrieb aufwendiger.
Kommandozeilenprogramme und Batch-Jobs lassen sich ebenfalls als Image bereitstellen. Du startest den Container, der das Programm ausführt und seine Ausgabe liefert. Sobald die Aufgabe erledigt ist, endet der Prozess.
Wie Mittwald Container einsetzt
Mittwald untersucht im Gespräch, wie sich Anwendungen wie WordPress und TYPO3 in einer Container-Landschaft betreiben lassen. Eine solche Anwendung umfasst mehrere Komponenten. Zur Datenbank können ein Redis-Cache oder ein Solr-Suchindex hinzukommen.
Diese Komponenten müssen miteinander kommunizieren und bei Bedarf horizontal skalieren, damit die Anwendung viele Anfragen verarbeiten kann. Mittwald entwickelt dafür Software, die Kubernetes erweitert und diese Abläufe automatisiert.
Dauerhafte Daten speichern
Datenbanken brauchen Speicher, der beim Ersetzen oder Verschieben eines Containers erhalten bleibt. Kubernetes kann dafür unterschiedliche Speichersysteme einbinden.
Netzwerkspeicher sorgt dafür, dass ein Datenbank-Container auch auf einem anderen Server auf seine Daten zugreifen kann. Im Gespräch werden unter anderem EBS und Ceph genannt. Martin rät davon ab, eine MySQL-Datenbank auf einem NFS-Volume zu betreiben.
Für die Anwendung erscheint der eingebundene Speicher als Dateisystem. Welche Technik dahintersteht, bleibt für sie transparent.
Was du beim Einstieg beachten solltest
Für einen produktiven Kubernetes-Cluster musst du klären, wie dauerhafte Daten gespeichert werden und wie das Netzwerk aufgebaut ist. Geringe Latenzen sind dabei relevant. Außerdem braucht der Cluster einen Weg, externe Anfragen zu den Anwendungen zu leiten, etwa über einen Software- oder Hardware-Load-Balancer.
Kubernetes bietet Schnittstellen, über die du passende Komponenten einbindest. Welche du wählst, hängt von deiner Infrastruktur ab.
Zum Ausprobieren nennt Martin Minikube, mit dem du lokal auf deinem Entwicklungsrechner einen Kubernetes-Cluster starten kannst. Für den produktiven Betrieb ist dieses Lernsetup ungeeignet. Andere Werkzeuge erleichtern den Aufbau eines Clusters, setzen häufig aber bereits eine Cloud-Umgebung voraus. Einen festen Zeitraum für die Einarbeitung nennt Martin nicht.
Beim Programmieren solltest du folgende Punkte berücksichtigen:
- Verwende DNS-Namen, damit deine Anwendung Dienste auch in einer dynamischen Umgebung erreicht.
- Plane bewusst, wo deine Anwendung Daten schreibt. Lokale Dateien können beim Verteilen auf mehrere Instanzen zu inkonsistenten Daten führen.
- Sorge dafür, dass deine Anwendung mit eingeschränkten Rechten läuft.
- Orientiere dich an Architekturregeln wie denen der 12-Factor-App.
Weitere Container-Lösungen
Docker wird zum Zeitpunkt des Gesprächs als De-facto-Standard eingeordnet. Martin erwähnt außerdem Rocket beziehungsweise rkt, kann dessen damaligen Projektstatus aber nicht sicher beurteilen.
LXC und LXD verfolgen einen Ansatz, bei dem ein weitgehend vollständiges Betriebssystem samt Systemdiensten im Container läuft. Auch diese Container teilen sich den Kernel des Hosts. Ihr Verhalten ähnelt dadurch stärker dem einer virtuellen Maschine.
Lernen und fachlicher Austausch
Martin beteiligt sich bei Mittwald an internen Trainings. Das Unternehmen veranstaltet regelmäßig Barcamps, bei denen die Teilnehmenden das Programm selbst zusammenstellen. Diese Veranstaltungen stehen dem gesamten Unternehmen offen und bieten auch Raum für persönliche Themen. Ob ein solches Format am Wochenende angenommen wird, hängt nach seiner Erfahrung von der Firmenkultur ab.
Für neue technische Themen beginnt Martin meist mit dem offiziellen Tutorial und arbeitet anschließend praktisch weiter. Ich selbst lerne gerne mit Büchern; bei meinen IT-Azubis beobachte ich unterschiedliche Vorlieben.
Als Buchempfehlung nennt Martin The Clean Coder von Robert C. Martin. Darin geht es um das persönliche Verhalten und die Verantwortung als professionelle:r Softwareentwickler:in.
Bezug zur Ausbildung und weiterführende Kontakte
Wann Docker und Containerisierung in einer IHK-Prüfung auftauchen, bleibt im Gespräch offen. In der beruflichen Praxis begegnet mir das Thema bereits häufig, besonders im Zusammenhang mit Java und Microservices.
Martin nennt seine Website unter martin-helmig.de und sein GitHub-Profil unter github.com/martin-helmig. Die Shownotes zu meinem Gespräch findest du unter anwendungsentwicklerpodcast.de/121.
Transkription der gesamten Episode
Automatisch erzeugte Transkription der Episode
Herzlich willkommen zum Anwendungsentwickler-Podcast, dem Podcast rund um die Ausbildung zum Fachinformatiker
für Anwendungsentwicklung. In dieser Episode gibt es ein spannendes Interview mit Martin
Helmig über das Thema Docker. Viel Spaß!
Hallo und herzlich willkommen zur 121. Episode des Anwendungsentwickler-Podcasts. Mein Name
ist Stefan Macke und heute gibt es ein richtig cooles Interview und zwar zu einem super geilen
Hype-Thema, was die Softwareentwicklung und die IT insgesamt schon sehr lange beschäftigt
und zwar die Containerisierung. Heute soll es hier endlich mal um Docker gehen. Bislang
habe ich ja noch nie über das Thema gesprochen. Ich habe zwar in den letzten Episoden so
ein bisschen über Cloud-Computing angefangen, aber Docker habe ich ja bewusst ausgenommen,
weil ich wusste, dass ich da noch einen richtig coolen Interviewpartner finde und zwar Martin
Helmig. Der ist Software-Architekt bei MITWALD und auch einer meiner Dozenten-Kollegen an
der PHWT in Vechta. Und bevor ich jetzt noch weiter sabbele, leite ich einfach über zum
Interview, denn das wird schon mehr als lang. Und deswegen viel Spaß und los geht's!
Ja, hallo Martin. Schön, dass das heute geklappt hat. Schön, dass wir uns so ein bisschen über
ein super cooles Hype-Thema, nämlich Docker, unterhalten können. Und ja, wie immer fange
ich eigentlich mit so einer kleinen Vorstellung an. Vielleicht sagst du eben ein, zwei Sätze
zu dir. Wer bist du? Was machst du so? Genau, ja, ich bin Martin. Ich arbeite als Systemarchitekt
bei MITWALD. Das ist ein IT-Dienstleister aus Ostwestfalen, aus Esbekamp. Das liegt
ein bisschen abgelegen. Wer jetzt nicht aus der Gegend kommt, kennt das wahrscheinlich
nicht. Und ich mache im Moment sehr, sehr viel mit Container-Infrastrukturen, weil wir
überlegen für uns, wie man da schöne Produkte drauf aufbauen kann. Und da sind wir natürlich
auch an Docker nicht vorbeigekommen. Und ja, deswegen freue ich mich drauf, da heute ein
bisschen mit dir drüber quatschen zu können. Okay, ja, das finde ich auf jeden Fall auch
cool. Vor allem mit jemandem, der sich auch in der Praxis einsetzt. Denn ja, ich weiß
zwar auch so ein bisschen, was Docker ist und wofür man das wohl braucht, aber so richtig
jetzt für meinen persönlichen Tagesschopp hat sich da noch nicht so der Vorteil herausgebildet.
Ich bin eigentlich ganz interessiert, zu hören, was ihr denn da so mit macht. Bevor
wir da einsteigen, vielleicht noch ein bisschen was zu dir. Wie bist du zur IT oder zur Softwareentwicklung
sogar gekommen? Hatte das irgendwie einen Auslöser? Fandest du das schon immer toll
oder wie war das bei dir? Ich habe das gemacht, was wahrscheinlich viele
gemacht haben, die irgendwie in diese Branche reingerutscht sind. Und zwar habe ich mein
Hobby zum Beruf gemacht. Ich habe relativ früh angefangen mit Programmieren, so mit
zehn, elf, zwölf Jahren, einfach so aus Neugier, weil mein Vater auch irgendwie viel am Computer
gemacht hat und ich irgendwie verstehen wollte, was er da so treibt. Und dann habe ich immer
so nebenbei hobbymäßig so an verschiedenen Projekten gearbeitet und habe dann irgendwann
so bei erstbester Gelegenheit, die sich geboten hat, dann auch eine einschlägige Ausbildung
und Studium ergriffen. Und welche Ausbildung oder Studium oder beides
hast du da genau gemacht? Welche Richtung? Ich habe ein duales Studium gemacht mit einer
Berufsausbildung zum Fachinformatiker mit Fachrichtung Anwendungsentwicklung und gleichzeitig
ein Studium in Wirtschaftsinformatik, was dir ja wahrscheinlich bekannt sein müsste.
Daher kennen wir uns ja auch. Und dann habe ich im Anschluss noch den Master in Informatik
obendrauf gesetzt.
Hattest du da irgendwie eine Vertiefung oder irgendwie sowas im Master oder?
Das war ein Studiengang der Hochschule Osnabrück, der nannte sich Informatik mit Schwerpunkt
verteilte und mobile Anwendungen.
Das ist ja, deutet ja schon auf die Richtung vielleicht hin, Web und so weiter und hier
noch ein Container und da noch einer. Oder konntest du da irgendwie was mitnehmen, Tasselli?
Es ist ein Trend erkennbar, auf jeden Fall. Ich muss gestehen, als ich selber mein Masterstudium
gemacht habe, da ist dieser Container-Hype an den Hochschulen noch gar nicht so angekommen.
Ich bin selber auch erst, ich bin in meiner Masterarbeit angefangen, mich mit Docker zu
beschäftigen. Genau. Da habe ich auch erforscht, wäre jetzt zu viel gesagt, aber mich so ein
bisschen mit Microservice-Architekturen beschäftigt. Das war da auch noch ein relativ neues Thema.
Der Prof, bei dem ich die Arbeit geschrieben habe, der war da auch erst noch recht frisch
in Kontakt mit dem Thema und bin dann so in demselben Zuge auch auf Docker gekommen, weil
das einfach so zwei Themen sind, die ganz gut miteinander Hand in Hand gehen.
Und dann konntest du tatsächlich was aus dem Master mit in den Beruf nehmen oder hast
du sogar ein Thema für die Masterarbeit aus dem Berufsumfeld gesucht oder wie hat sich
da das Zusammenspiel dann ergeben?
Genau, das Thema der Masterarbeit, das war auch ein rein betriebliches Thema. Da ging
es um ein Migrationsprojekt für eine etwas größere Alt-Applikation und das Thema der
Arbeit war im Grunde, wie man so diese über Jahrzehnte gewachsene PHP-Applikation irgendeine
Art moderne Software-Architektur überführen kann.
Ah, okay. Ja, das ist auch schon mal ein guter Hinweis. PHP, ja, das ist gut. Damit habe
ich früher auch mal viel gemacht und PHP und Docker, wie das zusammenhängt, da können
wir gleich auch nochmal einmal einsteigen, glaube ich. Heißt das denn, dass du dann
im Alltag auch mit PHP hauptsächlich entwickelst oder welche PoAmi-Sprachen setzt du da selber
ein?
Ich habe früher viel PHP gemacht. Wir haben auch bei uns im Unternehmen früher viel PHP
eingesetzt. Mittlerweile arbeite ich eigentlich nur noch mit PHP, wenn es sich gar nicht mehr
vermeiden lässt. Da mag jetzt so eine leichte Wertung durchschwingen. Ich weiß nicht, ob
man das jetzt so raushört. Nee, also ich habe natürlich viel mit PHP zu tun, weil
wir halt für unsere Kunden auch diese ganzen typischen PHP-basierten Open-Source-Content-Management
und E-Commerce-Systeme einsetzen. Deswegen bin ich so in dieser ganzen PHP-Welt natürlich
immer noch so ein bisschen drin. Für mich selber, so das, was ich selber so programmiere,
bin ich in den meisten Fällen ja so ein bisschen vom PHP-Zug abgesprungen. Das meiste,
was ich im Moment mache, ist hauptsächlich Node.js mit TypeScript oder Go. So eins von
beidem, je nachdem, was für den Anwendungsfall am besten passt.
Gibt es da irgendwie eine Präferenz, dass zum Beispiel jetzt gerade zum Beispiel JavaScript
oder Go besonders gut zum Beispiel mit Containern zusammenarbeitet oder ist das jetzt nur Zufall?
Das ist eigentlich nur Zufall. Also Node.js funktioniert so in Container-Umgebungen
eigentlich echt gut. Und ja, bei Go hat man den Nutzen jetzt gar nicht so unmittelbar,
weil Go sowieso eigentlich sehr, sehr gut darauf ausgelegt ist, dass die Softwareprodukte,
die am Ende rauskommen, halt möglichst überall lauffähig sind und man sich jetzt da keine
großen Sorgen um Abhängigkeiten machen muss. Also so viele Probleme, die Docker löst,
löst Go sowieso auf seine eigene Art und Weise auch schon. Von daher, wenn man mit Go arbeitet,
kommt man eigentlich sogar noch häufig ohne irgendwelche Container-Lösungen aus.
Mit Go arbeite ich tatsächlich eigentlich tendenziell am liebsten, weil mir die Sprache
einfach gut gefällt. Da steckt ja auch immer viel persönliche Präferenz, viel persönliche
Vorlieben drin und wie produktiv man auch damit arbeiten kann. Das ist ja eigentlich das
Wichtigste bei einer Programmiersprache. Ja, das finde ich auch so. Also sozusagen,
eine Programmiersprache ist besonders gut oder schlecht. Das hängt, glaube ich,
auch immer vom Anwendungsfall ab. Das sehe ich auch so. Aber bei PHP kann man, glaube ich,
insgesamt sagen, das ist eher tendenziell negativ. Nein, Quatsch. Jede Programmiersprache ist irgendwie
gut für das geeignet, für das sie gedacht war. Also hast du quasi meine nächste Frage schon
mitbeantwortet? Wenn du dich entscheiden dürftest, irgendwas zu machen, würdest du vielleicht auch
Go wählen? Kann man das sagen? Ist das so eine Lieblingsprogrammiersprache von dir?
Das kann man so sagen. Kannst du sagen, warum? Gibt es da vielleicht besonders tolle Features,
die du in anderen Sprachen vermisst? Was macht dich da zum Beispiel besonders produktiv? Warum
findest du die Sprache so interessant? Ich finde es erst mal sehr, sehr schön,
weil es eine statisch typisierte Sprache ist. Wie gesagt, ich bin ja so aus der PHP-Welt
gekommen, was ja eine Sprache ist, die dich im Grunde so tun und lassen lässt, was du möchtest.
Und bei Go, genauso wie auch wenn du mit TypeScript zum Beispiel arbeitest, hast du halt eine viel,
viel, viel stärkere Typsicherheit in der ganzen Sprache. Das heißt, du hast einen Compiler,
der dir unter die Arme greift, sodass dir, wenn du im Java-Umfeld unterwegs bist, wird dir das
wahrscheinlich auch bekannt vorkommen. Das heißt, du hast erst mal eine viel höhere Qualität in der
Software, die am Ende hinten bei rauskommt. Du hast bei Go dann noch den Vorteil, dass die Software,
die am Ende bei rauskommt, sehr performant funktioniert, weil es auf nativen Maschinencode
kompiliert. Du hast einen sehr geringen Footprint, wenn es jetzt irgendwie um Speicherverbrauch geht
und sowas. Und das Ökosystem ist einfach klasse. Wenn du auf GitHub gehst, findest du
unglaublich viele Bibliotheken für jedweden Kram. Und du musst eigentlich fast kaum noch Probleme
selber lösen, weil es für viele Anwendungsfälle, die jetzt nicht ultraspeziell sind, einfach schon
fertige Bibliotheken gibt.
Okay. Hätte ich jetzt irgendwie gar nicht gedacht, weil Go ist jetzt ja noch nicht so alt,
dass es inzwischen schon doch so eine Community gibt, die da auch Projekte bereitstellt. Hätte
ich jetzt irgendwie gar nicht erwartet.
Ja, Google steckt ja ganz massiv dahinter. Die haben ja auch ursprünglich angefangen,
die Sprache irgendwie zu entwickeln und auch in der Open-Source-Community so ein bisschen zu pushen.
Es gibt irgendwie die Anekdote, die ist irgendwie mal durch das Internet kursiert. Ich habe sie
allerdings bisher weder bestätigen noch widerlegen können, dass der erste Go-Compiler entstanden ist,
während ein C++-Entwickler darauf gewartet hat, dass sein Programm kompiliert wird.
Das war auch eines der Ziele, dass man irgendwie schnellere Entwicklungszyklen
als mit C++ erreichen kann.
Ja, so ist mir die Sprache irgendwie auch so bekannt, als besseres C++. Also maschinennahes
Zeug kann man damit wohl anscheinend ganz gut machen.
Ja, das funktioniert eigentlich ganz gut. Aber auch der ganze Webgraben, das funktioniert auch
gut. Ich finde, wenn ich gebeten werde, Go in einem Satz zusammenzufassen, dann verwende ich
häufig das Schlagwort C ohne die Schmerzen.
Das ist schon viel wert.
Ja, du sparst dir halt dieses ganze Speichermanagement-Kram. All die 10.000
verschiedenen Wege, die C++ dir anbieten, dir selbst in den Fuß zu schießen, die hast du bei
Go halt einfach nicht.
Das ist gut, weil gerade so für Einsteiger, die können sich da heftig in den Fuß schießen.
Ja, das weiß ich noch. Sehr gut. Ich habe tatsächlich auch auf meinem Server eine Anwendung in Go
laufen. Zwar habe ich so einen kleinen Git-Hosting-Dings, der heißt Gox und der läuft auf Go.
Das war tatsächlich einfach Download. Ich glaube, das ist eine Riesen-Executable, die man einfach
startet und dann läuft das einfach.
Genau, genau.
Gut. Okay, dann würde ich sagen, dann können wir doch mal zum eigentlichen Thema kommen.
Zu Docker. Vielleicht fange ich mal mit einer ganz, ganz breiten Frage an.
Was ist denn überhaupt Docker?
Das ist schon gleich die beste Frage von allen.
Wenn man jetzt irgendwie in der Wikipedia nachflecht oder sowas für das Thema, dann wirst du von
einer ganzen Batterie an Buzzwords erschlagen.
Da steht dann sowas wie Containerisierung und DevOps und irgendwie noch 14 andere Buzzwords,
die im Moment so kursieren.
Im Grunde kann man sagen, Docker ist eine Container-Lösung.
Container im Sinne von sowas Ähnliches wie virtuelle Maschinen.
Also eine Möglichkeit, mit der du einzelne Prozesse voneinander isolieren kannst, die irgendwie auf
demselben Server laufen. Nur dass ein Container im Unterschied zu einer virtuellen Maschine, wie man
sie so klassischerweise irgendwie kennt, viel, viel, viel schlanker ist.
Du hast jetzt nicht, wie bei einer VM, ein komplettes Betriebssystem darin virtualisiert mit
eigenem Kernel und allem, was so zum Betriebssystem sonst noch dazugehört mit den ganzen
System-Services und allem drum und dran.
Bei Docker ist es so, du hast eine isolierte Umgebung, in der du in der Regel einen
einzelnen Service laufen lassen kannst, wie zum Beispiel einen Web-Server oder irgendeinen
Applikations-Server oder so, je nachdem.
Das ist nur durch die Fantasie begrenzt und dieser einzelne Prozess, der kriegt dann seine
isolierte Umgebung, in der er sich im Grunde frei bewegen kann innerhalb des Rahmens, den er
gesetzt bekommt. Und das ist im Grunde der Container.
Das, was Docker dann noch obendrauf anbietet, ist eine relativ coole Toolchain, die es dem
Entwickler, der damit arbeitet später, einfach macht, effizient zu arbeiten mit dem ganzen
System. Es gibt Werkzeuge dabei, mit denen du Images bauen kannst.
Jeder Container hat sein eigenes File-System, die dann aus Images wieder erstellt werden.
Du hast die Möglichkeit, diese Images einfach zu bauen.
Du hast eine Beschreibungssprache, mit der du diese Images beschreiben kannst und du kannst
alles automatisieren.
Und grundsätzlich, dieser ganze Automatisierungs-Fokus, der steht bei Docker auch noch viel,
viel, viel weiter oben als bei diesen ganzen Virtualisierungslösungen, die man sonst so am
Markt findet bisher.
Das hast du schon gesagt, es ist so ähnlich wie virtuelle Maschinen.
Kann man so ganz platt sagen, Docker ist sowas ähnliches wie VMware oder Virtualbox?
Wenn man es ganz stark runterbrechen will, kann man das sagen, aber an den entscheidenden
Stellen gibt es dann ein paar Unterschiede.
So, der wichtigste von allem ist, Docker virtualisiert kein ganzes Betriebssystem.
Das heißt, ich habe zum Beispiel keine Kernel-Virtualisierung.
Das heißt, auch ein Docker-Container läuft mit demselben Betriebssystemkern wie das
Virtualisierungs-System.
Das heißt, ich kann jetzt auch zum Beispiel keinen Windows-Container auf einem Linux-Server
betreiben, weil die sich halt den Betriebssystemkern teilen.
Ein zweiter wichtiger Unterschied ist, in einem Docker-Container läuft üblicherweise
nur der eine Service, von dem du willst, dass er darin läuft, wie zum Beispiel dein Web-Server,
dein Applikations-Server.
Du hast jetzt nicht, wie bei einem Standard-Linux, keinen Log-In-Dienst dabei, keinen Logging-Dienst,
keine Ahnung, was Linux sonst noch alles hat, kein System-Deal, kein UDEF.
Diese ganzen Betriebssystem-Services, kein SSA-Server ist in einem Docker-Container üblicherweise
zumindest erst mal nicht drin.
Also quasi wirklich ein ganz, ganz reduziertes Betriebssystem, sodass ich mich also fokussieren
kann auf den, ich sag mal, den fachlichen Dienst, den ich eigentlich in dem Ding laufen
lassen will.
Genau.
Genauso ist es.
Und warum finden das jetzt alle so cool?
Ich meine, gut, wenn ich vorher eine virtuelle Maschine hatte, die vielleicht ein paar Gigabyte
groß war und die muss ich erst hochfahren, damit überhaupt was gestartet wird, ist wahrscheinlich
irgendwie ein bisschen schneller und braucht weniger Speicherplatz, aber ist das jetzt
irgendwie so eine krasse Neuerung, dass da alle drauf anspringen?
Ich glaube, das Thema hat, ich glaube, Docker hat einfach so einen Nerv getroffen, der beziehungsweise
so einen Bedarf erfüllt, der irgendwie, wo lange Zeit da war und durch diese klassischen
VMs, die man halt am Markt hatte, einfach nicht wirklich gedeckt werden konnte.
Du hast gerade schon gesagt, du hast erst mal viel, viel, viel kürzere Zyklen dabei.
So, einen Docker-Container, wenn ich ein Image habe, kann ich daraus innerhalb von, lass mich
jetzt irgendwie nicht lügen, aber irgendwie von ein, zwei Sekunden einen neuen Container
starten.
So, und in der Zeit ist meine VM ja noch lange nicht gebootet aus irgendeinem Image.
Und was, glaube ich, der zweite Punkt ist, weshalb Docker auch so beliebt geworden ist,
ist einfach der Grad an Automatisierung, der möglich ist.
Ich habe mich vor einer Zeit mal irgendwie so ein bisschen damit beschäftigt, irgendwie
so VM-Images irgendwie automatisiert zu bauen.
Und das ist schon echt so, da muss man halt schon echt irgendwie wissen, was man tut,
wenn man damit Konfigurations-Management-Systemen dann auf irgendwelchen VM-Templates drauf
rumrührt und die dann snapschotten muss.
Und das ist echt Arbeit und das macht Docker viel, viel, viel einfacher.
Ich habe da auch mal so ein Stichwort gehört, Infrastructure as Code.
Ich glaube, das geht so in die Richtung, dass ich irgendwo in meinem Textfall sagen kann,
hey, so eine Maschine brauche ich, das und das ist die Ausstattung, das Betriebssystem
in der Version und so weiter und dann leg mal los.
Ist das damit gemeint?
Weißt du das so, Velli?
Docker geht da sogar noch ein bisschen weiter.
Also, wenn wir jetzt schon dabei sind, mit Buzzwords um uns zu werfen, ist das Buzzword,
was bei diesen ganzen Container-Infrastrukturen noch viel stärker ist, glaube ich, der Begriff
Immutable Infrastructure.
Infrastructure as Code, das ist jetzt kein Thema, was unbedingt jetzt direkt auf dieses
ganze Container-Thema abzubilden ist, sondern das hat seinen Hintergrund eher in diesen
Konfigurations-Management-Systemen, die irgendwie so vor ein paar Jahren so auf den Markt gedrängt
sind.
An Puppet und Assault und Ansible ist da ja auch irgendwie ganz groß, wo ich meine Infrastruktur
irgendwie in Form von Code beschreibe, wie zum Beispiel als Ansible-Playbook, um sie
anhand dieser Beschreibung dann wieder von Grund auf neu aufziehen zu können.
Und was jetzt der Ansatz ist, den Docker verfolgt, ist, dass meine eigentliche IT-Infrastruktur
im Grunde komplett zustandslos ist und sich nur durch die Container beschreibt, die eben
irgendwo auf dieser Infrastruktur laufen, sodass es mir jetzt zum Beispiel auch möglich
ist, wenn ich irgendwie ein Stück Blech im Rack stehen habe, das Ding einfach auszutauschen
dann mit irgendeinem neuen Stück Blech und dann werden da dieselben Container drauf gestartet
und dass die Infrastruktur selbst eigentlich gar keinen eigenen Zustand mehr hat, sondern
sich das alles nur noch über diese Container definiert.
Das hört sich natürlich für euren speziellen Use-Case jetzt als Web-Poser zum Beispiel
nach einer tollen Lösung an, weil ihr ja quasi komplett von der Hardware euch lösen
könnt und einfach irgendeine Maschine von A nach B schiebt und dann läuft es da halt
weiter, ja?
Genau, das ist auch so die große Hoffnung, die wir uns tatsächlich so machen aus dem
ganzen Thema, dass einfach der Infrastrukturbetrieb so ein bisschen einfacher wird, weil im Moment
haben wir halt so genau dieses, als Kunde kaufst du deinen Server und das ist dann
deiner, auf dem du sitzt und diese ganzen Container-Techniken, die machen…
Ja, bieten noch tatsächlich einige weitere Möglichkeiten, die man dann nutzen kann.
Gerade wenn es jetzt irgendwie darum geht, mal schnell irgendwie einen Container von einem Stück Blech auf ein anderes zu verschieben
oder irgendwie das Ganze in die Breite zu skalieren, jetzt auf die Schnelle.
Das ist was, wo diese Container-Management-Systeme sehr, sehr, sehr glänzen.
In der Management-Systeme, hast du jetzt schon ein paar Mal gesagt, macht auch Docker das dann noch selbst
oder braucht man da so andere tolle Tools wie, ich weiß jetzt nicht genau, ob es das ist, Kubernetes?
Genau, wenn du mit Docker-Containern arbeitest, ist es üblicherweise so, dass du erstmal auf ein System beschränkt bist.
Das heißt, Docker selbst, also die Docker-Engine selbst, bietet jetzt nicht die Möglichkeit, Container über irgendwie einen Cluster von Servern zu verteilen.
Und das ist dann genau der Punkt, wo solche Software heißt Container-Orchestrator, wo solche Container-Orchestrator dann zum Spielen kommen.
Wie zum Beispiel Kubernetes. Früher gab es noch Docker Swarm, das war ein Produkt von Docker selbst, also quasi so ein Zusatzprodukt zu Docker.
Wobei sich auch Docker selbst jetzt mittlerweile auf Kubernetes committed hat.
Also Kubernetes scheint irgendwie der große Gewinner in dieser ganzen Nummer gewesen zu sein.
Wie kann man sich das vorstellen? Also das ist dann so eine Software-Suite, wo man dann nochmal sowas sagen kann wie,
du hast hier so einen Docker-Container und ich will jetzt einfach mal fünf verschiedene Instanzen lastverteilt irgendwie haben oder was macht das Tool dann für mich?
Genau, Kubernetes abstrahiert im Grunde nochmal über deine Infrastruktur hinweg und bietet dir jetzt einen Pool aus Rechenkapazitäten, den du vielleicht in deinem Rechenzentrum hast.
Das können jetzt drei Server sein, das können 300 Server sein oder so das Größte, was ich mal gehört habe, waren irgendwie 5000.
Und bietet das als einheitlichen Pool an, sodass du es als Nutzer gar nicht mehr siehst, ob hinter diesem Cluster jetzt ein oder tausend Server hinterstehen.
Das Einzige, was du dann als Nutzer dieser Orchestrierungssoftware noch tun musst, ist zu sagen, starte mir zehn Instanzen von folgendem Container-Image
und die Orchestrierungssoftware kümmert sich dann automatisch darum, dass diese zehn Instanzen auf irgendwelchen Hardware-Einheiten gestartet werden, wo eben noch entsprechende Kapazitäten frei sind.
Ich stelle mir das jetzt ganz praktisch vor, also ich habe mit Kubernetes selber noch nie gearbeitet, aber angenommen, ich will da mal so einen Web-Server hochfahren, der muss ja auch irgendwo im Internet dann erreichbar sein.
Wenn ich jetzt in so einer Engine auf so einen Button drücke und hey, stelle mir mal fünf Container davon hier, die müssen ja irgendwo erreichbar sein, kriege ich dann quasi als Rückgabe wert irgendwelche IP-Adressen oder DNS-Namen oder wie greife ich nachher darauf zu?
Das ist ganz stark abhängig davon, wie dein Kubernetes-Cluster aufgebaut ist.
Grundsätzlich ist es erstmal so, dass du eine interne Netzwerktopologie hast, die einfach nur dazu da ist, damit deine Container selber irgendwie miteinander reden können.
Das kann ja auch notwendig sein, wenn du zum Beispiel einen Datenbank-Container und einen Applikations-Server-Container hast, die müssen ja miteinander auch irgendwie kommunizieren.
Und die Aufgabe, Traffic von außen in deinen Container-Cluster reinzukriegen, da gibt es häufig spezielle Komponenten, die vom Anbieter bereitgestellt werden, die einfach nur dafür zuständig sind, Traffic von außen irgendwie in deinen Cluster reinzukriegen.
Wenn man so in den großen Cloud-Umgebungen unterwegs ist, hier Amazon oder Google oder sowas, da gibt es dann entsprechend fertige Lösungen dafür, die das anbieten.
Wenn man sowas selber hostet, muss man da ein bisschen kreativ werden.
Die großen Netzwerk-Hardware-Hersteller, die bieten auch mittlerweile Integrationen für diese ganzen Container-Orchestrierungs-Softwares an, sodass ich zum Beispiel jetzt auch wirklich einen Hardware-Load-Balancer oder eine Firewall irgendwie so automatisch konfigurieren kann, dass wenn du jetzt so einen Container-Cluster erstellst, dass dann dein Traffic irgendwie auf all diese Container irgendwie gleichmäßig aufgeteilt wird.
Also das funktioniert so.
Okay. Ja, ich hatte so als dummer Anwender immer gedacht so, hä, wie mache ich das denn, weil das war für mich der Standard-Use-Case.
Aber klar, wenn ich natürlich erstmal hergehe und meine Anwendung so ein bisschen auch auseinanderreißen will, vielleicht die Datenbank hier, die Anwendung da und irgendwie, keine Ahnung, die Middleware noch woanders, dann ist natürlich erstmal gar kein Traffic von draußen drauf, klar.
Das macht es etwas einfacher, ja.
Okay. Habe ich verstanden, glaube ich, was ihr damit irgendwie Cooles machen könnt. Aber was mache ich denn jetzt so als einzelner, kleiner Entwickler damit?
Bringt mir das auch irgendwie was? Weil ich bin jetzt ja nun kein Web-Poster, der das vielleicht ganz gut einsetzen kann.
Trotzdem habe ich den Eindruck, dass auch viele Entwickler halt super auf diesen Docker-Train aufspringen.
Und was habe ich da konkret für Vorteile von?
Da gibt es mehrere Ansätze, die man fahren kann. Also man kann jetzt erstmal mit der Entwicklungsschiene argumentieren und man kann auch mit der operativen Schiene argumentieren.
Ich würde jetzt erstmal mit der Entwicklung selber anfangen, denn einerseits, was jetzt erstmal du persönlich, Stefan, als Entwickler von Docker zum Beispiel hast, ist, dass du die Möglichkeit hast, deinen individuellen Entwicklungsworkflow zum Beispiel mit Docker zu optimieren.
Was wir bei uns zum Beispiel früher relativ häufig hatten, war das Problem, dass wir Softwareentwickler da sitzen hatten, die irgendwie Software entwickelt haben und diese Leute unglaubliche Mühe damit hatten, die produktive Umgebung, in der die Software dann am Ende betrieben werden sollte, irgendwie auf ihrem lokalen Rechner nachzubauen.
Das war irgendwie noch zu PHP-Zeiten, da musste man die passende PHP-Version bei sich auf dem Arbeitsplatzrechner installiert haben oder man musste sich da mit virtuellen Machinen einen abbrechen, um die richtigen Dependencies an den Start zu kriegen für sein Projekt.
Und da hilft Docker schon, weil du jetzt zum Beispiel die Laufzeitumgebung, in der deine Software im Produktivbetrieb später laufen soll, einfach in ein Container-Image packen kannst und das Ding dann einfach bei dir lokal auf dem Rechner starten kannst.
Das heißt, du kannst als Betreiber zum Beispiel oder beziehungsweise als Administrator einer Infrastruktur einfach ein Container-Image anbieten, was du deinen Entwicklern gibst und die nutzen das, um bei sich lokal auf dem Arbeitsplatzrechner ein möglichst genaues Abbild des Produktivsystems zu starten.
Man kann das Ganze auch andersrum aufziehen, sodass du als Entwickler selbst einfach definierst, wie hat die Laufzeitumgebung für meine Applikation auszusehen.
Ich glaube, du bist ja hauptsächlich im Java-Umfeld unterwegs, war das richtig?
Wenn du sagst, meine Applikation braucht jetzt unbedingt einen Tomcat und Java 8, könntest du deine Applikation einfach in einem Container-Image ausliefern, wo genau das drin ist, genau die Abhängigkeiten drin sind, die deine Applikation zum Laufen braucht und könntest genau dieses Image jetzt auch im Produktivbetrieb einfach an den Start nehmen.
Entweder machst du es selbst, wenn ihr jetzt wirklich DevOps nach Lehrbuch macht oder du übergibst dieses Container-Image an irgendeinen Operator, der das Ding dann in der Produktivinfrastruktur startet und hast auf die Art die Garantie, dass die Software im Produktivbetrieb auch genauso läuft, wie du als Entwickler dir das tatsächlich gedacht hast.
Das finde ich auf jeden Fall schon mal sehr cool, Herr Sillig. Wir verbringen auch sehr viel Zeit damit, Produktionsumgebungen nachzubauen. Das kann ich sofort nachvollziehen. Okay, das finde ich gut.
Genau, man hört ja häufig so diesen Satz, wenn irgendwas im Produktivsystem nicht funktioniert, dann sagt der Entwickler häufig, ja, works on my machine. Also bei mir läuft's. Im Produktivsystem, ja, da ist halt irgendwas anders. Ja, aber weiß ich auch nicht. Das ist halt blöd. Das verursacht Fehler und letzten Endes sind dann alle sauer auf dich und den Betreiber und das ist halt einfach Ärger, den man ganz gut vermeiden kann mit sowas.
Okay, ja, das finde ich auf jeden Fall gut. Also da kann man, also ich fasse es mal so ein bisschen zusammen, auch für mich so ein bisschen Zeit sparen. Es gibt mir auch eine gewisse Sicherheit, wenn ich was entwickelt habe, dass es dann nachher auch so läuft, wie es laufen soll und ich nicht noch irgendwie mich um diesen ganzen Admin-Kram auch noch kümmern muss. Das ist ja vielleicht auch ganz gut.
Und wenn ich das Ganze dann auch noch irgendwie so schreiben kann, dass es sogar aussieht wie Code, ja, dann bin ich am Ende ja auch sogar glücklich. Das ist ja cool. Ganz konkrete Frage mal zwischendurch. Kann ich das ganze Docker-Zeug inzwischen schon auf Windows laufen lassen, weißt du das? Oder ist das immer noch so eine Winox-Geschichte?
Kannst du tatsächlich. Es gibt zwei, das ist ein bisschen hinterhältig. Wenn man nach Docker und Windows sucht, gibt es zwei verschiedene Schienen, auf die du da geraten kannst.
Das Erste ist, ich muss jetzt aufpassen, dass ich da mit den Namen nicht durcheinander komme. Das eine, was du findest, ist eine Lösung, die es dir ermöglicht, Linux-Container unter Windows zu starten. Das Ganze arbeitet dann wieder mit Virtualisierung im Hintergrund.
Das heißt, das ist einfach ein Software-Paket, das erstellt dir irgendwie eine Hyper-VVM auf deinem Windows-Rechner, wo dann wieder ein Linux drin läuft mit einer Docker-Engine. Das funktioniert trotzdem relativ gut. Es liegt daran, dass die Docker-Engine selber ja im Grunde auch einfach nur eine Rest-API zur Verfügung stellt, die dann wieder angesprochen werden kann.
Das heißt, diese ganzen Kommandozeilen, Tools, die funktionieren dann auch unter Windows, außer du kannst das dann von einer PowerShell bedienen und mit allem drum und dran. Das integriert sich relativ gut, sodass du dann die Möglichkeit hast, unter Windows Linux-Container zu starten, die dann aber in Wirklichkeit in irgendeiner virtuellen Maschine laufen.
Das ist die eine Möglichkeit. Du hast seit irgendeiner der letzten Windows-Server-Versionen aber auch tatsächlich die Möglichkeit, Windows-Container zu starten, die dann wirklich im Windows-Kernel laufen und die auch echte Windows-Professe beinhalten. Also Windows hat mittlerweile in den Server-Versionen nativen Docker-Support. Wobei ich ganz ehrlich gestehen muss, dass ich mich dann auch noch nicht das geringste mit beschäftigt habe.
Das Einzige, wo ich mal aus Versehen drüber gestolpert bin, dass ich in irgendeinem GitHub-Repository einen Docker-File gefunden habe, wo normalerweise für die Linux-Container die ganzen Bash-Befehle drinstehen, um das Image aufzubauen, dann stand da auf einmal so 10.000 PowerShell-Statements drin. Da habe ich mich total verjagt.
Ja, das geht auch gar nicht, wenn man die Bash oder was auch immer gewohnt ist und dann diese ganzen .NET-Quatsch.
Aber es funktioniert. Also von daher, alles gut.
Meinetwegen sagen wir jetzt Java und Tomcat. Und jetzt möchte ich tatsächlich irgendeine Version, die ich da festgelegt habe, hochziehen. Sei es auch nur die, keine Ahnung, die Linux-Version muss jetzt eine neuere sein oder die Tomcat-Version muss neuer sein oder Java oder was auch immer. Reicht es dann einfach, in einem File irgendwo eine andere Version einzutragen oder muss ich dann die ganzen Images alle irgendwie neu bauen und neu verdrahten?
Die Idee bei Docker ist tatsächlich, dass die Container selber möglichst zustandslos sind und sich im Betrieb, also das bedeutet, dass sich der Container selber im Betrieb eigentlich nicht mehr verändert.
Man muss sich da nicht dran halten. Das heißt, du kannst jetzt zum Beispiel auch einen Docker-Container starten und kannst dann in diesem Container über die ganz normalen Methoden des Betriebssystems ein Software-Update machen, irgendwie ein Upgrade zum Beispiel.
Wobei die eigentliche Idee, das eigentliche Paradigma ist, dass du, wenn du ein Software-Update machen möchtest, innerhalb eines Containers du das Image neu baust mit aktueller Software oder auf Grundlage eines anderen Basis-Images, zum Beispiel eine neuere Ubuntu-Version oder worauf auch immer das Image aufbaut und dann die entsprechenden Container löschst und neu erstellst.
Genau, also Software-Update, grundlegende Idee ist, keine Updates im Container, sondern Container-Image neu bauen und daraus dann neue Container erstellen.
Also, nur um das nochmal zusammenzufassen, nennt man das Basis-Images, auf denen ich dann basiere oder haben die irgendwie einen anderen Namen?
Das nennt man tatsächlich so. Genau, das ist glaube ich auch was, was so ein bisschen einer der Sachen ist, die Docker so ein bisschen zu seiner großen Beliebtheit geholfen haben, dass du halt die Möglichkeit hast, deine eigenen Images auf bestehenden Images, die vielleicht direkt vom Hersteller, vom Betriebssystem-Distributor angeboten werden, dass du deine eigenen Images darauf aufbauen kannst.
Dass du zum Beispiel sagen kannst, ich nehme jetzt einen Ubuntu-1804-Basis-Image und baue darauf auf, baue jetzt noch mein eigenes Image obendrauf, wo jetzt noch zusätzlich ein Web-Server mit meiner Applikation drin läuft oder sowas.
Das funktioniert doch echt gut, muss man sagen.
Ganz grob zum Verständnis, wie kann man sich das vorstellen? Also angenommen, ich habe jetzt so ein fertiges Linux-Image, okay, da kann ich mir noch vorstellen, da ist alles drin, was Linux so braucht.
Dann kommt da oben jetzt, fangen wir mal ganz unten an, wirklich einfach, ich sage mal, so ein Apache-Web-Server will ich jetzt da drauf haben.
Ist dann in dem zweiten Image tatsächlich einfach, sind dann nur noch alle Dateien, die für den Apache dazukommen müssen? Also ist das so eine Art Delta zu dem Basis-Image oder wie kann man sich das vorstellen?
Das Image-Format, mit dem Docker arbeitet, genau, das basiert tatsächlich auf differenziellen Layers.
Also das heißt, du hast ein Basis-Image und wenn du jetzt zum Beispiel ein Apache installierst, kommt auf dieses Image einfach noch eine zweite Schicht obendrauf, wo wirklich das Delta zum Basis-Image drauf ist.
Und wenn du dann darauf, du kannst darauf aufbauen und dann noch weitere Schichten aufbauen, du kannst dann zum Beispiel in einer zweiten Schicht noch deine eigene Applikation wieder da reinkopieren und auf die Art setzen sich diese Container-Images aus ganz, ganz vielen einzelnen Schichten zusammen.
Und das ist auch das Coole, wenn es darum geht, diese Images zu verteilen.
Wenn du so ein Image deployen willst zum Beispiel, ist Docker selber intelligent genug, zum Beispiel festzustellen, dass die letzten verschiedenen Deployment-Artefakte, die du hattest, die letzten Container-Images, die du gebaut hast, irgendwie alle auf demselben Basis-Image aufbauen und überträgt dann nur noch, wenn du zum Beispiel in eine Image-Registry deine Images pusht, überträgt dann nur noch die Schichten der Container, die sich tatsächlich verändert haben.
Also ich stelle mir jetzt einfach nur so ganz, ganz platt so vor, ich installiere da irgendwo so ein Apache und der weiß dann zum Beispiel unter slash etc muss irgendwie eine Config-Datei liegen und unter slash bin muss das Binary liegen und dann werden die Images on top irgendwie aufeinander ausgepackt, sodass am Ende im letzten Image ganz oben einfach das Linux mit den zusätzlichen Dateien von Apache drin liegt, mit den zusätzlichen Dateien meiner Applikation und da wird quasi Schicht für Schicht einfach, ich sag mal ganz blöd, das Dateisystem zusammengebaut,
um dann am Ende meine Anwendung drin laufen lassen zu können. Richtig?
Genau so ist es.
Okay, cool. Ja, da würde ich jetzt für mich so ableiten, dass sich dann vielleicht bestimmte Anwendungen oder Sprachen oder wie auch immer für den Einsatz in Docker besser oder schlechter eignen.
Denn wenn ich mir jetzt einfach vorstelle, dass alles, was in dem Image drin ist, halt irgendwie im Dateisystem abgelegt werden können muss, dann gibt es da vielleicht irgendwelche, ja ich weiß nicht, Plattformen, wir haben jetzt über Java zum Beispiel geredet oder Go oder PHP oder ich weiß nicht, PHP zum Beispiel könnte ich mir vielleicht sehr einfach vorstellen, weil das sind ja einfach quasi Klartext-Dateien, die einfach auf der Platte liegen, aber bei Go zum Beispiel kommt ja ein riesen Kompilat raus.
Gibt es da irgendwie, ja Plattformen, die sich besser oder schlechter für diese Arbeit in Containern eignen oder ist das egal?
Also ich muss ehrlich sagen, die Plattform, von der ich sagen würde, das funktioniert überhaupt nicht im Container, die habe ich noch nicht gefunden.
Es gibt Umgebungen, wo man merkt, das funktioniert besser in Containern als so in manchen anderen.
Bleiben wir zum Beispiel mal beim Beispiel Go.
Wenn ich eine Go-Applikation habe, da fliegt am Ende ein statisch kompiliertes Binary raus oder das ist dann irgendwie meine Excel-File, die ist irgendwie 100 Gigabyte groß oder sowas und das Schöne ist, die hat überhaupt keine Abhängigkeiten.
Die ist nicht mal von irgendeiner C-Standard-Library abhängig, wenn ich sie richtig kompiliere.
Das heißt, es muss auch in dem Container-Image selber außer diesem Binary eigentlich gar nichts mehr drin sein.
Das macht das Image-Bauen für solche Go-Applikationen natürlich super einfach, weil ich überhaupt nicht auf irgendwelche Abhängigkeiten Rücksicht nehmen muss.
Generell kann man natürlich sagen, je komplexer der Software-Stack ist, den du so drum rumlaufen hast mit deiner Applikation, desto mehr Mühe hast du dann auch damit, das Container-Image zu bauen.
Aber andererseits, desto mehr Mühe hättest du auch damit, irgendeine VM so zu konfigurieren, dass deine Applikation da läuft.
Also das ist jetzt nicht so, dass man da irgendwie mehr Arbeit mit hätte.
Was mir tatsächlich aufgefallen ist, was von den Sachen, die ich bisher gefunden habe, was am meisten Mühe macht, im Container zu betreiben, ist tatsächlich PHP.
Weil du bei PHP-Applikationen in der Regel immer mehrere Prozesse hast, die du irgendwie orchestrieren musst.
Bei PHP hast du ja grundsätzlich den Web-Server, sei es jetzt ein Apache oder ein Nginx.
Und dann hast du ja auch den eigenen PHP-Prozessmanager, das FPM, ja noch dazu.
Und es müssen irgendwie beide Prozesse in diesem Container laufen.
Und das Ganze muss irgendwie miteinander orchestriert werden.
Und das war so bisher das Umständlichste, was mir irgendwie über den Weg gelaufen ist.
Also kann man so sagen, ich glaube, das passt ja auch ganz gut zu so einer Microservice-Architektur, dass ich versuche, wirklich isolierte Dinge am besten in so einem Container laufen zu lassen, damit ich genau solche Probleme gar nicht habe.
Dass sie sich vielleicht gegenseitig, ich weiß nicht, blockieren oder Abhängigkeiten haben, die Prozesse untereinander.
Genau. Im Idealfall hast du ja schon so eine schöne, fertige 12-Factor-App, die sich so nach diesen ganzen Architekturrichtlinien hält, die es eben dafür gibt,
sodass deine Applikation dann am Ende tatsächlich auch nur dieser eine Prozess ist, der dann eben so seinen Port aufmacht, auf den er lauschen muss, wenn es eine Web-Applikation ist,
sodass du das Ding dann einfach in dem Container-Image starten kannst.
Und wenn wir jetzt so gefragt haben, was für Umgebung vielleicht sich gut eignen kann man, weil du es gerade selber angesprochen hast, mit den Web-Anwendungen,
ich höre auch eigentlich fast nur im Kontext von Web-Anwendungen von Docker-Containern, ist das darauf beschränkt oder kann man potenziell auch irgendwelche, ich weiß es nicht, Desktop-Anwendungen in einem, also Server-Anwendungen dann natürlich in so einem Container laufen lassen?
Desktop-Anwendungen sind, ja, das ist nochmal so eine Sache für sich, ich kann jetzt nur für Linux sprechen, wie das unter Windows, also unter Windows habe ich da überhaupt keine Erfahrungen,
aber unter Linux ist das schon kompliziert genug. Das Problem ist ja so, die Applikation, die in einem Container läuft, die ist ja von dem VIRS-System erstmal vollkommen isoliert,
das heißt, du siehst jetzt nicht, du hast keinen Zugriff auf das Betriebssystem des VIRS, du hast keinen Zugriff auf irgendwelche Geräte, auf irgendwelche Hardware und genau das ist bei Desktop-Applikationen schon das Problem,
weil du ja irgendwie auf den Videospeicher zugreifen musst, du musst vielleicht auf irgendwelche USB-Geräte zugreifen, du willst Mauseingabe haben und so dieser ganze Kram.
Da musst du unter Linux zum Beispiel auf alle möglichen Devices zugreifen, die Docker dir erstmal gar nicht gibt und der Trick ist dann, deinen Container, wenn du ihn startest, so zu konfigurieren,
dass der Prozess, der im Container läuft, dann auch Zugriff auf alle möglichen Hardware-Devices hat, die er braucht. Das ist so eine Wissenschaft für sich, das ist auch schon echt kompliziert, aber es geht.
Am besten wäre es, wenn ich, ich sag fast mal kurz zusammen, am besten habe ich eine Anwendung, die packe ich in den Container, die starte ich einmal und dann läuft die und da muss ich eigentlich nie interaktiv irgendwas machen,
sondern es ist am besten einfach eine Server-Anwendung, die auf Requests irgendwie lauscht und das ist eigentlich, ich sag mal, perfekt geeignet für so einen Docker-Container.
Genau, was am besten funktioniert ist, wenn es halt wirklich irgendwie Headless ist, also wenn es in einer Server-Applikation ist. Was man auch häufig sieht, ist, dass zum Beispiel irgendwelche Kommandozeilentools als Docker-Image gebaut werden.
So, da hast du jetzt nicht diesen typischen Server-Applikations-Use-Case, dass du halt einen Prozess hast, der ständig läuft, der deine Anfragen beantworten muss, aber wenn es zum Beispiel irgendeine Kommandozeilen-Applikation, die in Java geschrieben ist zum Beispiel, da hast du ja grundsätzlich erstmal die gleichen Herausforderungen, weil die auch ihre Abhängigkeiten hat,
vielleicht bestimmte Bibliotheken braucht, vielleicht eine bestimmte Laufzeit-Version hat, voraussetzt und auch das kann man über Container zum Beispiel lösen, indem du ein Container-Image baust, was per Kommandozeile einmal gestartet werden kann, dann irgendwie seinen Job macht und dann sich dann wieder beendet. Also so für typische Batch-Jobs oder sowas, das funktioniert auch.
Das heißt, also ich starte eigentlich nicht das Programm, sondern ich starte über die Kommandozeile den Container, der dann hochgefahren wird, das Programm ausführt, mir den Output liefert, den Container wieder runterfährt und das sieht so aus, als würde es quasi on the fly laufen, ja?
Genau. Und das Schöne ist, so ein Container startet da tatsächlich so schnell, dass du da in der Regel gar nichts vermerkst.
Ja, sehr krass. Dann würde ich irgendwie abschließend zu dem Thema nochmal fragen, was machst du denn jetzt selber eigentlich mit Docker? Also ich meine, okay, so für euer Unternehmen sicherlich super hilfreich und ich habe auch schon gelernt, da kann man sich gut Produktionssachen mit nachbauen und so weiter. Sind das auch so die Use Cases, die du so in der täglichen Arbeit damit für dich als positiv bewertest oder hast du noch irgendwie was ganz anderes cooles, was du jetzt mit machst?
Genau, also was ich im Moment mit Docker mache, ist das, also wir haben ja die Herausforderung, dass wir bestimmte Applikationen für unsere Kunden betreiben möchten, wie zum Beispiel ja so die ganzen üblichen PHP-verdächtigen, WordPress-Typo 3.
Das heißt, was wir uns überlegen müssen, ist, wie sieht überhaupt so eine Container-Landschaft aus, in der ich jetzt zum Beispiel eine Typo 3 betreiben möchte, aus welchen Containern besteht das, weil den kompletten Stack, den kriege ich ja nicht in einem Container untergebracht.
Da ist eine Datenbank mit drin, also da ist eine MySQL irgendwo mit drin, da ist ein Caching-Server, ein Redis irgendwo mit drin, da ist vielleicht noch ein Solr Suchindex irgendwo mit drin und das ist eine Applikation, wird dann am Ende so ein recht komplexes Konglomerat aus verschiedenen Containern, die dann irgendwie miteinander sprechen müssen.
Dann muss das Ganze irgendwie auch noch horizontal skalierbar sein, weil das muss ja dann auch noch mit zigtausend Requests die Minute klarkommen.
Das ist so unsere große Herausforderung im Moment, uns zu überlegen, wie sieht überhaupt so eine Container-Topologie für solche Applikationen aus, wie funktioniert das und was wir im Moment auch machen, ist die Software zu schreiben, die diesen ganzen Kram halt automatisiert.
Wir setzen ja relativ viel auf Kubernetes auf und was wir im Moment recht intensiv machen, ist eigene Software zu schreiben, die wiederum Kubernetes erweitert und zusätzliche Features, um quasi auf einfache Art und Weise das zu machen, was wir wollen von Kubernetes.
Ja, das hört sich auf jeden Fall aus einem sehr komplexen Use-Case an und ich kann das völlig nachvollziehen, dass man da nach Lösungen für die bisherigen Probleme sucht, also da sehe ich definitiv auch die Benefits.
Was mir jetzt gerade noch eingefallen ist, weil du es auch gerade gesagt hast, wir hatten jetzt gesagt, solche Container funktionieren am besten, wenn sie nichts irgendwie an Daten ändern oder ablegen, jetzt habe ich aber so eine Datenbank in dem Container drin, du sagtest gerade Redis, wo speichert Redis jetzt seine Daten?
Kubernetes bietet Integrationen für verschiedene Netzwerkstorages an.
Das ist dann so ein Punkt, wo Theorie und Praxis häufig auseinanderlaufen, weil wenn du jetzt wirklich Microservices nach Lehrbuch machst, heißt es halt ja, deine Container müssen zustandslos sein und persistente Daten sind schlecht und böse und in der Praxis sieht es dann halt doch wieder anders aus, weil so Hand aufs Herz, irgendwo müssen die Daten ja gespeichert werden.
Und Kubernetes wählt da auch so ein bisschen den pragmatischen Ansatz und bietet dir als Nutzer auch tatsächlich die Möglichkeit, persistenten Speicher zu integrieren in deine Infrastruktur.
Die Herausforderung dabei ist, dass du dich in so einer Container-Infrastruktur ja in einem sehr, sehr dynamischen Umfeld bewegst, das heißt auch einen Datenbank-Container, der jetzt in diesem Moment auf einem ganz bestimmten Stück Blech gerade läuft.
Das kann sein, dass der in einer halben Stunde auf einmal woanders läuft und dann musst du natürlich zusehen, dass die Daten für diese Datenbank dann auch irgendwie mitkommen, was dann tatsächlich der Weg ist, um sowas zu lösen, ist, dass du mit irgendwelchen Netzwerkstorages arbeitest.
Das kann im einfachsten Fall irgendwie irgendein NFS-Share sein, auf dem deine Daten zum Beispiel liegen, wobei ich das jetzt nicht empfehlen möchte, also man sollte keine MySQL-Datenbank aus einem NFS-Volume betreiben, das macht keinen Spaß.
Aber das kann zum Beispiel sowas sein, wie irgendwie ein Netzwerk-Block-Device, so wenn du in der Cloud bist, zum Beispiel irgendwie ein EBS-Block-Device oder wenn du es selber hostest, ein Ceph-Device oder ein Ceph-File-System, also Kubernetes hat irgendwie eine Liste von allen Storage-Anbietern, die es irgendwie unterstützt, sei es jetzt Cloud-basiert oder zum selber hosten.
Das sind irgendwie 20 verschiedene Storage-Lösungen, die da unterstützt werden. Also das ist tatsächlich ganz sehr vielfältig.
Und wie kann ich mir das in dem Container vorstellen? Ich habe jetzt angenommen, so ein Container, da ist jetzt diese Redis-Datenbank drin und sage ich dir dann quasi einfach über irgendein Docker-Skript, Mensch, wenn du deine Daten speicherst, dann nutze aber bitte diesen externen Speicher, den ich dir noch irgendwie ins File-System mounte oder wie sieht das dann aus?
Oh, das ist schön, das ist für den, also wenn du einem Container ein Netzwerk-File-System unterschiebst über Kubernetes, ist das für den Container selber total transparent.
Der sieht das als Dateisystem, was jetzt genau wirklich dahinter steht, kann der Applikation, die im Container läuft, eigentlich relativ egal sein.
Ja, jetzt, also du hast gerade schon so ein paar Sachen angesprochen, so Zustandslosigkeit dieser Services wäre irgendwie ganz cool und ja, so persistenter Speicher ist zumindest auch eine Herausforderung, muss man sich auf jeden Fall drum kümmern.
Gibt es noch irgendwie andere, ich sage mal jetzt, ich will nicht sagen Nachteile, aber vielleicht irgendwie Probleme, die sich in der Praxis ergeben, wenn man jetzt einfach mal eben auf Docker umsteigen will?
Genau, gerade wenn du im verteilten Umfeld arbeitest, also wenn du jetzt wirklich ein Kubernetes-Cluster zum Beispiel an den Start kriegen willst, das ist, die ersten Schritte sind da relativ einfach gemacht, weil es halt auch fertige Setup-Skripte gibt, die dir irgendwie so ein Cluster aus dem Boden stampfen.
Nichtsdestotrotz gibt es natürlich dann viele Fragen, die du irgendwie klären musst, so im weiteren Verlauf so eines Projektes.
Storage ist eins davon, das heißt, du musst dich irgendwie um eine effiziente Storage-Architektur kümmern, so damit du halt auch einen persistenten Datenspeicher für deine ganze Infrastruktur irgendwie vorhalten kannst.
Netzwerk ist das zweite Thema, geht so ein bisschen mit Storage einher.
Netzwerk mit geringen Latenzen, damit das Ganze irgendwie so funktioniert.
Was dann noch die nächste große Frage ist, ist wie kriegst du, wo wir vorhin schon kurz drüber gesprochen haben, wie kriegst du Traffic in dein Cluster rein, also so dieses typische Ingress-Routing?
Machst du das über irgendeinen Software-Load-Balancer, kaufst du irgendeinen Hardware-Load-Balancer ein, den du jetzt mit Kubernetes integrierst?
Machst du das über einen Cloud-Provider, wenn du in der Public Cloud unterwegs bist?
Das sind alles Sachen, um die man sich tatsächlich kümmern muss, weil Kubernetes da nicht unbedingt jetzt die festen Antworten bietet, weil Kubernetes jetzt nicht auf eine bestimmte Plattform zum Beispiel zugeschnitten ist.
Das heißt, Kubernetes ist schon so gedacht, dass es auf eine gewisse Art pluggable ist, dass du deine eigenen Komponenten dazuschalten kannst, aber du musst das dann halt auch machen.
Du musst dich selber um Storage kümmern, du musst dich um Networking kümmern, du musst dich um Ingress-Routing kümmern, weil da sagt Kubernetes, lieber Nutzer, das ist jetzt echt dein Problem.
Also so eine grobe Zahl, also für mich hört sich das jetzt als zentraler Nachteil an, ich muss mich erstmal in den ganzen Kram einarbeiten.
Okay, das hat man bei jeder neuen Technologie, aber wenn ich jetzt wirklich mal mit so einem Ding starten will, hast du da irgendwie so eine Zahl aus dem Bauch heraus, wie lange man sich damit beschäftigen muss, um den ganzen Kram auch zu verstehen, den man da tut?
Oh, das ist eine gute Frage. Wir selber beschäftigen uns jetzt schon so lange damit, dass ich gar nicht mehr genau auseinander friemeln kann, wie lange wir jetzt für Einarbeitung und für tatsächlich produktive Entwicklungen benötigt haben.
Wenn man einfach nur in Kontakt kommen will mit dem ganzen Thema, das ist tatsächlich schnell gemacht.
Das ist jetzt für den Produktivbetrieb natürlich komplett ungeeignet, aber was es zum Beispiel gibt, ist ein Projekt namens Minikube, was du nutzen kannst, um einfach lokal bei dir auf dem Entwicklungsrechner irgendwie so ein voll funktionales Kubernetes-Cluster an den Start zu kriegen.
Was du auch machen kannst, ist, es gibt verschiedene Setup-Tools, die dich unterstützen bei dem Setup von so einem Cluster, von denen allerdings die meisten voraussetzen, dass du in irgendeiner Cloud-Umgebung unterwegs bist.
Sei es jetzt eine Public Cloud wie AWS oder Azure oder eine Hosted Private Cloud, OpenStack oder was es da sonst noch alles so gibt.
Das heißt, die setzen dann schon ein bisschen was an Infrastruktur voraus.
Wenn man das hat, ist das gut, dann kann man darauf aufbauen.
Wenn man wirklich vom Scratch anfängt, muss man da schon ein bisschen Vorarbeit leisten.
Gibt es dann auch bezüglich meiner Anwendungsentwicklung, meiner Programmierung irgendwas, woran ich denken muss?
Also wenn ich jetzt zum Beispiel weiß, dass meine Anwendung später in einem Docker-Container läuft, muss ich dann bei der Programmierung irgendwas Besonderes beachten?
Jetzt kann so ganz einfache Sachen sein wie zum Beispiel, verlasse dich nie auf eine IP-Adresse, sondern immer nur auf einen DNS-Namen, was man natürlich auch sonst machen sollte, aber davon mal abgesehen.
Also gibt es da irgendwie sowas, wo ich auch als Programmierer wirklich anders entwickeln muss?
Anders entwickeln muss, nicht unbedingt.
Du solltest natürlich grundsätzlich irgendwie so diese ganzen üblichen Architektur-Paradigmen einhalten.
Ich denke jetzt hier an 12-Factor-App und was es da sonst noch alles gibt.
Schwierig ist es zum Beispiel immer genau, wenn du dich erstmal auf irgendwelche Eigenarten deiner Umgebung verlässt, wenn du zum Beispiel Annahmen über IP-Adressen triffst oder sowas.
Das sollte man sowieso nicht machen.
Was auch immer gefährlich ist, ist Zugriff ins lokale Dateisystem, weil du halt nicht genau weißt, läuft das Ganze jetzt verteilt, wird dieser Container später mal horizontal skaliert?
Habe ich am Ende irgendwelche Inkonsistenzen, wenn ich da jetzt im lokalen Dateisystem rumschreibe und das ist nicht irgendwie übers Netzwerk synchronisiert?
Da sollte man im Zweifel vorsichtig mit sein.
Was gibt es sonst noch? Am besten keine Applikationen schreiben, die unbedingt als Root laufen müssen, aber das sollte eigentlich auch selbstverständlich sein.
Ansonsten sollte es das eigentlich schon fast gewesen sein.
Diese Container-Umgebungen, die sehen vieles nach.
Das ist ja tatsächlich auch ein Ansatz, den man relativ häufig findet, dass Leute versuchen, Altapplikationen mit möglichst geringen Anpassungen irgendwie zu containerisieren.
Und in vielen Fällen funktioniert das tatsächlich auch ganz gut, weil du halt im Container die Möglichkeit hast, viele Eigenarten der Laufzeitumgebung, in der so ein Altprogramm vielleicht vorher gelaufen ist oder sowas, irgendwie gut abbilden zu können.
Jetzt mal losgelöst von irgendwelchen IPs oder sowas.
Ich hätte jetzt eigentlich erwartet, jetzt kommt das Antwort, na klar, du musst als Microservice-Architektur jetzt von nun an nur noch arbeiten, aber das ist offensichtlich dann nicht so.
Das ist natürlich am besten, aber das ist jetzt nicht unbedingt ein Muss, wenn du mit Containern arbeiten möchtest.
Unabhängig davon sind Microservices und Container natürlich zwei Sachen, die ganz gut miteinander funktionieren.
Oder anders formuliert, wenn du jetzt mit Microservices arbeitest, machst du dir meistens auch eine große Freude damit, wenn du auch das Ganze irgendwie in Containern deployst am Ende.
Aber der Umkehrschluss ist jetzt nicht unbedingt immer gültig.
Okay, ja, das war für mich schon relativ viel Input. Das fand ich schon mal sehr spannend.
Eine Frage habe ich aber noch. Docker ist jetzt so der Platzhirsch bei den Containern.
Gibt es überhaupt realistisch eine Alternative? Ich weiß, dass es noch andere Containerdienste gibt, aber wenn ich jetzt in das Thema einsteigen will, sollte ich lieber gleich auf Docker setzen oder gibt es ernstzunehmende Alternativen?
Genau, Docker ist ja so ein bisschen der de facto Standard im Moment.
Es gab vor einer Zeit nochmal ein alternatives Produkt, das hieß Rocket.
Geschrieben einfach nur RKT, wobei ich jetzt auch gestehen muss, ich habe da jetzt länger nichts mehr von gehört.
Das ist aus der öffentlichen Präsenz so ein bisschen verschwunden.
Deswegen bin ich mir da nicht ganz sicher, ob das Projekt noch am Leben ist.
Was es ansonsten noch gibt in Richtung Container sind solche Lösungen wie LXC, LXD.
Wobei die tatsächlich auch einen anderen Architekturansatz verfolgen.
Ich habe ja vorhin gesagt, Docker verfolgt ganz stark dieses Ein-Service-Pro-Container-Prinzip, dass du zum Beispiel nur deinen Webserver oder nur deinen Applikationsserver im Container laufen hast und sonst nichts.
Bei LXC ist das Ganze ein bisschen anders, weil LXC tatsächlich versucht, im Grunde ein komplettes Betriebssystem minus dem Kernel im Container zu betreiben.
Da hast du dann wirklich einen System D und einen Downloading-Server und einen Logging-Dienst und einen SSH-Server und alles Mögliche im Container laufen.
Die Dinger verhalten sich dann noch eine ganze Ecke mehr wie eine VM, als das zum Beispiel ein Docker-Container tut.
Die meisten davon habe ich auf jeden Fall noch nie gehört. Scheint Docker das wichtigste zu sein. Das ist schon mal gut.
Ja, super. Von meiner Seite aus haben wir das Thema Docker hervorragend bearbeitet.
Also meine Fragen wurden komplett geklärt. Das fand ich schon mal sehr hilfreich und vor allem haben mir auch die Tipps gefallen, was ich persönlich mit Docker tatsächlich dann auch noch anstellen kann, auch wenn das Unternehmen das vielleicht noch nicht eingeführt hat oder keinen Sinn darin sieht.
Also von daher erstmal vielen Dank. Hat mir viel Spaß gemacht und ich habe da einiges mitgenommen.
Ich habe jetzt zum Abschluss des Gesprächs nochmal so ein paar allgemeine Fragen.
Ich mache ja hier so einen Podcast für Auszubildende und von daher ist meine Frage auch an jeden Gast immer, ob du selber irgendwas mit der Ausbildung von Entwicklern Nachwuchs zu tun hast oder ob du eher so der Architekt im Elfenbeinturm bist.
Das ist jetzt schon sehr suggestiv gestellt, die Frage. Ja, so eine Selbsteinschätzung ist immer schwierig. Ich glaube, wahrscheinlich behauptet keiner von sich jetzt im Elfenbeinturm zu sitzen.
Nee, tatsächlich, also Ausbildung ist bei uns schon irgendwie so ein bisschen so Gemeinschaftsaufgabe.
Ich bin da jetzt in der wirklich strukturierten Ausbildung von Auszubildenden gar nicht so tief integriert bei Mittwald.
Was aber jetzt natürlich nicht heißt, dass ich jetzt nicht ab und an mal irgendwie einzelne Trainingsblöcke so innerbetrieblich mache, die jetzt aber nicht unbedingt nur auf Auszubildende zugeschnitten sind, sondern das ist eher so auf das gesamte innerbetriebliche Weiterbildungsprogramm zugeschnitten.
Also ihr macht auch intern mal so Sachen, das interessiert mich persönlich auch immer, wie man sich so austauscht mit auch unter den Kollegen und so, dass ihr mal so einen, ich weiß nicht, ich hab mal so einen Begriff gehört, Lunch and Learn, da setzt man sich mal eben für eine Stunde zusammen, hält so ein paar Vorträge oder tauscht sich über ein Thema aus. Macht ihr sowas auch bei Mittwald?
Das ist witzig, dass du fragst danach tatsächlich. Wir haben gerade, wann war es, heute ist Dienstag, gerade vorgestern, am Samstag, einen Barcamp gemacht intern.
Wir sind als Unternehmen ja auch relativ viel auf allen möglichen Konferenzen und sowas unterwegs, um auch in Kontakt mit den ganzen Open-Source-Communities zu bleiben.
Und was man da relativ häufig findet, ist, dass die Leute halt irgendwelche Barcamps veranstalten, wo ja Leute einfach zusammenkommen und sich dann im Grunde in Selbstorganisationen irgendwie dann spontan irgendwie so ein kleines Konferenzprogramm zusammenzustellen.
Und wir haben uns irgendwann mal gesagt, ja, das ist ja ganz cool, jetzt irgendwie auf dem WordPress-Camp so zu sein und da irgendwie mitzumachen, aber könnte man das nicht auch mal selber machen, weil wir jetzt ja auch schon 150 Leute sind.
Und wir haben da von der Zeit mit angefangen und fanden das dann auch dann tatsächlich ganz cool, als wir das durchgezogen haben. Und seitdem machen wir das regelmäßig.
Ich hab das auch schon mal vorgeschlagen bei meinen Kollegen, da ist immer so ein bisschen die Befürchtung, ja Mensch, und was ist, wenn wir keine Themen finden? Hat das gut funktioniert bei euch, oder?
Man findet immer irgendwas. Ja, also selbst erfahrungsgemäß, wenn es halt sonst wirklich nichts Neues gibt, ich hab mittlerweile auch so ein relativ vielfältiges Repertoire an Themen, die ich einfach so spontan mal irgendwie raushauen kann.
Und falls halt sonst keiner was hat, dann gräbst du halt irgendeine alte Klotte aus deiner PowerPoint-Kiste nochmal wieder aus und es finden sich immer noch 30 Leute, die es noch nicht gehört haben. Also du kriegst so einen Tag schon voll, auf jeden Fall.
Ja, ich glaube, ich nehme das auch nochmal mit als Anregung und das wirst du auch nochmal immer probieren. Ich weiß jetzt gar nicht, ob du das schon erzählt hast, aber wie viele Software-Entwickler habt ihr überhaupt bei Mittwald? Wovon reden wir da?
Das müsste sich so in der Größenordnung insgesamt 20 bewegen. 20, 25.
Da hat man natürlich auch schon einen gewissen unterschiedlichen Erfahrungsschatz und kann sich auch über solche Themen austauschen.
Das ist ja schon, ich sag mal, so eine kritische Menge nicht, aber auf jeden Fall genug, wo man sich untereinander austauschen kann.
Das ist ja schon mal cool.
Wobei, wenn wir jetzt so ein Barcamp oder sowas intern machen, das ist dann wirklich fürs Gesamtunternehmen.
Also das ist jetzt nicht, das ist komplett offen.
Ah, okay, gut. Also auch mit Fachlichkeit und allem, was dazugehört und ich weiß nicht, Support oder…
Mit allem, was dazugehört, genau.
Also das WIC ist so eine, ich sag mal, so eine offizielle Firmenveranstaltung, wo man dann so ein bisschen mal über alles redet, wofür man im Arbeitsalltag vielleicht keine Zeit findet.
Genau, deswegen auch am Wochenende, das ist halt immer so, das ist natürlich dann immer so die Sache, ob die Leute dazu bereit sind.
Hat sich bei uns herausgestellt, sie sind's, also das klappt.
Kommt natürlich dann auch so ein bisschen auf die Firmenkultur an, wie sowas ankommt.
Erfahrungsgemäß, wir hatten irgendwie so ein bisschen Sorge, wenn man das am Wochenende macht, kommen die Leute dann auch tatsächlich oder sagen die, bleib mir weg mit sowas.
Das hat sich als unberechtigt herausgestellt, die Sorge, so im Nachhinein, weil sich das eigentlich bisher immer ganz solider Teilnahme erfreut hat, solche Veranstaltungen.
Aber das kommt wahrscheinlich auch so ein bisschen auf die Firmenkultur an, ob und wie gut sowas dann funktioniert, gerade am Wochenende.
Ja, ganz bestimmt, das glaube ich sofort. Es gibt bestimmt Unternehmen, wo das einfach so ganz normal ist, dass man auch nochmal ein bisschen Spaß zusammen hat.
Ich glaube, das passt ganz gut, weil so ein Barcamp ist ja jetzt nicht unbedingt so das Tagesgeschäft, was man abarbeiten muss.
Das ist irgendwie eine lockere Runde, sage ich jetzt mal und kann ja auch Spaß machen.
Auf jeden Fall, das ist ja auch eines der viele dabei.
Wir haben auch immer so einen gewissen Anteil an Off-Topic-Themen dabei, die jetzt irgendwie so mit dem Handwerk an sich gar nichts zu tun haben.
Irgendwie auf dem letzten Barcamp hatten wir einen Kollegen dabei, der einfach Fotos von seinem letzten Urlaub gezeigt hat in großer Runde und irgendwie ein bisschen davon erzählt hat.
Ja, und für sowas ist dann halt auch Luft. Das lockert das Ganze dann nochmal ein bisschen auf.
Ja, dann geht es noch ein bisschen in die Richtung Fort- und Weiterbildung.
Das soll ja auch so dienen, dass die Leute sich untereinander ein bisschen austauschen und ja, letztlich auch vielleicht ein bisschen was da für das eigene Tagesgeschäft auch wieder mitnehmen.
Hast du sonst irgendwie Empfehlungen, beziehungsweise wie bildest du dich zum Beispiel selbst weiter?
Mein persönlicher Hintergrund ist natürlich immer, hast du zum Beispiel auch mal irgendwie so ein Buch gelesen, was du weiter empfehlen kannst?
Ich finde es ja immer ganz wichtig, dass man sich zum Beispiel, gerade wenn man so ein komplexes Thema hat, wie vielleicht Docker oder so, sich erstmal mit so einem schönen, dicken Wälzer hinsetzt und das mal schön durcharbeitet.
Ich weiß nicht, wie gehst du da vor?
Komplett anders tatsächlich. Ich muss jetzt leider gestehen, jeder Mensch lernt ja irgendwie anders am besten.
Und ich bin selber überhaupt nicht der Buchlerner. Was ich mache, wenn ich mich in irgendein neues Thema einarbeiten möchte, ist, dass ich einfach anfange irgendwo mit.
Und das fängt meistens irgendwie damit an, dass ich vielleicht mal irgendwie das Tutorial durchklicke, irgendwie so vom offiziellen Projekt.
Und dann versuche ich von da an irgendwie auf eigenen Beinen weiter zu humpeln dann meistens und versuche dann quasi hands on mich irgendwie in so ein Thema einzuarbeiten.
Ich habe für mich selber gemerkt, das funktioniert für mich besser, als wenn ich jetzt irgendwie ein Buch durchexerziere.
Also dann wird mir irgendwann langweilig und dann lege ich das beiseite und dann ist auch wieder nichts draus geworden.
Aber wie gesagt, das ist halt für jeden unterschiedlich.
Ja, absolut. Aber ich hatte ja auch schon ein paar Gäste, die das genauso sehen, die gesagt haben, ja, gehen wir bloß weg mit Büchern, hier, ich weiß nicht, YouTube-Tutorials oder wie.
Und das finde ich auch völlig richtig. Also ich sehe es auch bei meinen eigenen Azubis, die haben auch ganz unterschiedliche, ich sag mal, Vorlieben.
Der eine liest eher, der andere hört sich vielleicht wirklich Videos an oder guckt sich Videos an.
So, absolut. Ich will das gar nicht in Frage stellen, sonst was. Ich bin eher so der klassische, da muss man doch mal ein Buch drüber gelesen haben, dann kennt man sich auch aus.
Für mich funktioniert das immer ganz gut. Ja, war schön zu hören, dass das auch anders geht auf jeden Fall.
Sehr gut. Aber trotzdem noch eine konkrete Frage zu einem Buch. Ich weiß nicht, vielleicht hast du ja irgendwann mal ein Buch über IT gelesen, vielleicht wurdest du im Studium gezwungen.
Hast du vielleicht irgendein All-Time-Favorite, wo du sagst, Mensch, hier, jeder IT-Azubi oder Anwendungsentwickler-Azubi muss das Buch gelesen haben.
Wenn ich mich auf eins festlegen müsste, dann würde ich fast sagen Clean Coder von Robert Martin.
Aber Clean Coder, nicht Clean Code, sondern dieses zweite Ding von ihm.
Genau. Das fand ich tatsächlich ein sehr schönes Buch, gerade weil es sich nicht auf irgendwelche fachlichen Kenntnisse oder sowas bezieht, sondern einfach so auf die persönlichen Eigenarten, die man als professioneller Softwareentwickler irgendwie an den Tag legen sollte.
Kennst du das Buch?
Ja, ich habe es tatsächlich auch gelesen. Ich habe jetzt gerade Clean Code, dann Clean Coder und jetzt gibt es da noch Clean Architecture, hat er jetzt gerade rausgebracht vor zwei, drei Monaten oder so.
Das ist eigentlich runtergeladen, aber noch nicht gelesen. Aber das steht als nächstes dann an.
Ansonsten von Uncle Bob lese ich grundsätzlich alles. Das ist ja hier der Meister. Würde alles weiterempfehlen.
Auf jeden Fall. Auf jeden Fall.
Sehr schön. Okay, dann hätte ich so als letzte Frage eigentlich nur noch, ob wir vielleicht irgendwas vergessen haben. Willst du noch irgendwas erzählen zu Docker, zu ich-weiß-es-nicht, Clean Coder oder sonst was? Oder sind wir sonst durch mit den Themen?
Ich glaube, wir haben das Thema ganz gut erschlagen. Also ich habe jetzt zumindest nicht das Gefühl, dass irgendwas total Wichtiges auf der Strecke geblieben wäre.
Okay, das freut mich. Sehr gut. Ja, dann zuletzt die wichtige Frage, wenn Leute mit dir Kontakt aufnehmen wollen, weil sie noch mehr über Docker lernen wollen oder sich beim Mitwalt bewerben oder wie auch immer, wie können sie dich am besten erreichen?
Genau, ich habe eine Webseite. Da würde ich dir etwa nochmal den Link schicken, dass du das irgendwie beim Podcast oder so mit verlinken kannst. Genau, ich habe ansonsten noch ein Gitterprofil, falls die Leute mal schauen wollen, was ich irgendwie so programmiere, wenn ich irgendwie gerade nicht bei Mitwalt sitze. Da sind irgendwie so ein paar Hobbyprojekte drauf.
Und genau, falls jemand jetzt sagt, Mitwalt klingt total geil, da will ich unbedingt mal reinschauen, kann ich da natürlich auch noch einen entsprechenden Link zur Verfügung stellen.
Perfekt. Magst du trotzdem nochmal einmal die Websites nennen? Denn es gibt auch viele Leute, die hören das bestimmt nur und gehen dann gar nicht auf die Shownotes. Aber wenn sie das trotzdem dann eintippen wollen, wie lauten denn die Links?
Genau, da kannst du gucken auf www.martin-helmig.de und dann auf github.com slash martin-helmig. Und für die Leute, die sagen, Mitwalt klingt total geil, ich will mehr wissen, karriere.mitwalt.de.
Okay, dann haben wir eigentlich alles, was wir wissen müssen. Ich hoffe, du kriegst noch ein bisschen Feedback vielleicht zum Podcast. Also ich habe mich sehr gefreut, dass wir uns so lange, so intensiv über Docker unterhalten haben und auch die ganzen anderen Themen.
Also für mich war es wirklich sehr spannend. Ich habe viel mitgenommen. Ich hoffe, das geht den Zuhörern auch so. Und ja, da bleibt mir eigentlich nur noch zu sagen, vielen Dank, dass du dir die Zeit genommen hast. Und ja, danke für das interessante Gespräch.
Ja, dafür nicht. Sehr gerne, Stefan.
So, das war mein Interview mit Martin Helmig. Ich hoffe, es hat dir genauso gefallen wie mir. Ich habe einiges mitgenommen rund um Docker. Ich habe es bislang noch nicht selber in der Praxis eingesetzt und mir einfach auch nur theoretisches Wissen dazu angeeignet.
Und ich fand es sehr interessant zu hören, was ein Mann der Praxis damit denn im täglichen Geschäft macht. Also mich persönlich hat es viel weitergebracht und ich fand, es war ein sehr angenehmes Gespräch. Ich hoffe, du konntest auch einiges mitnehmen.
Natürlich weiß niemand, wann das Thema Docker und Containerisierung denn vielleicht auch mal Einzug in die IHK-Prüfung hält. Aber das ist definitiv ein Thema, was uns allein in der Praxis ja auf jeder Konferenz begegnet. Und das ist schon fast zum Standard geworden.
Zumindest auch gerade im Java-Umfeld wird die Containerisierung sehr stark, auch gerade in Bezug auf Microservices eingesetzt. Von daher, es war an der Zeit, dass wir hier uns darüber mal intensiv unterhalten.
Und ich finde, das hat heute sehr gut geklappt. Wir freuen uns natürlich auf dein Feedback. Also wenn du noch irgendwelche Fragen hast, Anregungen, egal ob an mich oder an Martin, dann schreib uns gerne an.
Die Shownotes zur Episode, wo du uns auch kontaktieren kannst und die Kontaktdaten auch findest, die sind wie immer zu erreichen unter anwendungsentwicklerpodcast.de slash 121 für die 121.
Wir würden uns über dein Feedback freuen. Also hau in die Tasten und schreib uns deine Kommentare. Wir freuen uns darüber.
Da wir meine angepeilte Zeit von einer halben Stunde heute weit überschritten haben, was auch überhaupt nicht schlimm ist, denn das Thema ist ja wirklich super spannend, höre ich jetzt aber auf zu quatschen und wir hören uns dann beim nächsten Mal.
Also vielen Dank fürs Zuhören und bis zum nächsten Mal. Tschüss!
Untertitel der Amara.org-Community









Wir schreiben das Jahr 2025 – sieben Jahre sind seit der Veröffentlichung dieser Folge vergangen. Gestern kam sie über den Newsletter als Hinweis und zum ersten Mal seit ich den Podcast hier höre, dachte ich: Oha… Das war diesmal leider nicht ganz so hilfreich.
Das Thema hat in den letzten Jahren nochmal ordentlich an Fahrt aufgenommen – da wäre ein Remake oder Update echt spannend und absolut gerechtfertigt.