Die Containertechnologie, auch einfach als Container bezeichnet, ist eine Methode zum Packen einer Anwendung, damit sie mit ihren Abhängigkeiten von anderen Prozessen isoliert ausgeführt werden kann. Die wichtigsten öffentlichen Cloud-Computing-Anbieter, darunter Amazon Web Services, Microsoft Azure und Google Cloud Platform, setzen auf Containertechnologie, wobei Containersoftware Namen wie Docker, Apache Mesos, rkt (ausgesprochen „Rakete“) und Kubernetes enthält.
Die Containertechnologie hat ihren Namen von der Schifffahrt. Anstatt eine einzigartige Versandmethode für jedes Produkt zu finden, werden die Waren in Stahlcontainer verbracht, die bereits für die Aufnahme durch den Kran am Dock ausgelegt sind, und in das Schiff passen, das für die Standardgröße des Containers ausgelegt ist. Kurz gesagt, durch Standardisierung des Prozesses und Zusammenhalten der Elemente kann der Container als Einheit bewegt werden, und es kostet weniger, dies auf diese Weise zu tun.
Bei der Computercontainertechnologie ist es eine analoge Situation. Haben Sie jemals die Situation erlebt, in der ein Programm auf einem Computer perfekt läuft, sich dann aber in ein klobiges Durcheinander verwandelt, wenn es auf den nächsten Computer verschoben wird? Dies kann auftreten, wenn die Software von einem Entwickler-PC auf einen Testserver oder einen physischen Server in einem Unternehmensdatenzentrum auf einen Cloud-Server migriert wird. Probleme treten beim Verschieben von Software aufgrund von Unterschieden zwischen Computerumgebungen auf, z. B. des installierten Betriebssystems, der SSL-Bibliotheken, des Speichers, der Sicherheit und der Netzwerktopologie.
So wie der Kran den gesamten Container als Einheit aufnimmt, um ihn für den Transport auf das Schiff oder den LKW zu setzen, was den Transport erleichtert, erreicht die Computercontainertechnologie dasselbe. Die Containertechnologie enthält nicht nur die Software, sondern auch die Abhängigkeiten, einschließlich Bibliotheken, Binärdateien und Konfigurationsdateien, und sie werden als Einheit migriert, um die Unterschiede zwischen Computern zu vermeiden, einschließlich Betriebssystemunterschieden und zugrunde liegender Hardware, die zu Inkompatibilitäten und Abstürzen führen. Container erleichtern auch die Bereitstellung von Software auf einem Server.
Virtuelle Maschinen
Bevor Container an Popularität gewannen, waren virtuelle Maschinen ein früherer Ansatz. Hierbei konnte ein physischer Server mithilfe der Virtualisierungstechnologie, auch als virtuelle Maschine bezeichnet, für mehrere Anwendungen verwendet werden, wobei jede virtuelle Maschine das gesamte Betriebssystem sowie die auszuführende Anwendung enthält.
Auf dem physischen Server werden dann mehrere virtuelle Maschinen mit jeweils einem eigenen Betriebssystem und einer einzelnen Hypervisor-Emulationsschicht ausgeführt. Durch die gleichzeitige Ausführung mehrerer Betriebssysteme entsteht ein hoher Overhead auf dem Server, wenn Ressourcen verwendet werden, und die Anzahl der virtuellen Maschinen ist auf wenige begrenzt.
Im Gegensatz dazu wird bei der Containertechnologie auf dem Server ein einzelnes Betriebssystem ausgeführt, da jeder Container dieses einzelne Betriebssystem mit den anderen Containern auf dem Server gemeinsam nutzen kann. Die freigegebenen Teile des Betriebssystems sind schreibgeschützt, um die anderen Container nicht zu beeinträchtigen. Dies bedeutet, dass Container im Vergleich zu virtuellen Maschinen weniger Ressourcen des Servers mit einem geringeren Overhead benötigen und wesentlich effizienter sind, sodass viel mehr Container auf einen einzelnen Server gepackt werden können. Während beispielsweise für jede virtuelle Maschine möglicherweise Gigabyte an Speicher erforderlich sind, benötigt jeder Container, in dem ein ähnliches Programm ausgeführt wird, möglicherweise nur Megabyte.
Wie funktionieren Container?
Container sind für die Ausführung von Arbeiten in einer Architektur mit mehreren Containern eingerichtet, die als Containercluster bezeichnet wird. In einem Kubernetes-Container-Cluster gibt es einen einzelnen Cluster-Master, wobei die anderen verwandten Container als Knoten bezeichnet werden, bei denen es sich um mehrere Worker-Computer handelt. Die Rolle des Cluster-Masters besteht darin, die Workloads für die Knoten zu planen sowie deren Lebenszyklus und Upgrades zu verwalten.
Die Containertechnologie ist kein neues Phänomen und seit langem ein Kernmerkmal von Linux. Der Fortschritt der Containertechnologie in den letzten Jahren ist benutzerfreundlicher geworden, und Softwareentwickler haben sie aufgrund ihrer Einfachheit und Vermeidung von Kompatibilitätsproblemen angenommen. Sie ermöglichen es auch, ein Programm in kleinere Teile zu zerlegen, die als Microservices bezeichnet werden.
Der Vorteil des Programms als Bestandteil von Microservices besteht darin, dass verschiedene Teams an jedem der Container separat arbeiten können, solange die Wechselwirkungen zwischen den verschiedenen Containern aufrechterhalten werden, was die Entwicklung von Software schneller ermöglicht. Schließlich ermöglicht die Containertechnologie eine vollständige granulare Kontrolle über die Container.
Während Container alle Arten von Software ausführen können, lassen sich ältere Programme, die für die Ausführung auf einer virtuellen Maschine entwickelt wurden, nicht gut auf die Containertechnologie migrieren. Diese ältere Software, die auf einer virtuellen Maschine ausgeführt wird, kann auf eine Cloud-Plattform wie Microsoft Azure gestellt werden, sodass Container virtuelle Maschinen auf absehbare Zeit wahrscheinlich nicht vollständig ersetzen.
Wie verwalten Unternehmen Container?
Da so viel Software als Container ausgeführt wird, ist das Verwalten der Container mittlerweile eine Anforderung, und es ist schwierig, Grenzen zu überschreiten, ohne dass diese Aufgabe manuell ausgeführt werden kann. Eine spezielle Software für das Containermanagement ist erforderlich, und eine beliebte Open-Source-Lösung ist Kubernetes, die über mehrere Distributionen verfügt, darunter Red Hat OpenShift. Die Container-Management-Software erleichtert die Bereitstellung von Containern und funktioniert gut mit den schnellen Bereitstellungsstrategien der DevOps-Philosophie.
Ein weiteres großartiges Merkmal der Containertechnologie ist ihre Flexibilität. Bei einer virtuellen Maschine dauert das Hochfahren mehrere Minuten, so wie der PC auf Ihrem Schreibtisch zu Beginn des Tages hochgefahren wird. Vielmehr kann mit der Containertechnologie, da das Betriebssystem bereits auf dem Server ausgeführt wird, ein Container in wenigen Sekunden gestartet werden. Auf diese Weise können Container nach Bedarf gestartet und gestoppt werden, um sich zu Spitzenzeiten nach oben und nach unten zu bewegen, wenn sie nicht benötigt werden.
Wenn ein Container abstürzt, kann er außerdem schnell neu gestartet werden, damit er wieder zur Aufgabe zurückkehren kann. Diese Art der Verwaltung wird als Container-Orchestrierung bezeichnet. Software wie Docker Swarm kann diese Art der Orchestrierung steuern und die Aufgaben auf die Container-Cluster verteilen.
Da sich mehrere Container das gleiche Betriebssystem teilen, besteht die Sorge, dass die Containertechnologie weniger sicher ist als eine virtuelle Maschine. Dies liegt daran, dass bei einem Sicherheitsfehler im Host-Kernel mehrere Container betroffen sind. Es wurden Anstrengungen unternommen, um Container sicherer zu machen. Ein Ansatz besteht darin, dass Docker eine Signaturinfrastruktur benötigt, um zu verhindern, dass nicht autorisierte Container gestartet werden. Es gibt auch eine Container-Sicherheitssoftware wie Twistlock, die das Verhalten eines Containers abbildet und dann einen Container herunterfährt, der außerhalb des erwarteten Profils liegt.