Entwicklung XING

Docker – Eine Einführung

Virtualisierungslösungen sind seit langer Zeit eine feste Größe in der IT.

Sei es im Unternehmensumfeld (vSphere, XEN, KVM, Hyper-V etc.) oder im privaten Bereich (virtual Box, QEMU etc.). Es existiert ein enormes Spektrum an Anwendungsfällen, welches durch eine Vielzahl von leistungsfähiger Software, verfügbarem Know-How sowie einfach zu nutzende Tools unterstützt werden. Zu den verfügbaren Virtualisierungstechnologien zählen auch sogenannte Container.

Dieser Artikel soll als Einstieg in die Thematik Docker und Container dienen, einen groben Überblick über Architektur, Features, Einsatzmöglichkeiten sowie Vor- und Nachteile bieten. In Zukunft können Sie hier auch weitere Artikel zu ausgewählten Themen zu Docker und Containerorchestrierung finden.

Obwohl die zugrundeliegenden Technologien teilweise bereits mehr als 20 Jahre verfügbar sind, fanden Container bis vor kurzem kaum Verbreitung. Dies lag wohl vor allem an der umständlichen Handhabung der Tools zum einen, die es nur Profis ermöglichten Container zu nutzen, als auch an einer sehr starren Plattformabhängigkeit welche das Verschieben und Betreiben eines Containers auf unterschiedlichen Zielinfrastrukturen verhinderte.

Dies änderte sich als 2013 das junge Unternehmen dotCloud eine Software namens Docker veröffentlichte, welche diese Probleme löste sowie um nützliche, zeitgemäße Funktionen erweiterte und dadurch Containern zu einem enormen Popularitätszuwachs verhalf, welcher heute noch anhält.

Die Gründe für den Erfolg von Docker sind vielfältig. Zum einen erweitert Docker vorhandene Containerfunktionen (Versionierung, Snapshots, Registry, Portabilität). Zum anderen lassen sich Docker Images sehr einfach definieren, erstellen, zwischen System transportieren und im Vergleich zu VMs sehr Ressourcen schonend betreiben. Docker selbst ist Open Source, verfügbar für Windows, Linux und Mac OS und verfügt über eine sehr große Community mit vielen Tutorials und hervorragender Dokumentation.

Docker spezifische Begriffe:

Image - ein Image ist bei Docker eine portable Abbildung eines Containers (Vorlage).

Container - ein Container ist ein lauffähiges, virtuelles Betriebssystem, wird aus einem Image erstellt.

Dockerfile - eine Textdatei, die Befehle enthält, um ein Image den eigenen Anforderungen anzupassen.

Docker Hub/Registry - ein Online-Dienst, der eine Registry für Docker-Images und Repositories beinhaltet

Docker compose - Multi-Container Anwendungen in einer Datei Beschreiben und deployen (auf einem Host).

Docker Swarm - Multi-Container Anwendungen in einer Datei Beschreiben und deployen (auf mehreren Hosts).

Container vs. Virtuelle Maschine
Vergleicht man Container mit VMs fallen einige Gemeinsamkeiten aber vor allem die Unterschiede auf. So kapseln sowohl VMs als auch Container ihren Inhalt gegenüber dem Hostsystem oder anderen Gästen ab und enthalten alle notwendigen Bestandteile, um ihre eigentliche Aufgabe zu erfüllen. Hier findet sich zugleich der gravierendste Unterschied zwischen den beiden Technologien.

 
Abbildung 1: virtuelle Maschine


Abbildung 2: Docker Container

Während VMs ein komplettes Betriebssystem mit Kernel, Init Prozess etc. aufweisen welches komplett vom Host Betriebssystem unabhängig ist beinhalten Container wirklich nur die Inhalte, welche für den reinen Betrieb der Applikation notwendig sind (Bibliotheken, Executables, Dienste). Für die Verwaltung der Hardware etc. wird der Kernel und Prozesse des Gast Betriebssystems genutzt. Dies hat zur Folge, dass der Overhead eines separaten Kernels und sonstiger Betriebssystembestandteile je Container entfällt und auch ein separater Init Prozess beim Starten eines Containers nicht mehr notwendig ist. Daraus resultiert, dass Container sehr schnell gestartet werden können, sehr effizient mit Arbeitsspeicher haushalten und nur so viel Festplattenplatz benötigen, wie die Anwendung tatsächlich erfordert. Ein Vergleich zur Leistungsfähigkeit eines Servers verdeutlicht die Effiziensvorteile von Containern sehr schön: „Ein Server der etwa 10 – 100 VMs verwalten kann, kann ca. 100 – 1000 Container verwalten!“

Vorteile

Folgende Vorteile ergeben sich durch die Verwendung von Docker im Vergleich zu VMs bzw. klassischen Servern.

  • Portabilität (alle Abhängigkeiten sind im Container enthalten, lauffähig auf beliebiger VM, Cloud oder Server)
  • Sicherheit (Container Isolation, Image Signierung und Verifizierung)
  • Kostenreduktion (Erhöhung der Host Auslastung, der Effizienz des IT Betriebs während Ausrollen, Wartung, Skalierung und Abräumen von Diensten)
  • Docker ist defacto Standard
  • Anwendungen lassen sich leicht zwischen Systemen transportieren und betreiben (kein „works for me“)
  • Sehr effizienter Ressourcenverbrauch, sehr schneller Start der Container (1 Server kann ca. 10-100 VMs oder 100-1000 Container verwalten)

Nachteile

Folgende Nachteile ergeben sich durch die Verwendung von Docker im Vergleich zu VMs bzw. klassischen Servern.

  • Docker Container sind abhängig vom Host Betriebssystem (Windows Container laufen nur auf Windows Hosts, Linux Container laufen nur auf Linux Hosts)
  • Kein grafischer Desktop im Container möglich (Windows) bzw. nur über Umwege (Linux)
  • Keine native Unterstützung für verteilte Systeme/Cluster, wird durch dritte Softwaretools ermöglicht

Anwendungsfälle

Der Einsatz von Docker hat einige Bereiche der IT revolutioniert. Die bekanntesten Themen dürften DevOps sowie Continuous Integration and Deliverie Pipelines sein (Abbildung 3).  Dabei kann Docker seine Stärken voll ausspielen, indem Images dynamisch erzeugt werden (Schritt Packetieren) und durch ihre geringe Größe eine schnelle Verteilung auf die Zielsysteme möglich ist (Schritt Release).

 
Abbildung 3:CI/CD-Pipeline

Abschließend kann man sagen, dass Docker keine klassische Virtualisierungslösung ist, auch wenn es einige Überschneidungen gibt. Es ist auch nicht die sogenannte "Eierlegende Wollmilchsau" die viele auf Grund des Hypes um Docker erwarten. Vielmehr ermöglicht es Docker, Anwendungen schnell und mit dem größtmöglichen Grad an Flexibilität auszurollen und gleichzeitig durch die Harmonisierung von Containern und Virtualisierungsumgebungen bestehende Ressourcen besser und gleichmäßiger auszulasten.

Welche Fallstrike es dabei zu beachten gilt, etwa dass Linux und Windows Container nicht zueinander kompatibel sind und welche Maßnahmen getroffen werden müssen, um Daten persistent zu speichern, können sie demnächst hier in unserem Blog lesen.

Für Fragen, Anregungen oder Best Practice-Beispiele stehen wir Ihnen gern zur Verfügung.

Autor

Martin Fischer IT-Consultant
Martin Fischer