Containerisierung mit Docker & Kubernetes

Containerisierung: Cloud Computing und Virtualisierung

Container-Technologie mit Docker & Kubernetes: Was sind die Ziele von Cloud-Computing und Virtualisierungs-Strategien auf Basis der Container-Technik?

Nutze alle Vorzüge der Container-Technologie & Virtualisierungs-Strategien!

Mit Cloud Computing nutzt Du die Vorzüge der Virtualisierungs-Technologie. Cloud-Technologien bieten Dir mit dem Konzept der Virtualisierung Vorteile bei der Kosten-Eeffizienz. Dazu zählt der Nutzlast-orientierte Gebrauch von Hardware und Energie. Container-Technologien und Cloud Computing können somit Green-IT unterstützen.

Optimaler Workflow für Software-Entwicklung, Deployment & Release-Management

Außerdem profitierst Du automatisierter Fehlersuche, folglich der Qualitätsverbesserung von Software sowie gesteigerter Flexibilität und einfacher Verwaltbarkeit.

Virtualisierung ermöglicht Dir eine gemeinsame Nutzung von Ressourcen einer einzigen physischen Instanz durch mehrere Benutzer und Organisationen.

Containerumgebungen als technisches Agilitäts-Prinzip

Das Virtualisierungs-Konzept ist also quasi ein technisches Agilitäts-Prinzip das darin besteht, die physische Infrastruktur von Computer- und Netzwerkressourcen in kleinere, wiederverwendbare und in höherem Maße portable und flexible Einheiten einzuteilen.

Mehr IT-Security durch isolierte Container-Umgebungen

Die Vorteile bestehen in einer effizienten Nutzung der Ressourcen und den effektiven Betrieb paralleler Systeme in einer isolierten Umgebung.

Containerisierung mit Docker & Kubernetes

Container und die Containerisierung sind eine der am stärksten, umwälzendsten Technologien, die wir seit Jahren gesehen haben somit echte Game-Changer bei der digitalen Transformation. Die am meisten genutzten und beliebtesten Container-Tools sind Docker und Kubernetes.

Infrastructure as Code per Container ist der Game Changer

Container-Technologien sind unverzichtbar: Im Zuge eines automatisierten und Code-Repository-basierten Deployments verändern Container-Technologien wie Docker und Kubernetes DevOps und Deployment-Strategien radikal. Die Container-Technologie ermöglicht uns endlich agile Release-Zyklen und leicht portable Betriebsumgebungen für Software.

Prototyping im Zusammenspiel mit Containerisierung

Prototyping verbessert, im Zusammenspiel mit Containerisierung, digitale Anwendungen signifikant und vor allem kontinuierlich. Schnell! All dies geschieht mit der Container-Technologie im Sinne einer feature-orientierten Ausrichtung von Software & Anwendungen mit dem Fokus auf die Endanwender*innen.

Container-Wissen über das Du schon bald verfügst:

Schon bald wirst Du wissen:

✅ Warum die Container-Technologie so wertvoll für Dich ist

✅ Was Container sind

✅ Wie sich Container und Virtualisierung unterscheiden

✅ Wie Container Dir dabei helfen Deine Ziele als Software-Entwickler*in, DevOps-Ingenieur*in, ProductOwner (…) zu erreichen

✅ Intention, Ziele und die Notwendigkeit der Containerisierung verstehen

✅ Docker und Kubernetes verstehen

✅ Docker installieren & die Docker CLI nutzen

Intention und Ziele der unterschiedlichen Container-Technologien verstehen

Wir möchten Dir näher bringen, welche Probleme Container und die unterschiedlichen Container-Technologien adressieren.

Verstehen, warum Container so enorm wichtig sind

Dabei wirst Du verstehen, warum Container so grundlegend wichtig sind. Du wirst dabei die technischen Details im Kontext der containerbasierten Laufzeitumgebung kennenlernen, die den längst im vollen Gang befindlichen Container-Trend ausgelöst hat.

Du wirst wissen in welchem Zusammenhang Docker und Kubernetes stehen

Du wirst danach wissen in welchem technologischen Zusammenhang Docker und Kubernetes stehen.

Wir werden auch darauf eingehen, wie sich die kürzlich Abschaffung der Unterstützung von Docker durch Kubernetes auf die Nutzung von Docker auswirkt und warum Du trotzdem unbedingt grundlegend mit Docker vertraut sein solltest.

HandsOn Docker-Container & Kubernetes-Orchestrierung

Selbstverständlich wirst Du Docker eigenständig installieren und in Betrieb nehmen können um Deine eigenen Code, so wie es sich gehört, von Deiner persönlichen Entwicklungsumgebung, über ein Remote Repository, dann als containerisierte Anwendungen zu nutzen.

Natürlich wirst Du dabei auch die grundlegenden Docker-Commands und das Docker Command Line Interface, die Docker CLI kennenlernen.

Inwiefern Kubernetes Docker ersetzt

Container-Technologie im Wandel: Möglicherweise hast Du bereits davon gelesen, dass Kubernetes in einer kommenden Version Docker als kompatible Laufzeitumgebung ablösen wird.

Diese Änderung hat gravierende Auswirkungen auf jede Betriebsumgebung die auf Basis von Containerisierung und Kubernetes arbeitet. Dazu zählt praktisch jede Cloud-Umgebung.

Du wirst schon bald verstehen, warum Kubernetes diesen Weg der Abwertung von Docker beschreitet und warum dieser Schritt auch erforderlich ist. Du kannst Dir aber ebenfalls absolut sicher seien, dass Docker immer noch der beste Weg ist, um Dich in die Container-Technologie und die damit verbunden Vorteile.

Docker bleibt eine rundum bewährte & etablierte Deployment-Strategie

Docker ist nach wie vor eine rundum bewährte und etablierte Deployment-Strategie.

Docker wird weiterhin eine Brücken-Technologie für unzählige Systeme sein und weiterhin als solche bestehen.

Entwicklungs- und Betriebsumgebungen die Container lokal ausführen müssen keinesfalls zwangsläufig eine Orchestrierungsplattform wie Kubernetes nutzen.

Deshalb ist das Konzept der Container so erfolgreich

Vielleicht hast Du schon selbst einmal in der Rolle eines(r) Software-Entwickler*in, DevOps-Ingenieur*in erlebt wie herausfordernd es sein kann Anwendung anderswo lauffähig zu bekommen. Jemand hat Dir ein Programm empfohlen oder Du bist dabei Software aus einem GitHub-Repository auf Deiner lokalen Machine zum laufen zu bekommen. Mit der Container-Technologie wird all dies lösbar und viel einfacher:

Problem und Herausforderung ist die Inbetriebnahme von Code und Anwendungen

Aber genau das, Code auf Deiner Maschine zum laufen zu bringen, will Dir “um’s verrecken” nicht gelingen. Seit unzähligen Stunden verbringst Du jetzt schon Deine wertvolle Zeit damit eine Anwendung zum Laufen zu bekommen… Du hast google bemüht und sogar fleissig die Fehlermeldungen aus deiner Konsole recherchiert. Trotzdem ist die Anwendung auf Deiner Umgebung einfach nicht lauffähig!

Ein typischer Dialog im Vor-Container-Zeitalter

Software-Entwickler*in (verweist auf ein Git-Repo): “Hier ist meine neue App. Ich habe jetzt über eine Woche entwickelt und unzählige Stunden in Tests investiert – Du darfst bist der erste User, der meine App testen darf!”

… viel viel später…

User*in: “Das funktioniert nicht! Ich bekomme Deine App bei mir nicht zum laufen!”

Software-Entwickler*in (irritiert): “Das kann nicht sein…”

User*in: “Wenn ich die Anwendung so installiere, wie Du es in der Readme.first beschrieben hast, dann erhalte ich eine Fehlermeldung, die sich auf eine fehlende Abhängigkeit in einer Bibliothek bezieht…”

Deployment Error - Coding without Containerization

Deployment Error – Coding without Containerization

Software-Entwickler*in (ratlos): “Das verstehe ich nicht. Auf meinem Rechner läuft das einwandfrei…”

Unser fiktive Dialog basiert auf Ereignissen, die sich so oder in sehr ähnlicher Weise regelmäßig in unzähligen Software-Projekten abspielen, für die Container-Technologien aus purer Ignoranz schlicht kein Thema sind…

Container eliminieren Frustrationen bei der Software-Entwicklung und Deployment

Für jeden Software-Entwickler*in ist es ein unglaublich frustrierendes Erlebnis zu erleben, dass seine Anwendung nicht lauffähig ist.

Sehr oft liegt die Ursache darin, dass eine Bibliothek oder andere Abhängigkeit, die für die Lauffähigkeit des Programms zwar auf dem PC des(r) Software-Entwickler*in vorhanden sind, nicht auf der Betriebsumgebung des Anwenders existieren.

Natürlich magst Du es an dieser Stelle als ganz einfache Lösung betrachten, diese fehlenden Komponenten schlicht nach zu installieren, aber…

…genau das ist keinesfalls der richtige Ansatz um das Problem dauerhaft zu beseitigen.

Es ist vor allem auch keine sinnvolle Strategie um das Problem dauerhaft für die große Zahl unzähliger weiterer Anwender elegant zu beseitigen.

Open Container Initiative (OCI)

Container-Technologien und Docker Container entsprechen der Spezifikation der Open Container Initiative (OCI).

Wenn Du einen Docker-Container erstellst, verwendest Du einen OCI-kompatiblen Container, der auch auf jedem Kubernetes-Cluster läuft, auf der auf einer beliebigen OCI-kompatiblen Container-Laufzeitumgebung basiert, die ebenfalls dem OCI-Standard entspricht. Auch Kubernetes ist eng nach der OCI-Spezifikation ausgerichtet.

Container-Runtime-Environment

Die Container-Runtime Environment ist eine die Laufzeitumgebung für Container und definiert einen eigenen Layer in dem ein Container betrieben und organisiert wird.

Wie viele Komponenten die einen Container-Cluster wie einen Kubernetes Cluster ausmachen, ist die Laufzeitumgebung nicht etwa Teil von Kubernetes, sondern es handelt sich um ein anzubindendes Modul, das von einem Software-Hersteller, wie jede andere Software-Komponente auch, gewartet, d.h. mit entsprechenden Updates versorgt werden muss, um dauerhaft einen reibungslosen Betrieb für einen Container Cluster zu garantieren.

Es gibt mehrere Gründe, die dazu geführt haben, Docker zu entkoppeln, die wichtigsten sind:

  • Docker enthält mehrere Teile innerhalb der ausführbaren Docker-Datei, um seine eigene Remote-API und Benutzerfreundlichkeit (UX) zu unterstützen. Kubernetes benötigt nur eine Komponente in der ausführbaren Datei, dockerd, den Laufzeitprozess, der die Container verwaltet. Alle anderen Teile der ausführbaren Datei tragen nichts zur Verwendung von Docker in einem Kubernetes-Cluster bei. Diese zusätzlichen Komponenten haben die Binärdatei aufgebläht und könnten zu zusätzlichen Fehlern, Sicherheits- oder Leistungsproblemen führen.

  • Docker ist nicht konform mit dem Container Runtime Interface (CRI)-Standard, der eingeführt wurde, um eine Reihe von Standards für die einfache Integration von Container-Laufzeiten in Kubernetes zu schaffen. Da es nicht konform ist, hatte das Kubernetes-Team zusätzliche Arbeit, die nur der Unterstützung von Docker diente.

Docker-Container zum Testen & Deployment

:information_source: Container-Technologie entwickeln & effektiv testen: Wenn es um das Testen und Entwickeln lokaler Container geht, kannst Du jederzeit gänzlich sorgenfrei Docker für Deine lokale Entwicklungsumgebung nutzen. Wenn Du einen Container mit Docker erstellst und der Container erfolgreich in Deinem Docker-Laufzeitsystem ausgeführt wird, läuft er auch ebenso problemlos auf einem Kubernetes-Cluster, der kein Docker als Laufzeitsystem verwendet.

Achtung: Kubernetes verwendet andere Container-Commands!

:warning: Die Abschaffung von Docker wird für die meisten Benutzer von Kubernetes in neuen Clustern nur geringe Auswirkungen haben.

Die Container werden weiterhin mit jeder Standardmethode ausgeführt, so wie es auch mit Docker als Container-Laufzeitumgebung der Fall wäre. Wenn Du einen Container-Cluster verwaltest, musst Du bei der Fehlersuche in einem Kubernetes-Knoten möglicherweise neue Befehle lernen. Du wirst hier keinen Docker-Befehl auf einen node anwenden können, um laufende Container zu überprüfen oder Volumes zu bereinigen usw.

Laufzeit-Umgebungen für Kubernetes

Aktuell unterstützt Kubernetes die folgenden Laufzeit-Umgebung als Ersatz für Docker:

Die Liste wird sich fortlaufend erweitern oder bereinigen, je nachdem welche Laufzeit-Umgebungen sich als führende Technologien behaupten können.

Die aktuell von Kubernetes unterstützten Runtime Environments kannst Du jederzeit unter https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md einsehen.

Da wir uns auf allgemeine Container konzentrieren und Docker als Laufzeitumgebung für die Erstellung von KinD-Clustern verwenden werden, gehen wir nicht weiter auf alternative Laufzeitcluster ein.

Mehr erfährst Du schon bald im zweiten Teil unserer Container-Serie…

Über den Autor:

Sascha Block - Rock the Prototype

Sascha Block

Ich bin Sascha Block – IT-Architekt in Hamburg und der Initiator von Rock the Prototype. Ich möchte Prototyping erlernbar und erfahrbar machen. Mit der Motivation Ideen prototypisch zu verwirklichen und Wissen rund um Software-Prototyping, Softwarearchitektur und Programmierung zu teilen, habe ich das Format und die Open-Source Initiative Rock the Prototype geschaffen.