Docker ist eines der Themen, die in letzter Zeit sehr im Fokus stehen. Dabei sind Container in der Linux Welt eigentlich nichts Neues und fast alle Shared Webspaces nutzen bereits die ein oder andere Container-Implementierung. Docker stellt jedoch ein deutlich verbessertes Management und eine stärkere Isolation in den Vordergrund, wodurch Container jetzt auch für Unternehmen interessant werden.
Grund genug, Docker einmal genauer zu betrachten.
Was sind eigentlich Container?
In der physischen Welt bringen Containerschiffe Hunderte Container von einem Ende der Welt zum anderen. Die Container teilen sich das Schiff mit einer Brücke und einem Maschinenraum. Jeder dieser Container ist jedoch ein abgeschlossener Raum, getrennt von allen anderen. Einige der Container haben zusätzliche Features wie zum Beispiel eine Klimaanlage oder eine Alarmanlage, andere dienen nur als einfache Ablagen. Die von einer Docker-Implementierung angebotene Technologie ist so einem Containerschiff sehr ähnlich. Die Docker Container sind voneinander isoliert, teilen sich aber die Ressourcen. Kein Container kann beeinflussen, was in einem anderen Container oder auf dem Host passiert. Jeder Container hat die volle Kontrolle über sein Innenleben. Der Host hat jedoch wiederum weitreichende Kontrolle über die Container.
Im Gegensatz dazu ist Virtualisierung eher wie ein Flottenverband. Jedes Schiff hat eine eigene, spezifische Aufgabe. Ein Admiral kann Befehle erteilen und die Versorgungsschiffe bringen Treibstoff. Jedes Schiff hat jedoch eine eigene Brücke und einen eigenen Maschinenraum, sodass es seine Aufgaben unabhängig von den anderen Schiffen erfüllen und zu einem gewissen Grad auch den Admiral ignorieren kann. Wenn jedoch die Versorgungsschiffe wegbleiben, fällt der gesamte Verband aus.
In der Welt der Virtualisierung sind diese Versorgungsschiffe die Hostsysteme, sogenannte Hypervisoren, die die Ressourcen für die virtuellen Maschinen (VM) bereitstellen. Wenn die Hostsysteme oder Hypervisoren ausfallen, funktioniert auch keine der VMs mehr. Die Kontrollprogramme des Hypervisors auf dem Host entsprechen dem Admiral. Er kann die VMs starten und stoppen und sich mit der Kommandozeile verbinden. Es braucht jedoch einen Nutzernamen und ein Passwort, um sich an der VM anzumelden. Das wichtigste Merkmal bei der Virtualisierung ist jedoch, dass jede VM ihr eigenes Betriebssystem hat und sich somit vollständig vom Host unterscheiden kann.
Die Kosten für Virtualisierung
Mein Blogartikel über Virtualisierung betrachtet die Vorteile der Virtualisierung und welche Einflüsse Virtualisierung auf die Sicherheit und die Serverauslastung hat. Virtualisierung stellt die ultimative Isolation von Umgebungen dar, denn jede Instanz muss ein vollständiges Betriebssystem mitbringenen. Dies führt allerdings auch zu nicht unerheblichen Kosten und einigem Aufwand bei der Einrichtung und Pflege der VMs.
Das Besondere an Docker
Hinter der Entwicklung von Docker steckt auch die Idee der Isolation von Anwendungen. Container stehen jedoch eine Stufe unter Servervirtualisierung, was die Isolation von Anwendungen betrifft. Docker Container nutzen spezielle Abstraktionen im Linux Kernel und Dateisystem, um die Anwendungen und Umgebungen voneinander zu trennen. Mithilfe dieser APIs können die einzelnen Container die Ressourcen des Servers nutzen, ohne die anderen Container beeinflussen zu können.
Logische Dateisysteme
Nicht alle Dateisysteme können innerhalb von Docker genutzt werden. Die Dateisysteme sind eine spezielle Klasse der logischen Dateisysteme, die im Allgemeinen als Union Dateisysteme bezeichnet werden. Diese Dateisysteme nutzen das Dateisystem des Servers und eine Datei mit Änderungen. Jede Änderung im Docker Container wird in diese Datei geschrieben. Immer wenn der Container oder der Host neu gestartet wird, erstellt das Dateisystem die Umgebung aus der Kombinationen aus beiden. Dadurch können alle Änderungen unter effektiver Nutzung des Speicherplatzes gesichert werden, ohne dass das Hostsystem durch die Änderungen beeinflusst wird.
Bibliotheken
Eine Vielzahl von Anwendungen benötigen bestimmte Versionen von Systembibliotheken. Einige benötigen die neusten Versionen, andere die stabilste Version. Docker erlaubt es, Bibliotheken zu nutzen, die nicht auf dem Hostsystem vorhanden sind oder in einer anderen Version vorhanden sind. Dies kann besonders hilfreich sein, wenn man mehrere Anwendungen hat, die zueinander inkompatible Versionen benötigen.
Docker Paradigmen
Das Wichtigste an Docker Containern ist natürlich die Anwendung. Für die Nutzer ist dies oft das Einzige, was zählt. Aus Entwicklersicht gibt es zwei unterschiedliche Ansätze zur Einbindung von Docker. Der eine Ansatz, den wir in unserem App Center nutzen, behandelt Docker ähnlich einer virtuellen Maschine. Das heißt, im Container läuft ein fast vollständiges Betriebssystem. Weiterhin beinhaltet der Container alle Bibliotheken und die Applikation selbst. Dieser Ansatz ermöglicht uns, die Applikation in einzelnen Containern und die UCS Grundinstallation getrennt voneinander zu aktualisieren. Da für uns der sichere Betrieb von Applikationen wichtiger als die Reduktion des Overheads ist, bevorzugen wir diesen Ansatz.
Der traditionelle Ansatz von Docker geht noch darüber hinaus. Die Idee ist, den Container so leicht wie möglich zu gestalten. Dies bedeutet, dass in einem Container nicht unbedingt eine vollständige Applikation läuft, sondern nur ein einzelner Prozess. Für eine Anwendung aus Datenbank, Prozesslogik und Webfrontend bedeutet dies, dass man 3 Container benötigt. Der große Vorteil von Applikationen, die diesem Modell folgen, ist, dass man Module ohne Probleme austauschen kann und auch das Hinzufügen zusätzlicher Module einfacher ist. Ressourcen können so besser genutzt werden. Dies funktioniert allerdings nur, wenn die Applikation für Docker konzeptioniert wurde.
Beide Ansätze haben somit Vorteile und Nachteile. Im App Center von UCS nutzen wir derzeit den ersten Ansatz, sehen jedoch auch, dass der zweite in vielen Situationen seinen eigenen Charme hat.
Fazit
Docker ist in der Tat ein effektiver Ansatz, Anwendungen zu trennen. Viele Applikationen stehen deshalb als Docker Container bereit. Diese befinden sich sowohl in der Docker eigenen Bibliothek („Docker Hub“) als auch im UCS App Center. Wie bei allen Projekten gilt jedoch auch beim Einsatz von Docker, dass eine gute Planung der wichtigste Grundstein für eine effektive und sichere Umgebung ist.
Kommentare
Hunter
Vielen Dank für diese Erklärung – es ist die erste, die ich lese, welche von Vorne bis Hinten einleuchtend ist und für den groben Überblick erst einmal keine Fragen offen lässt!
Generell muss man sagen: Euer „Kurz erklärt“ Blog ist genial!
Maren Abatielos
Vielen Dank für den netten Kommentar. Das freut uns und motiviert sehr zum Weitermachen! 🙂