Der Begriff Container bezieht sich auf eine leichte Virtualisierungstechnologie, die auf modernen Linux-Kerneln verfügbar ist. Diese Technologie ist FreeBSD-Jails sehr ähnlich.
Ein älterer, nicht containerfähiger Linux-Kernel kann Prozesse gleichzeitig ausführen. Einige Attribute des Systems können privat verarbeitet werden, z. B. die Prozessumgebung oder der Prozessspeicher. Nur der Prozess, der diese Attribute besitzt, und das Betriebssystem selbst können auf diese Daten zugreifen. (Es gibt eine Menge Schlupflöcher, wie bei einigen ps- Implementierungen, aber das stimmt im Wesentlichen!) Einige andere Attribute werden von den Prozessen gemeinsam genutzt, wie zum Beispiel das Dateisystem und die Netzwerkschnittstellen.
Ein moderner, containerfähiger Linux-Kernel kann mehr Attribute des Systems als private Daten verarbeiten, die einem Prozess oder einer Gruppe von Prozessen zugeordnet sind. Der resultierende Kontext ist ein Container. Anstatt ein Programm in den "Initial Containers" unter Verwendung des Dateisystems und der vom Betriebssystem initialisierten Netzwerkschnittstellen auszuführen, können Prozesse in anderen Containern ausgeführt werden, sodass ein anderes Dateisystem und ein anderes Dateisystem angezeigt werden andere Liste von Netzwerkschnittstellen. Daher teilen sich zwei Prozesse, die in unterschiedlichen Containern ausgeführt werden, nur den Kernel. Sie kennen vielleicht den Befehl chroot, mit dem ein Prozess in einer bestimmten Dateihierarchie ausgeführt werden kann. Container bringen die Idee ein paar Schritte weiter.
Dies ist natürlich nur eine sehr grobe Erklärung, aber ich hoffe, sie hilft bei der Klärung der Idee, was Container sind. Wofür sind sie gut?
Eine beliebte Schnittstelle zu den Containerfunktionen von Linux-Kerneln ist docker, ein Befehlszeilendienstprogramm, mit dem Artefakte für Dateisysteme ( Docker-Images ) erstellt und Prozesse in Containern ausgeführt werden können, auf die diese Dateisysteme zugreifen können. Diese Software-Suite ist auch in der Lage, virtuelle Ad-hoc-Netzwerksysteme zu erstellen, mit denen mehrere Container in einem privaten Netzwerk kommunizieren können.
Containerbasierte Technologien eignen sich für:
- Beschreiben skalierbarer komplexer Bereitstellungen.
- Stellen Sie Anwendungsentwicklern eine Umgebung zur Verfügung, die der Produktionsumgebung sehr ähnlich ist.
- Implementieren Sie unveränderliche Servermuster, da Software-Artefakte in der Regel ein vollständiges Betriebssystem und nicht nur ein Anwendungspaket beschreiben.
(Da Sie mit anderen Virtualisierungstechnologien wie Virtual Box vertraut zu sein scheinen, könnten Sie bemerken, dass diese Technologien auch die drei oben genannten Punkte bequem angehen können. Heutzutage gibt es ein recht kleines Spektrum an Virtualisierungstechnologien, und wir können die Frage nach ihrer Beliebtheit in vergleichen bestimmte Zusammenhänge mit der Popularität von Computersprachen: Es hängt wahrscheinlich von den technischen Vorzügen jeder einzelnen Lösung ab, aber auch von vielen Faktoren, die ich nur als "Zufall" bezeichnen werde.)