Software-Container – Vorstellung Docker – Teil 4 / 5

Nachdem im letzten Teil der Blog-Serie über Microservices ein Exkurs zur Vorstellung von Software-Containern stattgefunden hat, durchleuchtet der vierte Teil dieser Serie die Grundlagen der Container-Implementierung Docker.

„Docker allows you to package an application with all of its dependencies into a standardized unit for software development.“

— Docker, What is Docker

Docker gehört heute zu einer der geläufigsten Container-Implementierungen und steht unter der Apache 2.0 Softwarelizenz als quelloffene Software zur freien Verfügung. Neben der Kernfunktionalität, den Betrieb von Software-Containern zu realisieren, besteht Docker aus weiteren Werkzeugen, um die Arbeit mit Software-Containern zu erleichtern. Die Entwicklung von Docker hat in einem Linux-Umfeld begonnen. Um die Kapselung von Anwendungen in Containern zu ermöglichen, verwendet Docker, ähnlich wie andere Container-Lösungsansätze, Isolationsfunktionen der Linux-Kernel. Lösungen um Docker-Container auf weiteren Plattformen, wie Microsofts Windows 10, Windows Server 2016 oder Apples macOS, zu betreiben sind ebenfalls verfügbar. Dies geschieht i. d. R. über zusätzliche Virtualisierungstechnologien wie Hyper-V oder VirtualBox.

Um die Zusammensetzung und den Betrieb von Docker-Containern zu verdeutlichen, werden anbei die zentralen Begriffe und Komponenten dieser Container-Implementierung betrachtet. Diese setzen sich aus folgenden Teilen zusammen.

Image
Ein Docker-Image entspricht einer lesbaren Container-Vorlage, auch Template genannt. Diese Vorlage beinhaltet Abhängigkeiten, um eine Anwendung innerhalb eines Docker-Containers, ausführen zu können. Dies ermöglicht häufig verwendete Abhängigkeiten für Anwendungen zu verwalten, welche in mehreren Containern zum Einsatz kommen. Dies kann z. B. ein Image sein, welches einen HTTP-Server beinhaltet. Die Zusammensetzung eines Docker-Images, bestehend aus weiteren Images, ist möglich und wird als Layering bezeichnet.

Container
Als Docker-Container wird eine beschreibbare Instanz eines Docker-Images bezeichnet. Dieser Software-Container beinhaltet, neben den Bestandteilen aus dem zugrundeliegenden Image, eine aktiv ausgeführte Anwendung. Der laufende Software-Container teilt sich, zusammen mit allen weiteren aktiven Containern, die Kernel des Host-OS.

Dockerfile
Die Dockerfile-Datei ist eine textuelle Beschreibung eines Docker-Containers. Sie gibt an, auf welchen Docker-Image der Software-Container aufsetzt und beinhaltet zusätzlich eine Folge an Steuerungskommandos. Diese können z. B. die Angabe von Umgebungsvariablen, das Erstellen von benötigten Verzeichnissen, das Kopieren von Anwendungsdaten in den Software-Container, eine Weiterleitung von Netzwerkkommunikation über definierte Schnittstellen oder zahlreiche weitere Konfigurationsmöglichkeiten sein. Insgesamt zeichnet sich die Dockerfile-Datei als eine Folge von automatisierten Abläufen aus, welche es zu tätigen gilt, um eine Anwendung innerhalb eines Software-Containers auszuführen.

Docker Compose
Docker besteht insgesamt aus mehreren Werkzeugen. Docker-Compose ist eines von ihnen. Es ermöglicht unter anderem, mithilfe einer zusätzlichen Konfigurationsdatei, die Komposition von mehreren Docker-Containern. Dies dient der Steuerung von Anwendungen, welche über mehrere Software-Container verteilt sind. Verfasst wird diese Konfigurationsdatei in der Auszeichnungssprache YAML. Sie referenziert vorhandene Dockerfile-Dateien oder definiert eigene Umgebungen und Konfigurationen für Docker-Container. Darüber hinaus bestimmt sie die Kommunikation zwischen mehreren Docker-Containern.

Der fünfte und letzte Teil dieser Serie wird sich der Fragestellung widmen, welche Auswirkungen die Verschmelzung von Microservices mit der Container-Technologie auf die Softwareentwicklung von verteilten Anwendungen hat.

TR