Docker

Docker

Copyright © Shutterstock / REDPIXEL.PL

Was ist ein Docker?

Definition

Docker ist ein Computerprogramm, das eine Virtualisierung auf Betriebssystemebene durchführt, die auch als “Containerisierung” bezeichnet wird. Es wurde erstmals im Jahr 2013 veröffentlicht und wird von Docker Inc. entwickelt.

Ziel

Docker wird zum Ausführen von Softwarepaketen verwendet, die als “Container” bezeichnet werden. Container sind voneinander isoliert und bündeln ihre eigene Anwendung, Tools, Bibliotheken und Konfigurationsdateien. Sie können über genau definierte Kanäle miteinander kommunizieren.

Alle Container werden von einem einzigen Betriebssystem betrieben und sind daher leichter als virtuelle Maschinen. Sie werden aus Bildern erstellt, die ihren genauen Inhalt angeben. Bilder werden häufig durch das Kombinieren und Ändern von Standardbildern erstellt, die aus öffentlichen Repositorien heruntergeladen werden.

Entstehung

Solomon Hykes gründete Docker in Frankreich als internes Projekt innerhalb von dotCloud, einem Unternehmen, das als Plattform für Dienste fungiert und mit ersten Beiträgen anderer dotCloud-Ingenieure arbeitete. Docker stellt eine Weiterentwicklung der proprietären Technologie von dotCloud dar, die auf früheren Open-Source-Projekten wie Cloudlets, basiert.

Docker wurde im März 2013 als Open-Source veröffentlicht und löste 2014 mit dem Release der Version 0.9 LXC als Standard-Ausführungsumgebung ab und ersetzte es durch seine eigene libcontainer-Bibliothek, die in der Programmiersprache “Go” geschrieben wurde, ab.

Technologie

Docker wurde hauptsächlich für Linux entwickelt, wo es die Ressourcen-Isolations-Funktionen des Linux-Kernels (cgroups) und Kernel-Namespaces sowie ein union-fähiges Dateisystem (OverlayFS) und andere verwendet, um die Ausführung unabhängiger Container innerhalb einer einzigen Linux-Instanz sowie den Aufwand für das Starten und Verwalten virtueller Maschinen, zu vermeiden.

Die Unterstützung des Linux-Kernels für Namespaces isoliert meistens die Schicht der Anwendung auf die Betriebsumgebung, einschließlich Prozessbäume, Netzwerk, Benutzer-IDs und angehängte Dateisysteme, während die cgroups des Kernels Ressourcen-Einschränkungen für den Arbeitsspeicher und CPU bereitstellen.

Seit Version 0.9 ist die libcontainer-Bibliothek vorhanden, die als direkte Virtualisierungsmöglichkeit (die vom Linux-Kernel bereitgestellt wird) verwendet wird. Außerdem werden abstrahierte Virtualisierungsschnittstellen über libvirt, LXC (Linux-Container) und systemd-nspawn, verwendet.

Neben den Funktionen des Linux-Kernels (hauptsächlich Gruppen und Namespaces) erfordert ein Container im Gegensatz zu einer virtuellen Maschine kein separates Betriebssystem. Stattdessen stützt es sich auf die Funktionen des Kernels und verwendet Ressourcen-Isolierung für CPU und den Arbeitsspeicher sowie separate Namespaces, um die Ansicht der Anwendung auf das Betriebssystem zu isolieren. Es greift auf die Virtualisierungsfunktionen des Linux-Kernels entweder direkt über die libcontainer-Bibliothek zu oder indirekt über libvirt, LXC oder systemd-nspawn.

Komponenten

Die Software besteht aus drei Komponenten:

Der Daemon ist ein permanenter Prozess, der die Container verwaltet und Objekte verarbeitet. Er wartet auf Anforderungen, die über die Engine-API gesendet werden. Das Client-Programm bietet eine Befehlszeilen-Schnittstelle, über die Benutzer mit Daemons interagieren können.
Die Objekte sind verschiedene Elemente, die zum Zusammenstellen einer Anwendung verwendet werden. Die Hauptklassen der Objekte sind Bilder, Container und Dienste.
Das Register ist die Quelle für die Bilder. Die Clients stellen eine Verbindung zu den Registern her, um die Bilder herunterzuladen (“Pull“) oder von ihnen erstellte Bilder (“Push“) hochzuladen. Die Register können öffentlich oder privat sein.
Zwei der wichtigsten öffentlichen Register sind Docker Hub und Docker Cloud. Hub ist die Standard-Registrierungsdatenbank, in der Docker nach Bildern sucht.

Tools

Hierbei handelt es sich um ein Tool zum Definieren und Ausführen von Anwendungen für mehrere Container. Es verwendet YAML-Dateien zum Konfigurieren der Anwendungsdienste und führt den Erstellungs- und Startvorgang aller Container mit einem einzigen Befehl aus. Mit dem CLI-Hilfsprogramm können Benutzer Befehle für mehrere Container gleichzeitig ausführen. Befehle, die sich auf die Bildbearbeitung oder interaktive Optionen für Benutzer beziehen, sind nicht relevant, da sie einen Container adressieren.

Die Datei dient zum Definieren der Services einer Anwendung und enthält verschiedene Konfigurationsoptionen.

Diese Anwendung bietet native Clustering-Funktionen für die Container, wodurch eine Gruppe von Engines zu einer einzigen virtuellen Engine wird. In der Version 1.12 und höher ist der Swarm-Modus in die Engine integriert. Mit dem Swarm-CLI-Dienstprogramm können Benutzer Swarm-Container ausführen, Discovery-Token erstellen, Knoten im Cluster auflisten und vieles mehr. Mit dem CLI-Dienstprogramm des Knotens können Benutzer zudem verschiedene Befehle ausführen, um Knoten in einem Swarm zu verwalten.

Funktion

Docker implementiert eine übergeordnete API, um leichtgewichtige Container bereitzustellen, die Prozesse isoliert ausführen. Da der Container leichtgewichtig ist, können ein einzelner Server oder eine virtuelle Maschine mehrere Container gleichzeitig ausführen. Eine Analyse aus dem Jahr 2016 ergab, dass ein typischer Docker-Anwendungsfall die Ausführung von fünf Containern pro Host beinhaltet, dass jedoch viele Organisationen zehn oder mehr ausführen.

Die Verwendung von Containern kann die Erstellung von stark verteilten Systemen vereinfachen, indem mehrere Anwendungen, Worker-Aufgaben und andere Prozesse autonom auf einer einzelnen physischen Maschine oder auf mehreren virtuellen Maschinen ausgeführt werden können. Auf diese Weise kann die Bereitstellung von Knoten durchgeführt werden, sobald die Ressourcen verfügbar werden oder wenn mehr Knoten benötigt werden. Dies ermöglicht einen PaaS-Stil (PaaS) für die Bereitstellung und Skalierung von Systemen wie Apache Cassandra, MongoDB und Riak.

Fact

Im Oktober 2014 gab Microsoft die Integration der Engine in die nächste Windows Server-Version sowie die native Unterstützung der Client-Rolle in Windows bekannt. Im Juni 2016 gab Microsoft bekannt, dass Docker jetzt nativ unter Windows 10 mit Hyper-V-Container zum Erstellen, Versenden und Ausführen von Containern mit dem Windows Server 2016 Technical Preview 5 Nano Server verwendet werden kann.


Sie haben noch Fragen?

Kontaktieren Sie uns

Kostenloser SEO-Check der OSG


Weitere Inhalte