Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Virtualisierung mit Docker

Das Prinzip von Linux-Containern

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Linux-Container stellen die Basis von Docker dar und es ist unerlässlich, dass Sie sich ein grundsätzliches Verständnis darüber verschaffen.

Transkript

Um die Prinzipien hinter Docker zu verstehen und vor allem noch nachzuvollziehen, warum Docker eigentlich existiert und wozu es gut ist, ist es ist zunächst einmal notwendig, die Prinzipien von Linux- Containern zu verstehen. Genau diese Prinzipien möchte ich Ihnen nun vorführen. Zunächst einmal sind Linux-Container keine echte Funktion, die Docker selbst mit sich bringt. Das bedeutet, Linux-Container wurden weder von noch für Docker erfunden. Bei Linux-Containers handelt es sich nicht um eine geschlossene funktionelle Einheit, sondern um viele Teilaspekte, die mittlerweile im einzelnen Teil des Kernels von Linux seit über 10 Jahren sind. Das heißt, unter Linux-Containern versteht man vor allem eine Zusammenfassung dieser Teilaspekte. Eine der ersten Umsetzungen dieser Form war das so genannte Free BSD Jail. Aus Gründen der Sicherheit wollte man so einzelne Prozesse in andere Root Ordner verschieben, sodass beispielsweise ein Apache-Webserver der vom Internet ausgekapert wird, nicht in der Lage ist das Betriebssystem selbst zu verändern, sondern lediglich einen relativen Ordner. Damit alles nun auch funktionieren kann, müssen in diesen relativen Ordner natürlich auch entsprechende Linux-Teilanwendungen und Abhängigkeiten bereit gestellt werden. Und genau das bezeichnet man als einer Art Gefängnis. Die erste richtige Implementierung von Linux-Containern in einer Form, die für viele Anwendungen nutzbar ist, sind die so genannten Solaris Zonen. Die Firma Sun, heute Oracle hat sich damals bewusst gegen echte Virtualisierung auf Hardwareebene entschieden und die so genannten Solaris Zonen, also geschlossenen Einheiten mit jeweiligen Ressourcen, Netzwerk und ähnlichen Prinzipien, als ähnliches Prinzip zu Virtualisierung im Betriebssystem Solaris bereit gestellt. Das interessante an Docker ist nun, dass diese Linux- Container-Funktionalitäten extrem schwierig zu konfigurieren sind. Das bedeutet, es gibt eine hohe Komplexität, wie diese für jeweilige Anwendungen zu konfigurieren und einzurichten sind. Vor allem fehlt es hier an einfacher Reproduzierbarkeit und teilweise auch um entsprechende Schnittstellen. Eine der ersten Schnittstellen, die für diverse Betriebssysteme eingerichtet wurden, war das so genannte LXC oder auch Linux Containers, was auch der entsprechende Namensgeber für dieses Prinzip ist. LXC stellt also nun eine Plattform unabhängige Linux- Kernel-Schnittstelle dar, die bis Version 0.9 von Docker genutzt wurde um die Kernel-Features der Linux-Container einzurichten. Im Groben bedeutet das also, Docker ist eine Abstraktion über einer Schnittstelle zu Linux-Kernel-Features. Diese Schnittstelle LXC wurde später durch eine eigene Implementierung von Docker so genannte Libcontainer ausgetauscht. Seitdem ist Libcontainer auch der de facto Standard für diese Funktionalität und wird auch von anderen Firmen wie Google oder Red Hat entsprechend unterstützt. Dieses Interface Libcontainer besteht also nun aus diversen Funktionalitäten, die von Docker wahrgenommen werden können. Docker an sich ist also nun ein Systemdienst, der auf höchster Ebene dem Root-Nutzer im Betriebssystem läuft und über eine Schnittstelle wie REST von eine Kommandozeile-Client oder auch von Webanwendungen angesprochen werden kann. Der Docker-Dienst greif dann entsprechend auf die Libcontainer-Bibliothek zurück und richtet dann je nach Konfiguration die entsprechenden Linux-Kernel-Features für eine jeweilig auszuführenden Anwendung ein. Die erste wichtige Funktionalität in diesem Zusammenhang sind die so genannten CGroups. CGroups oder auch Control Groups sind so genannte Resource-Limits und erlauben Docker verschiedene Anwendungen zu begrenzen im Sinne von Zeit, die auf der CPU verbracht werden kann Menge an CPUs, die genutzt werden können, Speichermengen, die genutzt werden können und auch viele andere Sachen, die mit IO zusammenhängen zum Beispiel Netzwerk, Dateisystem und ähnliche Zugriffe. Der nächste wichtige Aspekt sind die so genannten Namespaces. Diese ermöglichen die Simulation geschlossener Umgebungen gegenüber der jeweiligen ausgeführten Anwendung. Der Anwendung wird also nun gezeigt, es gäbe eigenen Mountpunkte, es gäbe einen eigenen Hostname für die jeweilige Anwendung, als auch virtuelle Netzwerkkarten, diverse Geräte können simuliert werden und vor allem Dingen wichtig ist, das geschlossene Prozesse, also nur Prozesse, die dem jeweiligen Container angehören, sichtbar sind und auch eigene Nutzer existieren können, die unabhängig von Host-Betriebssystem sichtbar sind. Das nächste wichtige Prinzip sind die Capabilities. Das sind herkömmlicherweise Fähigkeiten einer Root-Anwendung das jeweilige System zu beeinflussen. Prinzipiell läuft jeder Linux-Container unter dem Root-Nutzer. Allerdings werden über die Capabilities entsprechende Fähigkeiten von den gestarteten Anwendungen entfernt und nur on demand zugewiesen. Das heißt, das eine Container-Anwendung auch, wenn sie unter Benutzer-Root läuft, nicht das Netzwerk administrieren kann oder auch nicht die Maschine herunterfahren kann. Je nach Distribution bzw. entsprechenden Kernel gibt es zusätzlich noch die Mandatory Access Control, die von Docker eingerichtet wird. Mandatory Access Control sind zusätzliche Sicherheitsmechanismen im Linux-Kernel, die es ermöglichen die Anwendungen davon fernzuhalten Änderungen vorzunehmen, die sie nicht tun sollten. Es handelt es hierbei eben nur um eine besondere Art der zusätzlichen Sicherheit und wird nicht entsprechend von jeden Kernel-System unterstützt. Beispielsweise implementiert Ubuntu AppArmor und im Kontrast dazu implementiert Red Hat SELinux. Aus Gründen der effizienten Dateisystemen-Nutzung werden auch besondere Arten von Dateisystemen eingesetzt. Hierbei handelt es sich vor allem um so genannte hierarchische Dateisysteme, da so beispielsweise das mehrfache Ausführen ein und derselben Anwendung nicht jeweils entsprechend viel Speicherplatz brauchen würde, sondern lediglich die Differenzen. Dafür werden besondere Dateisysteme eingesetzt, wie AUFS oder ext4 im Zusammenhang mit devmapper auf Red Hat oder entsprechend btrfs eine neue Art von versionierten Dateisystemen. Und die Notfallmöglichkeit des so genannten Virtual File System, vfs. Das letzte und wohl auch älteste Feature, das auch entsprechend von den Free BSD Jails eingesetzt wurde, ist das so genannte Change Root. Also das Verschieben des Mountpunktes des Root Ordners, wodurch also eine geschlossene Betriebssystemumgebung simuliert werden kann. Sie haben nun also gesehen, das hinter den Prinzipien von Docker einige sehr komplexe Funktionalitäten stecken. Glücklicherweise nimmt die Konfiguration dieser Funktionalitäten Docker für Sie in Angriff. Sie müssen sich also nicht damit herumplagen, diese korrekt zu konfigurieren. Es kann Ihnen aber trotzdem, wie Sie in diesem Video gesehen haben, von Nutzen sein zu wissen, was hinter Docker steckt, damit entsprechend auch Sie in der Lage sind, die Möglichkeiten von Docker auszureizen.

Virtualisierung mit Docker

Steigen Sie in die Container-Virtualisierung ein und entdecken Sie einfaches Prototyping neuer und unkomplizierte Skalierung bestehender Anwendungen.

3 Std. 36 min (36 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!