Virtualisierung mit Docker als Alternative

Virtualisierung mit Docker

Traditionell wird Software meist nur für ein bestimmtes System entwickelt. Themen wie Skalierbarkeit, Hochverfügbarkeit und Portabilität sind allerdings mittlerweile so wichtig wie nie und sollten daher schon während der Entwicklung beachtet werden. Da sich Servertechnologien und Infrastrukturen ständig weiterentwickeln und auf unterschiedlichen Hard- und Softwarekonfigurationen beruhen, lassen sich heutige Anwendungen nicht mehr ohne weiteres auf ein anderes System verschieben. Um diesen Anforderungen gerecht zu werden hat sich die Containertechnologie Docker etabliert, mit der sich Software leichter über unterschiedliche Plattformen und Infrastrukturen hinweg bewegen lässt.

Dockercontainer als Alternative zur klassischen Virtualisierung

Dockersoftware ist Open-Source und organisiert die Bereitstellung von Applikationen in einem sogenannten Container. Die Bereitstellung der Softwareanwendungen erfolgt dabei automatisch und umfasst alles, was notwendig ist, um die Anwendung zum Laufen zu bringen. Die Dockercontainer funktionieren tatsächlich ganz ähnlich wie das bekannte Konzept aus der physischen Transportwirtschaft für Waren. Ein Dockercontainer fasst Waren unterschiedlicher Art zusammen und transportiert diese gemeinsam, wodurch sich ein hoher Effizienzgewinn ergibt gegenüber einem Einzeltransport jeder Warenart. Dieses Prinzip wird mit dem Dockeransatz auf den Bereich der Softwareentwicklung übertragen. Mit dem Dockerkonzept ist es möglich, Applikationen viel schneller zwischen verschiedenen Systemen zu portieren, was bei Cloud- Anwendungen immer wieder notwendig ist.

Was ist der Vorteil der Container gegenüber einer Virtualisierung?

Der entscheidende Vorteil von Dockercontainern besteht darin, dass sich Ressourcen wie etwa die Rechenleistung des Hauptprozessors oder der Arbeitsspeicher eines Systems nutzen lassen, ohne dass dafür eine virtuelle Maschine gestartet werden müsste. Damit ist der Containeransatz deutlich Ressourcen-schonender. Um das möglich zu machen, greift die Dockersoftware auf den Linux-Kernel zurück und betreibt die Applikationen darüber hinaus autonom vom Dateisystem, von den laufenden Prozessen und auch vom Netzwerk des jeweiligen Systems. Diese Unabhängigkeit ist der Grund dafür, weshalb sich die Anwendungen beim Dockerkonzept einfacher zwischen Systemen verschieben lassen. Die Abhängigkeiten wie zum Beispiel Bibliotheken, auf die die Software zugreifen können muss, werden in den virtuellen Container gekapselt. Der Entwickler arbeitet hier also im Prinzip mit einer Art virtuellem Betriebssystem. Der Containeransatz geht damit einen Schritt weiter als die Virtualisierung: Während die Virtualisierung eine Abstraktionsebene zu einer einzelnen physikalischen Plattform schafft, erlauben die Dockercontainer nun das Verschieben zwischen solchen physikalischen Plattformen. Das Containerkonzept ist damit eine konsequente Weiterentwicklung des Virtualisierungsansatzes.

Ein weiterer Vorteil der Paketierung von Anwendungen besteht in der geringeren Größe. Einzelne Containerkomponenten sind deutlich kleiner als eine vergleichbare virtuelle Maschine. Mehrfach vorkommende Bestandteile der Anwendungen werden wiederverwendet, statt in jeder virtuellen Maschine erneut bereitgestellt werden zu müssen. Dadurch verringert sich die resultierende Größe deutlich.

Geringerer Konfigurationsaufwand

Ein Problem bei der Bereitstellung von Software auf neuen Systemen besteht in der Vielzahl an Abhängigkeiten. Eine Software ist auf einem System in der Regel nicht lauffähig solange, bis eine entsprechende Konfiguration vorgenommen wurde. Dazu gehört zum Beispiel, dass Datenbanken eingerichtet werden, auf die die Anwendung zugreifen kann und dass zusätzliche Software installiert wird, von der die Anwendung abhängig ist. Beim Dockersansatz fällt alles das weg, die Software steht auf dem neuen System sofort zur Verfügung. Das ist besonders hilfreich bei der Einbindung von neuen Mitarbeitern, da diese nicht umständlich in komplexe Setupprozeduren eingearbeitet werden müssen. Die Abhängigkeiten werden in klein paketierten Dockerimages zur Verfügung gestellt und gemeinsam mit der betreffenden Applikation ausgeliefert. Jeder, der über einen entsprechenden Dockereditor verfügt, kann eine solche Anwendung sofort auf seinem System kompilieren und debuggen.

In diesen Bereichen kommt das Dockerkonzept zur Anwendung

Docker ist immer dann sinnvoll, wenn die Software von einer Umgebung in eine andere umziehen können muss. Das klassische Beispiel ist der Softwareentwickler, der auf seinem Laptop arbeitet und die Software auf ein Test-System verschieben möchten. Dank Dockercontainer schafft der Entwickler für seine Software eine stabile Ablaufumgebung und kann die Software sofort an eine andere Abteilung oder auch an ein anderes Unternehmen abgeben. Denkbar ist auch das Verschieben der Software in ein Data Center oder in eine öffentlich zugängliche Cloud. Es ergibt sich hierbei von selbst, dass die Software Plattform-unabhängig funktionieren können muss. Die Verwendung von Containern macht das möglich. Es ist denkbar, die gleiche Umgebung eines Produktiv-Servers auch auf einem lokalen System während der Entwicklung zu verwenden. Docker kann im Rahmen der Continuous Integration und der Continuous Delivery eingesetzt werden und es ergeben sich Verwendungsmöglichkeiten in Multi-Cloud-Anwendungen. Letzteres wäre etwa dann der Fall, wenn die Software zwischen mehreren Cloud-Plattformen umziehen können soll. Interessant sind Dockercontainer dabei für Unternehmen jeder Größe. In großen Unternehmen kommen sie zum Beispiel in sogenannten Private Clustern zum Einsatz, die sich aus mehreren Maschinen zusammensetzen. Insgesamt ergeben sich damit in der Praxis breite Anwendungsmöglichkeiten.

Vorteile des Dockerprinzips im Rahmen der Continuous Integration und für das Testen von Microservices

Bei der Continuous Integration ist die Entwicklung einer Software und deren Überprüfung in der Testabteilung eng miteinander verzahnt. Statt die Software fertig zu entwickeln und dann in einem zweiten Schritt an die Qualitätsprüfung zu übergeben, wechselt der Programmcode ständig zwischen dem Entwickler und den Testern hin und her. Bei einem solchen Szenario liegen die Vorteile des Dockeransatzes auf der Hand. Durch die Abkapselung der Umgebung, in der die Software lauffähig ist, erfüllen Dockercontainer von Haus aus alle Voraussetzungen, die für die Verwendung eines Projekts im Rahmen der Continuous Integration erfüllt sein müssen. Das kann genutzt werden, um zum Beispiel Microservices und damit kleinste, voneinander unabhängige Prozesse einer größeren Software testen zu können. Die Software wird dazu in Units zerlegt, die unabhängig von den Funktionen anderer Programmteile getestet werden können.

Der Dockerhub im Überblick

Die Dockerumgebung bietet dem Entwickler neben den Dockercontainern weitere Werkzeuge für seine Arbeit mit den virtuellen Betriebssystemen. Dazu gehört insbesondere der Dockerhub, ein Online-Dienst, der das Hochladen von Images durch die Benutzer erlaubt. Der Online-Dienst setzt sich aus einem öffentlichen Teil und einem privaten Teil zusammen. Der private Teil bietet sich zum Beispiel für die Verwendung durch Unternehmen an: Der Online-Dienst kann firmenintern genutzt werden, um Anwendungen auszutauschen und gemeinsam daran zu arbeiten. Der öffentliche Teil wiederum bietet sich zum Beispiel für den Austausch von Open-Source-Projekten an. Neben dem Hochladen von Images ist auch das Anlegen von Repositorys möglich. Damit die Anwender sich jederzeit über den aktuellen Stand einer Software informieren können, ist in den Dockerdienst bereits eine Versionsverwaltung eingebaut.