Martin Helmich über Docker und Kubernetes – Anwendungsentwickler-Podcast #121

Ein spannendes Interview mit Martin Helmich zum Thema Docker gibt es in der einhunderteinundzwanzigsten Episode des Anwendungsentwickler-Podcasts.

Probeabo bei Audible (Affiliate)

Allgemeines zur Person

  • Wie ist dein Name und wo arbeitest du?
  • 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?
  • 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?
  • 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?
    • rkt, LXC, LXD. Aber Docker ist der Platzhirsch.

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?
  • 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

Links

Polyglot Clean Code Developer
About the Author
Ausbildungsleiter für Fachinformatiker Anwendungsentwicklung und Systemintegration, IHK-Prüfer und Hochschuldozent für Programmierung und Software-Engineering.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax