Bei Docker handelt es sich um eine Softwareplattform, mit der Entwickler schnell und einfach Anwendungen erstellen, testen und Nutzern bereitstellen können. Mit Docker können Entwickler Software in standardisierte Einheiten, die sogenannten Container, verpacken. Diese Container beinhalten alles, was zum Ausführen der verpackten Software benötigt wird, einschließlich aller Bibliotheken, der benötigten Laufzeitumgebung, Systemtools und Code. Mittels Docker lassen sich Anwendungen schnell und ohne größeren Aufwand in jeder Umgebung bereitstellen und nach Bedarf skalieren.

Docker im Detail

Bei Docker handelt es sich um eine innovative Softwarelösung, welche die Virtualisierung von containerisierten Anwendungen ermöglicht. Anwendungen können mit all ihren Abhängigkeiten in ein Image verpackt werden. Durch den Einsatz einer speziellen Engine, kann die so verpackte Software in einem Docker-Container plattformunabhängig ausgeführt werden. Die dockerisierte Anwendung ist bis auf einige wenige Schnittstellen zum Betriebssystem vollständig isoliert. Aus einem einzelnen Image lassen sich beliebig viele Container erstellen und parallel betrieben. Aus diesem Grund eignet sich Docker besonders gut, um cloudnative Anwendungen und Dienste bereitzustellen.

Die Container-Virtualisierungstechnologie ist keine neue Technik und wird im Linux-/Unix-Bereich schon seit vielen Jahren äußerst erfolgreich eingesetzt. Neben Docker gibt es auch eine Vielzahl ähnlicher Lösungen, die auf eine ähnliche Weise versuchen, die bestehenden Skalierungs- und Virtualisierungs-Probleme zu lösen. Docker ist jedoch der unangefochtene Spitzenreiter, um die Arbeit mit Containern möglichst unkompliziert und intuitiv zu gestalten.

Container im Vergleich zu virtuellen Maschinen

Im Vergleich zu Containern sind Virtuelle Maschinen (VMs) wahre Schwergewichte. Virtuelle Maschinen enthalten neben der simulierten Hardware und dem Hypervisor auch eine Kopie des Betriebssystems inklusive aller installierten Programme und Abhängigkeiten. Da sie eine große Menge an Informationen beinhalten, verbrauchen sie dementsprechend viel an Ressourcen und Speicherplatz. Nichtsdestotrotz haben virtuelle Maschinen nach wie vor einige Vorteile gegenüber Docker und Co. Insbesondere in Sachen Isolation bieten VMs eine viel höhere Sicherheit in den unteren Isolierungsschichten.

Auch im Fall, wenn auf einem Server mehrere virtuelle Maschinen mit jeweils unterschiedlichen Hardware-Konfigurationen oder Betriebssystemen bereitgestellt werden sollen, kommen virtuelle Server zum Einsatz. Im Vergleich hierzu besitzt ein Docker-Container kein eigenes OS und auch keine simulierte Hardware. Containerisierte Anwendungen greifen auf das System des darunterliegenden Hosts zu, sodass sich alle Container die Ressourcen des Betriebssystems und der Hardware teilen.

Mehr zum Thema:
Was sind DevOps?

 

Ein Container ist also nur mit den nötigsten Informationen ausgestattet, die von den installierten Anwendungen tatsächlich auch benötigt werden. Neben der auszuführenden Anwendung selbst sind die Container in vielen Fällen auch mit spezifischen Frameworks und Bibliotheken versehen, auf denen die jeweilige Anwendung aufbaut. Konkret bedeutet das, dass ein Container so viel Informationen enthält, wie es nötigt ist.

Während eine traditionelle VM Hardware und Betriebssystem simuliert, teilt eine containerisierte Anwendung alle Ressourcen via Docker Engine mit dem darunterliegenden Host. Ein Container ist außerdem in der Lage, bei Bedarf auf externe Bibliotheken zuzugreifen. So lassen sich beispielsweise Abhängigkeiten auslagern, die von mehreren Docker-Containern benötigt werden, wodurch die Größe der Container nochmals reduziert wird.

Docker: Hochskalierbar und performant

Die Docker-Engine stellt das Herzstück der Containerisierung bei Docker dar. Die Software fungiert als eine Art Schnittstelle zwischen den Ressourcen des Host-Systems und den darauf ausgeführten Containern. Container können auf jedem System ausgeführt werden, auf dem die Docker-Engine installiert ist. Die Containertechnologie wurde ursprünglich für den Einsatz auf Linux-Systemen entwickelt. Da Microsoft in den letzten Jahren kräftig in Docker investiert und sich auch intensiv an der Weiterentwicklung beteiligt hat, kann die Containertechnologie mittlerweile auch auf allen modernen Windows-Systemen genutzt werden.

Im Vergleich zu VMs sind die containerisierten Images sehr schlank. In modernen Cloudumgebungen bringt das eine Vielzahl unterschiedlicher Vorteile mit sich. So können beispielsweise auf einem virtuellen Server deutlich mehr Container-Instanzen betrieben werden. Außerdem starten die Container viel schneller als virtuelle Maschinen, was eine viel besserer Flexibilität und Skalierung mit sich bringt.

Docker kann relativ einfach in bestehende DevOps-Systeme wie beispielsweise Puppet oder Ansible eingebunden werden, was die Verwaltung und Bereitstellung von Containern zusätzlich vereinfacht. Ein bedeutender Vorteil von Docker spiegelt sich in der Tatsache wider, dass sich die Container per Skript steuern lassen. Ein Docker-File ist mit allen notwendigen Informationen versehen, um einen Container selbständig starten zu können. Aus diesem Grund eignet sich die Container-Plattform ideal, um in der Cloud betrieben zu werden und automatisch zu skalieren. Außerdem lassen sich die Container über eine zentrale Repository schnell und unkompliziert verwalten.

Großer Einfluss in der Softwareentwicklung

In der modernen Softwareentwicklung bieten isolierte Container eine Vielzahl unterschiedlicher Vorteile. Softwareprojekte können so beispielsweise unabhängig voneinander entwickelt werden, wodurch die Arbeit an großen Projekten wesentlich erleichtert wird. Durch den Einsatz von Containern geht das Packen und das Ausliefern von Anwendungen schnell und einfach vonstatten, da sie prinzipiell in jeder Umgebung mit Docker Engine sofort einsatzbereit sind. Dies ist insbesondere für die beiden Entwicklungsansätze Continuous Deployment und Continuous Integration interessant, da jeder Softwareentwickler selbständig an seinem isolierten Teil des Projekts arbeiten kann. Hinzu kommt noch, dass sich über Docker Container ein Projekt schnell und unkompliziert mit Kollegen teilen und unabhängig vom jeweiligen Client verwenden lässt. Da ein Container in einer isolierten Umgebung ausgeführt wird, lassen sich verschiedene Umgebungen ohne größeren Aufwand simulieren.

Mehr zum Thema:
Was ist ein Exploit?
Letzte Artikel von Daniel Faust (Alle anzeigen)