Container

Was ist Docker?

Der Begriff „Docker" bezieht sich auf verschiedene Dinge. Dazu gehören ein Open Source Community-Projekt; Tools aus dem Open Source-Projekt; Docker, die Firma, die der wichtigste Unterstützer dieses Projekts ist, und die Tools, die Docker offiziell unterstützt. Die Tatsache, dass die Technologien und die Firma den gleichen Namen haben, kann verwirrend sein.

Hier ist eine kurze Erklärung:

  • Die IT-Software „Docker“ ist eine Containerisierungstechnologie, die die Erstellung und den Betrieb von Linux®-Containern ermöglicht.
  • Die Open Source Docker-Community arbeitet an der Verbesserung dieser Technologien zum Nutzen aller Anwender – und das umsonst.
  • Die Firma Docker Inc. baut auf der Arbeit der Docker-Community auf, macht diese sicherer und teilt diese Verbesserungen mit der größeren Community. Sie unterstützt dann die verbesserten und zuverlässigeren Technologien für Unternehmenskunden.

Mit Docker können Sie Container wie extrem leichtgewichtige, modulare virtuelle Maschinen behandeln. Und mit diesen Containern erhalten Sie Flexibilität – Sie können sie erstellen, einsetzen, kopieren und zwischen Umgebungen migrieren.


Wie funktioniert Docker?

Die Docker-Technologie verwendet den Linux Kernel und seine Funktionen wie Cgroups und namespaces, um Prozesse zu isolieren, damit diese unabhängig voneinander ausgeführt werden können. Diese Unabhängigkeit ist der Zweck der Container – die Fähigkeit, mehrere Prozesse und Apps getrennt voneinander betreiben zu können. So wird Ihre Infrastruktur besser genutzt und gleichzeitig die Sicherheit bewahrt, die sich aus der Arbeit mit getrennten Systemen ergibt.

Container-Tools, einschließlich Docker, bieten ein Image-basiertes Einsatzmodell. Das macht es einfacher, eine Anwendung oder ein Paket von Services mit all deren Abhängigkeiten in mehreren Umgebungen gemeinsam zu nutzen. Docker automatisiert außerdem die Bereitstellung der Anwendung (oder Kombinationen von Prozessen, die eine Anwendung darstellen) innerhalb dieser Container-Umgebung.

Diese Tools bauen auf Linux-Containern auf – was Docker benutzerfreundlich und einzigartig macht – und geben den Nutzern so nie dagewesenen Zugriff auf Anwendungen. Sie ermöglichen eine deutlich schnellere Bereitstellung und Kontrolle von Versionen sowie deren Verbreitung.


Ist die Docker-Technologie das Gleiche wie traditionelle Linux-Container?

Nein. Die Docker-Technologie war ursprünglich auf die LXC-Technologie aufgesetzt – was meistens mit „traditionellen“ Linux-Containern assoziiert wird; sie hat sich aber seitdem von dieser Abhängigkeit befreit. LXC war als leichtgewichtige Virtualisierung von Nutzen, bot aber keine gute Entwickler- oder Nutzererfahrung. Die Docker-Technologie bietet mehr als die Fähigkeit, Container auszuführen – sie vereinfacht auch den Prozess der Erstellung und des Aufbaus von Containern sowie den Versand von Images und unter anderem auch der Versionierung von Images.

Traditionelle Linux-Container verwenden ein init-System, das mehrere Prozesse verwalten kann. Das bedeutet, dass komplette Anwendungen als eins betrieben werden können. Die Docker-Technologie unterstützt die Aufschlüsselung von Anwendungen in ihre einzelnen Prozesse und stellt die dementsprechenden Tools bereit. Dieser granulare Ansatz hat seine Vorteile.


Die Vorteile von Docker-Containern

Modularität

Der Docker-Ansatz für die Containerisierung konzentriert sich auf die Fähigkeit, einen Teil der Anwendung für Reparaturen oder Aktualisierung außer Betrieb zu nehmen, ohne dass unnötigerweise die gesamte Anwendung außer Betrieb genommen werden muss. Zusätzlich zu diesem auf Microservices basierenden Ansatz können Sie Prozesse für mehrere Apps freigeben – auf ähnliche Weise, wie eine Service-orientierte Architektur (SOA) funktioniert.

Layer und Image-Versionskontrolle

Jedes Docker-Image besteht aus einer Reihe von Layern. Diese Layer werden in einem einzelnen Image vereint. Ein Layer wird erstellt, wenn sich das Image ändert. Jedes Mal, wenn ein Nutzer einen Befehl wie run oder copy eingibt, wird ein neuer Layer erstellt.

Docker verwendet diese Layer für den Aufbau neuer Container wieder, was den Aufbauprozess enorm beschleunigt. Zwischenzeitliche Änderungen werden von den Images gemeinsam verwendet, was die Geschwindigkeit, Größe und Effizienz weiter verbessert. Versionskontrolle ist ein fester Bestandteil des Layering. Bei jeder neuen haben Sie im Prinzip ein eingebautes Änderungsprotokoll und damit volle Kontrolle über Ihre Container-Images.

Rollback

Das Beste am Layering ist wahrscheinlich die Fähigkeit für einen Rollback. Jedes Image hat Layer. Sie sind mit der aktuellen Iteration eines Images nicht zufrieden? Setzen Sie es zurück auf die vorherige Version. Dies unterstützt einen agilen Entwicklungsansatz und hilft dabei, kontinuierliche Integration und Bereitstellung (CI/CD) aus der Perspektive von Tools zu einer Realität zu machen.

Schnelle Bereitstellung

Neue Hardware zum Laufen zu bringen, zu versorgen und zur Verfügung zu stellen dauerte normalerweise Tage. Und der Aufwand und Overhead dafür war eine Belastung. Docker-basierte Container können die Bereitstellung auf Sekunden reduzieren. Durch die Erstellung eines Containers für jeden Prozess können Sie schnell ähnliche Prozesse mit neuen Apps teilen. Und da ein Booten des Betriebssystems nicht nötig ist, um einen Container hinzuzufügen oder zu bewegen, sind die Bereitstellungszeiten wesentlich kürzer. Darüber hinaus können Sie bei dieser Entwicklungsgeschwindigkeit einfach und kosteneffizient Daten erstellen und die von Ihren Containern erzeugten Daten ohne Bedenken löschen.

Die Docker-Technologie ist also ein granularer, kontrollierbarer, auf Microservices basierter Ansatz, der der Effizienz einen höheren Stellenwert einräumt.


Gibt es Einschränkungen bei der Verwendung von Docker?

Docker für sich allein ist für die Verwaltung einzelner Container bestens geeignet. Wenn Sie beginnen, mehr und mehr Container und containerisierte Apps zu verwenden, die in hunderte von Bestandteilen zerlegt sind, können die Verwaltung und Orchestrierung jedoch sehr schwierig werden. Irgendwann müssen Sie einen Schritt zurückgehen und Container gruppieren, um Dienste wie Vernetzung, Sicherheit, Telemetrie usw. in all Ihren Containern bereitzustellen. An dieser Stelle kommt Kubernetes ins Spiel.

Mit Docker erhalten Sie nicht den gleichen UNIX-artigen Funktionsumfang, den traditionelle Linux-Container bieten. Dies betrifft auch die Fähigkeit, Prozesse wie cron oder syslog neben Ihrer App innerhalb des Containers zu verwenden. Es gibt auch Einschränkungen beim Säubern von untergeordneten Prozessen nach dem Beenden von Child-Prozessen – etwas, das von traditionellen Linux-Containern durchgeführt wurde. Diese Bedenken können gemildert werden, indem die Konfigurationsdatei geändert wird und diese Fähigkeiten von Anfang an eingerichtet werden – etwas, das nicht sofort auf den ersten Blick offensichtlich ist.

Darüber hinaus gibt es andere Linux-Untersysteme und -Geräte, die nicht mit namespace versehen sind. Diese beinhalten SELinux, Cgroups und /dev/sd*-Geräte. Das bedeutet, dass wenn ein Angreifer die Kontrolle über diese Untersysteme erlangt, der Host gefährdet ist. Um leicht zu bleiben, werden die Host-Kernels gemeinsam mit den Containern verwendet und das öffnet diese Sicherheitslücke. Das ist der Unterschied zu virtuellen Maschinen, die strenger vom Host-System getrennt sind.

Der Docker Daemon kann auch Sicherheitsbedenken verursachen. Um Docker-Container zu verwenden und auszuführen, nutzen Sie höchstwahrscheinlich den Docker Daemon, eine persistente Laufzeitumgebung für Container. Der Docker Daemon erfordert Root-Rechte. Es gilt hier also in Bezug auf Zugriffsberechtigungen und der Position der Prozesse besonders vorsichtig zu sein. Ein lokaler Daemon hat beispielsweise eine kleinere Angriffsfläche als einer, der in einer öffentlicheren Position gelagert ist, wie zum Beispiel ein Webserver.

Container bieten eine Vielzahl weiterer Einsatzmöglichkeiten