Docker und PaaS

Zusammen perfekt!

In der IT-Welt hat sich Docker mittlerweile als de facto Standard etabliert und ist aufgrund seiner Funktionsweise in der modernen Entwicklungsumgebung enorm wichtig. Es ist eine freie Software, die von Docker, Inc. entwickelt wurde. Docker basiert auf Linux-Containern, in denen einzelne Dienste isoliert werden. Es ist also eine Plattform zum Verpacken, Verteilen und Ausführen von Anwendungen. Dies wird vereinfacht durch Eigenschaften wie bspw. der Betriebssystemunabhängigkeit den Datentransport.

Warum sollte man in diesem Zusammenhang auch über Platform-as-a-Service (PaaS) sprechen? Ein PaaS-Dienst vereinfacht den produktiv Betrieb von Anwendungen wie bspw. kritischen Datenbanksystemen und erhöht die Sicherheit, da der Cloud Provider sich um den reibungslosen Betrieb kümmert. Die Kombination von Docker und PaaS hat viele gute Gründe, die ich euch nachfolgend zeigen möchte.

Docker-Plattform

Viele Unternehmen suchen stets nach den besten Lösungen, Zeit, Kosten und vor allem Ressourcen zu sparen. Genau hier kommt Docker ins Spiel, da diese Technik eine bequeme Lösung für viele anspruchsvolle Vorgänge im Rahmen der Entwicklungsarbeiten anbietet. Docker ist eine Open-Source-Software und setzt die sogenannte Containertechnik ein. Es trennt verschiedenen Ebenen voneinander, indem Softwarekomponenten auf einem einzelnen Container separat und unabhängig laufen. Beispielsweise würden Datenbank und Webserver in verschiedenen Containern laufen.

Die Isolierung erfolgt durch die Mechanismen des Linux Kernel wie Linux-Namespace und -Control Groups (Linux-Cgroups). Linux-Namespace personalisieren die Ressourcen wie Dateien, Prozesse, Netzwerkschnittstellen, Hostname usw. auf dem System. Linux-Cgroups hat die Aufgabe, die Menge der Ressourcen wie CPU, Arbeitsspeicher, Netzwerkbandbreite usw. in beteiligten Prozessen zu beschränken.

Die Isolierung erleichtert den Umzug und die Reproduktion von Diensten, da man Einstellungen nicht mehr händisch konfigurieren muss. Sobald ein Docker-Image und die Laufzeitumgebung hinterlegt sind, kann diese Umgebung auch mit weiteren Personen geteilt werden, ohne dass die Umgebung erst neu aufgesetzt werden muss. Die weiteren Schritte können einfach darauf aufbauen.

Unterschied zur Virtualisierung

Bei virtuellen Maschinen handelt es sich um unabhängige Compute-Einheiten, die auf einem Hardwaresystem simuliert werden. So hat jedes System ein unabhängiges Betriebssystem, welches auf die Anforderungen abgestimmt ist. Das heißt, dass das Betriebssystem auf der Server Hardware des Host-Systems läuft. Hier kommt ein sogenannter Hypervisor für Abstraktion von Hardware als zusätzliche Schicht für virtuelle Systeme zum Einsatz. Weiterhin nimmt die Anpassung der Umgebung jeder einzelnen virtuellen Maschine Zeit in Anspruch.

Nachteile der Virtualisierung

  • schlechtere Performance als bei physisch vorhandener Hardware
  • Verbraucht viele Ressourcen wie Speicher im RAM und auf der Festplatte, da jedes System ein eigene Instanz des Betriebssystems hat.

Somit sind die virtuellen Maschinen in Betrieb sehr teuer, zeitaufwendig und komplizierter. Hier bietet Docker eine bessere Technologie.
Mehr zur Virtualisierung findest du in unserem Glossarbeitrag Was ist Virtualisierung?.

Docker-Workflow

Wie bereits angedeutet, stellt Docker eine gute Alternative zur Virtualisierung dar, indem Container-Technologien eingesetzt werden. Docker-Container haben ein eigenes Dateisystem und teilen sich den Kernel des Betriebssystem auf dem Docker-Host. Das heißt Prozesse, die auf Containern laufen, werden auf Prozesstabellen des Betriebssystems angezeigt. Die Container werden von dem sogenannten Docker-Daemon verwaltet.

Wenn ein Docker-Container startet, wird die erste Version vom Dateisystem, das Docker-Image, erzeugt. Das Docker-Image öffnet eine weitere Schicht, in die der Container seine eigene Daten schreibt. Docker-Images bestehen aus Programmen, Bibliotheken und Daten. Aus dem Docker-Image können viele beliebige Container erzeugt werden.

Das Dateisystem enthält das sogenannte Dockerfile. Das Dockerfile ist ein Shell-Skript, das die benötigte Software aus z.B. Docker-Hub installiert. Damit beschreibt es, wie ein Docker-Image – auch Basis-Image genannt wird – erzeugt werden kann. Ein besonderer Vorteil von Dockerfile ist die Einfachheit seines Erstellens, sodass man es mit wenigen Befehlen (FROM, RUN, CMD, COPY, EXPOSE) hinterlegen kann. Anschließend kann das Docker-Image exportiert und in eine Docker-Registry gespeichert werden.

Im Gegensatz zur Virtualisierung existiert keine Emulationsschicht bzw. kein Hypervisor. Weiterhin kommt hinzu, dass jeder Container ein eigenes Netzwerk-Interface mit eigene IP-Adresse hat. Das ist nur vom Docker internen Netzwerk erreichbar.

Einerseits kann deshalb derselbe Port in jedem Docker-Container verwendet werden, andererseits können aber auch viele beliebigen Ports benutzt werden. Das Netzwerkinterface befindet sich in einem Subnetz, in dem alle Container enthalten sind. Die Standard-Konfiguration vom Subnetz erlaubt keinen Zugriff auf den Docker von Außen. Die mögliche Lösung hierfür ist, den Port des Docker-Containers an den Port des Docker-Hosts zu binden.

Vorteile von Docker

Alles in allem kann der Docker-Workflow bei vielen Unternehmen die Prozesse, besonders bei DevOps-Ansätzen erleichtern. Weiterhin vereinfacht Docker durch die Nutzung der Registry als Übergabepunkt die Kommunikation zwischen den Entwickler- und Administratoren Teams oder zwischen verschiedenen Entwicklerteams desselben Projekts. Sie können sich vorrangig um die Entwicklung der Software kümmern, ohne sich großartig mit der Bereitstellung der Umgebung auseinandersetzen zu müssen.

Dank der Docker Technologie muss du dir beispielsweise keine Gedanken mehr darüber machen, welche Linux-Distribution du verwendest, welche Bibliotheksversion benutzt wird oder wie die Software kompiliert oder ausgeliefert wird.

Platform-as-a-Service

Innerhalb eines PaaS-Dienstes haben die Kunden die Gelegenheit eine Anwendung zu erstellen und auf der vom Cloud-Provider bereitgestellten Laufzeitumgebung, welche per API angesprochen werden können, auszuführen. Genauer betrachtet, kümmert sich der Cloud-Provider um den reibungslosen Ablauf, die Verwaltung und die Verfügbarkeit des angebotenen Dienstes.

Was sind die Vorteile der
Kombination Docker und PaaS?

Die Docker Technologie ist in Hinsicht auf die Isolierung des Dienstes den PaaS-Services ähnlich. Bei Beiden stehen die Applikationen im Vordergrund, und die Rolle des Betriebssystems rückt in den Hintergrund. Mit Hilfe von Docker-Containern können die Anwendungen des PaaS-Services komfortabel verteilt werden. Zusammengefasst, erstellt der Entwickler ein Image von PaaS, welches er in Registry hochlädt, sodass es für andere Personen bereitsteht. Das Image kann beliebig auf verschiedenen Rechner übertragen werden, auf denen Docker läuft. Daraufhin baut Docker spezifisch isolierten Container auf Basis des Images auf.

Wie bereits schon angedeutet, stellt die nicht Erreichbarkeit des Dockers von Außen eine kleine Herausforderung dar. Die Schwierigkeit liegt daran, dass Docker ursprünglich für IPv4 ausgelegt worden ist. Damit Docker auch per IPv6 kommuniziert, kann es im Docker Netzwerkinterface händisch eingegeben werden. Im folgenden Tutorial sind diese Schritte genau dargestellt: gridscale und Docker IPv6