Docker ist ein Software-Tool aus dem Jahr 2013, welches bei der Erstellung, dem Testen und der Bereitstellung von Anwendungen unterstützt. Die Neuerung an diesem Tool ist, dass die Applikation in kleinere sogenannte Container aufgesplittet werden, die unabhängig voneinander laufen. Dadurch wird das gesamte System schlanker, effizienter und vor allem ressourcensparender.
Wie funktionieren Docker Container?
Im Mittelpunkt des Open Source Projektes Docker stehen die sogenannten Container. Container sind alleinstehende Einheiten, die unabhängig voneinander ausgeführt werden und immer gleich ablaufen können. Docker-Container können wir uns tatsächlich relativ praktisch vorstellen, wie einen Frachtcontainer. Angenommen, in diesem Container arbeiten drei Menschen an einer bestimmten Aufgabe (Ich weiß, dass dies wahrscheinlich gegen jedes geltende Arbeitsschutzgesetz verstößt, aber es passt nun mal sehr gut in unser Beispiel).
In diesem Container finden sie alle Ressourcen und Maschinen, die sie für ihre Aufgabe benötigen. Über eine bestimmte Lucke im Container bekommen sie die Rohstoffe geliefert, die sie benötigen, und über eine andere Lucke geben sie das fertige Produkt raus. Unser Schiffscontainer kann dadurch ungestört und weitestgehend autark arbeiten. Den Menschen darin wird es nicht auffallen, ob sich das Schiff inklusive Container gerade im Hamburger Hafen, in Brasilien oder irgendwo bei ruhigem Seegang auf offenem Meer befindet. Solange sie kontinuierlich Rohstoffe geliefert bekommen, führen sie ihre Aufgabe aus, egal wo sie sind.
Genauso verhält es sich mit Docker Containern im Softwareumfeld. Es handelt sich dabei um genau definierte, abgeschlossene Applikationen, die auf verschiedenen Maschinen laufen können. Solange sie die festgelegten Inputs kontinuierlich erhalten, können sie auch kontinuierlich weiterarbeiten.
Wo ist der Unterschied zu Virtual Machines?
Die Idee eine Applikation in verschiedene Unteraufgaben aufzuteilen und womöglich auf verschiedenen Computern ausführen zu lassen, war auch 2013 nicht neu. Für solche Aufgaben nutzte man davor sogenannte Virtual Machines (VMs).
Virtuelle Maschinen kann man sich stark vereinfacht vorstellen, wie die Computerzugänge vor einigen Jahren, als Computer noch nicht so verbreitet waren wie heute. Einige kennen es vielleicht noch, dass es pro Familie nur einen Computer gab und man in Windows verschiedene Benutzer angelegt hatte. Jedes Familienmitglied hatte einen eigenen Benutzer und legte dort Dateien ab oder installierte Software, wie Spiele, die für die anderen nicht zugänglich waren.
Virtual Machines nutzen vereinfacht gesagt dasselbe Prinzip, indem sie auf einem einzigen physischen Gerät, verschiedene Benutzer, die (VMs), anlegen. Für die Benutzer scheint es, als nutzen sie ein Hardware technisch isoliertes Computersystem, obwohl alle Benutzer denselben physischen Computer nutzen mit denselben Ressourcen, wie CPUs, Speicherplatz, etc. Eine solche Architektur der Virtualisierung hat diverse Vorteile, da die Hardwarekomponenten gebündelt sind und dadurch effizienter nutzbar sind, beispielsweise was die Kühlung des Systems angeht. Die Nutzer hingegen benötigen lediglich ein relativ leistungsarmes Gerät, wie einen Laptop, um sich mit der Virtual Machine zu verbinden und können trotzdem rechenintensive Aufgaben durchführen, da sie die Hardware der VM nutzen.
Am praktischsten kann man sich Virtual Machines beispielsweise als einen einzigen Laptop vorstellen, auf dem die Betriebssysteme Windows, MacOS und Linux installiert sind.
Docker Container unterscheiden sich von den Virtual Machines, indem sie einzelne Funktionen innerhalb einer Anwendung trennbar machen. Dadurch können auf einer Virtual Machine mehrere dieser Container laufen. Des Weiteren sind die Container einfache, abgeschlossene Pakete, die entsprechend einfach umzuziehen sind.
Was sind die Vorteile von Docker Containern?
- Container sind sehr effizient und ressourcensparend, weil sie beispielsweise deutlich einfacher zu handhaben und managen sind.
- Bei der Entwicklung von Applikationen im Team helfen Container, da sie sehr einfach zwischen Systemen transportiert werden können und ausführbar sind. Dadurch lassen sich die Entwicklungsstände sehr einfach zwischen Kollegen transportieren und funktionieren bei allen Teammitgliedern gleich.
- Container machen eine Anwendung skalierbar. Wenn eine Funktion gerade häufig aufgerufen werden, beispielsweise bei einer Website, lassen sich die entsprechenden Container in einer Vielzahl hochfahren und können wieder abgestellt werden, sobald der Ansturm vorbei ist.
Wie kann man eine Anwendung fit machen für Docker?
Beim Dockerisieren einer Anwendung wird ein Docker-Image erstellt, das alle erforderlichen Abhängigkeiten, Bibliotheken und Konfigurationsdateien enthält, die zum Ausführen der Anwendung erforderlich sind. Hier sind die allgemeinen Schritte zur Dockerisierung einer Anwendung:
- Schreibe ein Dockerfile: Ein Dockerfile ist ein Skript, das Anweisungen enthält, wie ein Image zu erstellen ist. Es gibt das zu verwendende Basis-Image, die auszuführenden Befehle zur Installation der erforderlichen Abhängigkeiten und zur Konfiguration der Umgebung sowie die in das Image aufzunehmenden Dateien an.
- Erstelle das Image: Führe den Befehl docker build aus, um das Image mithilfe der Dockerdatei zu erstellen.
- Starte den Container: Führe den Befehl docker run aus, um einen Container aus dem Image zu erstellen. Du kannst die Portzuordnung, Umgebungsvariablen und andere Konfigurationsoptionen mit Hilfe von Befehlszeilenargumenten angeben.
- Teste den Container: Sobald der Container eingerichtet ist und läuft, teste die Anwendung, indem Du über einen Webbrowser oder ein Befehlszeilentool darauf zugreifst.
Im Folgenden finden Sie einige Tipps, die Sie bei der Dockerisierung einer Anwendung beachten sollten:
- Verwende ein offizielles Basis-Image aus dem Hub, das der Programmiersprache und Version der Anwendung entspricht.
- Minimiere die Anzahl der Schichten im Image, um dessen Größe zu verringern und die Leistung zu verbessern.
- Verwende Umgebungsvariablen, um sensible Informationen wie Passwörter und API-Schlüssel an den Docker-Container zu übergeben.
- Verwenden Sie Docker-Volumes, um die von der Anwendung erzeugten Daten außerhalb des Containers zu speichern.
- Verwenden Sie Docker Compose, um mehrere Container zu orchestrieren, die eine komplexe Anwendung bilden.
Wann nutzen wir Container und wann Virtual Machines?
Docker Container | Virtual Machine |
– Erstellung von Anwendungen in der Cloud – Nutzung von Microservice-Architekturen (viele kleine Applikationen) – Einfacher Transport der Applikationen von Testumgebung in Produktivumgebung ist gefordert | – Ein Betriebssystem soll in einem anderen Betriebssystem nutzbar sein – Eine “große” Applikation soll ausgeführt werden, sogenannte Monolithen – Hardware Ressourcen, wie Speicher, Netzwerke oder Server, sollen provisioniert werden |
Was machen die Docker Images?
Die Docker-Images sind die kleinen Dateien in denen die Konfiguration des Containers definiert und gespeichert wird. Darin sind alle Informationen enthalten, die benötigt werden, um einen Container zu starten. Sie lassen sich also zwischen den Systemen einfach hin und her verschieben und daraus kann dann der Container gestartet werden.
Basierend darauf können wir beispielsweise Kubernetes nutzen, um die Verwaltung der Container zu vereinfachen und zu automatisieren.
Was ist das Docker Hub?
Das Docker Hub ist eine Online-Plattform auf der man sowohl Images hoch- sowie runterladen kann. Damit können also Codestände in einem Team oder einer Organisation verbreiten und teilen. Es funktioniert dabei ähnlich wie beispielsweise GitHub auch jedoch mit dem Unterschied, dass eben Images darüber verbreitet werden.
Dafür sind viele Funktionalitäten geboten, welche die Arbeit im Team erleichtern sollen. Zum Beispiel lassen sich Arbeitsgruppen und Teams erstellen und die Bearbeitung von Images auf einzelne Teams beschränken. Für die Nutzung von Docker Hub muss man sich auf deren Website ein Konto erstellen und anmelden. Nach der Anmeldung können dann die ersten Repositories erstellt und genutzt werden.
Wie nutzt man Docker Compose?
Für die meisten komplexen Anwendungen reicht ein einziges Image nicht aus, um dort alle Funktionen einzubetten. Docker Compose hilft deshalb bei der Einrichtung und Verbindung von verschiedenen Images und bietet eine YAML-Datei über die sich die Services der verschiedenen Applikationen konfigurieren lassen.
In der YAML-Datei sind verschiedene Informationen enthalten. Zum einen werden alle Services und deren Images aufgezählt, die verbunden werden sollen. Die definierten “Volumes” legen fest, auf welchen Speichern Daten abgelegt werden können. In dem Bereich “Network” werden die Kommunikationsregeln zwischen den Containern und zwischen einem Container und dem Host festgelegt.
In welchen Anwendungen wird Docker bereits genutzt?
Es gibt zahlreiche Anwendungen, in denen Docker zur Verbesserung und Rationalisierung verschiedener Aspekte der Softwareentwicklung und -bereitstellung eingesetzt wird. Hier sind ein paar Beispiele:
- PayPal: PayPal konnte durch die Containerisierung seiner Anwendungen die Bereitstellungszeit von Wochen auf Minuten reduzieren. Dadurch konnten sie ihre Dienste leichter skalieren und das Risiko von Ausfallzeiten während der Bereitstellung verringern.
- GE: General Electric (GE) setzt die Software ein, um Microservices in seinen verschiedenen Geschäftsbereichen bereitzustellen. Dadurch konnte das Unternehmen seine Infrastruktur modernisieren und seine Abhängigkeit von Altsystemen verringern.
- Spotify: Spotify nutzt es bereits seit mehreren Jahren zur Containerisierung seiner Anwendungen. Dadurch konnte das Unternehmen die Bereitstellung beschleunigen und das Risiko von Ausfallzeiten bei Aktualisierungen verringern. Außerdem konnten die Infrastrukturkosten gesenkt werden, da die Anwendungen auf weniger Servern laufen.
- eBay: eBay nutzt Docker, um seine Anwendungen zu containerisieren und den Entwicklungsprozess effizienter zu gestalten. Das Unternehmen konnte die Zeit, die für die Bereitstellung neuer Umgebungen benötigt wird, von Wochen auf Minuten reduzieren.
- ING: ING, ein niederländisches multinationales Bank- und Finanzdienstleistungsunternehmen, setzt das Programm ein, um seine Anwendungen zu containerisieren und seine Infrastruktur flexibler und skalierbarer zu machen. Dadurch konnte das Unternehmen die Markteinführungszeit für neue Produkte und Dienstleistungen verkürzen.
Diese Fallstudien zeigen die Vielseitigkeit und Nützlichkeit für verschiedene Branchen und Anwendungen.
Das solltest Du mitnehmen
- Docker Container ermöglichen es kleine, abgeschlossene Applikationen zu entwickeln, die zwischen verschiedenen Systemen transportiert werden können und zuverlässig laufen.
- Sie werden vor allem dann genutzt, wenn Applikationen in der Cloud laufen sollen oder zwischen verschiedenen Umgebungen schnell und einfach verschoben werden soll.
- Container sind deutlich ressourcensparender und effizienter als Virtual Machines.
- In den Docker-Images werden die Konfiguration der Container abgespeichert und definiert.
Was ist Stream Processing?
Einführung in Stream Processing, seine Anwendungen und Unterschiede zur Stapelverarbeitung.
Was ist ein Data Lakehouse?
Erschließen Sie das Potenzial von Daten durch Data Lakehouses. Entdecken Sie, wie Data Lakes und Data Warehouses kombiniert werden.
Was ist Microsoft Power BI?
Erschließen Sie Datenvisualisierung mit Power BI für interaktive Dashboards und gewinnen Sie wertvolle Erkenntnisse für Entscheidungen.
Was ist die referentielle Integrität?
Erkunden Sie die Bedeutung von referentielle Integrität in Datenbanken. Erfahren Sie, wie sie Konsistenz und Genauigkeit der Daten sicherstellt.
Was ist das Snowflake Schema?
Entdecken Sie die Leistungsfähigkeit des Snowflake Schemas: Eine flexible Datenmodellierungstechnik für effizientes Data Warehousing.
Andere Beiträge zum Thema Docker
- Hier findest Du die Dokumentation von Docker.
- Dieser Beitrag von UFS Explorer steigt nochmal tiefer in das Thema Virtual Machines ein.
Niklas Lang
Seit 2020 bin ich als Machine Learning Engineer und Softwareentwickler tätig und beschäftige mich leidenschaftlich mit der Welt der Daten, Algorithmen und Softwareentwicklung. Neben meiner Arbeit in der Praxis unterrichte ich an mehreren deutschen Hochschulen, darunter die IU International University of Applied Sciences und die Duale Hochschule Baden-Württemberg, in den Bereichen Data Science, Mathematik und Business Analytics.
Mein Ziel ist es, komplexe Themen wie Statistik und maschinelles Lernen so aufzubereiten, dass sie nicht nur verständlich, sondern auch spannend und greifbar werden. Dabei kombiniere ich praktische Erfahrungen aus der Industrie mit fundierten theoretischen Grundlagen, um meine Studierenden bestmöglich auf die Herausforderungen der Datenwelt vorzubereiten.