GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Wie Cloud-Container funktionieren und ihre Vorteile

Tech-Trends kommen und gehen, aber Cloud-Container sind eine Technologie, die bleiben wird. Ihre Ursprünge lassen sich bis zu Unix von 1982 zurückverfolgen, aber Container fanden erst im letzten Jahrzehnt breite Akzeptanz als nächster logischer Schritt von der Virtualisierung. Heute sind sie ein beliebtes Mittel zur Anwendungsmodernisierung und -bereitstellung.

Das Ziel der Containerisierung – d. h. des Prozesses der Migration von Legacy-Apps in Container – besteht darin, eine bessere Möglichkeit zum Erstellen, Verpacken und Bereitstellen komplexer Softwareanwendungen in verschiedenen Umgebungen zu bieten. Die Containerisierung bietet eine Möglichkeit, Anwendungen weniger komplex bereitzustellen, zu aktualisieren/ändern/modifizieren und zu skalieren.

Container werden in Cloud-Umgebungen aufgrund ihres geringen Gewichts im Vergleich zu virtuellen Maschinen (VMs) immer beliebter. Viele Unternehmen betrachten Container als Alternative zu den umfangreichen Workloads von VMs.

Was sind Cloud-Container?

Compute-Container enthalten Anwendungscode zusammen mit seinen Bibliotheken und Funktionsabhängigkeiten, sodass sie überall ausgeführt werden können; ob auf einem Desktop-PC, einer traditionellen IT-Serverinfrastruktur oder der Cloud.

Sie sind klein, schnell und portabel, da Container im Gegensatz zu einer virtuellen Maschine nicht in jedem Fall ein vollständiges Betriebssystem enthalten müssen. Sie benötigen lediglich die Bibliotheken und Abhängigkeiten, die zum Ausführen der App erforderlich sind, und die anderen Funktionen und erforderlichen Ressourcen des Host-Betriebssystems nutzen.

Container werden aus Container-Images erstellt, bei denen es sich um Vorlagen handelt, die das System, die Anwendungen und die Umgebung des Containers enthalten. Bei Container-Images wird ein Großteil der Arbeit zum Erstellen eines Containers bereits für Sie erledigt. Sie müssen lediglich die Berechnungslogik hinzufügen. Es gibt viele verschiedene Vorlagen zum Erstellen anwendungsspezifischer Container, ebenso wie Bibliotheken und Vorlagen zum Entwickeln von Code.

Es gibt mehrere Websites für Containervorlagen, aber der Marktführer ist Docker, das den Containertrend im Jahr 2013 auslöste. Docker ist eine Reihe von Tools, mit denen Benutzer Container-Images erstellen, Images aus externen Registrierungen übertragen oder abrufen und Container darin ausführen und verwalten können viele verschiedene Umgebungen. Es betreibt auch das größte Distributionszentrum für Containervorlagen. Um zu erfahren, wie Sie Docker auf Ihrem Linux-System installieren, lesen Sie unsere Anleitung zur Installation und Verwendung von Docker.

Container sind in Größe und Komplexität erheblich reduziert und erfüllen oft nur eine einzige Funktion. Nur weil sie klein sind, heißt das nicht, dass sie nicht verwaltet werden müssen. Container werden durch einen als Orchestrierung bekannten Prozess verwaltet, der einen Großteil der betrieblichen Aufgaben automatisiert, die zum Ausführen containerisierter Arbeitslasten und Dienste erforderlich sind.

Die Orchestrierung umfasst die Verwaltung des Lebenszyklus eines Containers, Bereitstellung, Bereitstellung, Hoch- oder Herunterskalieren, Netzwerken, Lastenausgleich und mehr. Es gibt mehrere Orchestrierungs-Apps, aber die mit Abstand beliebteste ist Kubernetes, das ursprünglich von Google entwickelt wurde und jetzt von der Cloud Native Computing Foundation verwaltet wird.

Container vs. virtuelle Maschinen

Container werden hier und anderswo regelmäßig mit VMs verglichen und das aus gutem Grund. Sie arbeiten nach demselben Konzept, nämlich dem Betrieb mehrerer Anwendungsumgebungen auf derselben physischen Hardware.

VMs gelten als Grundlage der ersten Generation des Cloud Computing. Mit dem Aufkommen von 64-Bit-Computing haben sich Server über die 4-GB-Speichergrenze von 32-Bit-Prozessoren hinaus entwickelt. Die Einführung von Multi-Core erzeugte Rechenleistung für mehrere virtuelle Umgebungen. Mit genügend Speicher und Kernen ist es möglich, hundert oder mehr VMs auf einem physischen System auszuführen.

Eine VM benötigt eine vollständige Betriebsumgebung, die ein bis zwei Gigabyte Arbeitsspeicher verbraucht, unabhängig davon, ob sie sich auf einem Windows-Server oder einer Linux-Version befindet. Ein Container ist eine deutlich reduzierte Betriebsumgebung und benötigt nur 6 MB Arbeitsspeicher.

Der Vorteil ist, dass Sie Hunderte von Containern auf einem robusten Server haben können, solange Sie über den Arbeitsspeicher und die Verarbeitungsleistung verfügen, um alles zu bewältigen.

VM-Hypervisoren virtualisieren die physische Hardware und Container virtualisieren das Betriebssystem. Der Hypervisor verwaltet und koordiniert alle E/A- und Maschinenaktivitäten, gleicht die Last aus und verarbeitet alle physischen Aufgaben wie Verarbeitung und Datenverschiebung.

Ein Container-Manager wie Kubernetes übernimmt Softwareaufgaben, für die der Container nicht eingerichtet ist. Die App im Container hat mit ihren Bibliotheken und Abhängigkeiten alles, was sie braucht. Wenn etwas anderes vom Betriebssystem benötigt wird, kümmert sich der Container-Manager darum.

Bei VMs und Containern gibt es keine Entweder-Oder-Entscheidung. Sie können problemlos nebeneinander existieren, wobei Container innerhalb von VMs funktionieren.

Wie funktionieren Cloud-Container?

Die Container-Technologie wurde mit der ersten Trennung von Partitionen und Chroot-Prozessen in Unix geboren, das später zu Linux hinzugefügt wurde. Container bündeln ihre Abhängigkeitsdateien und -bibliotheken im Container, anstatt sich auf das zugrunde liegende Betriebssystem zu verlassen. Die Apps, die in Containern ausgeführt werden, sind keine ausgewachsenen, komplexen Apps, die in einer standardmäßigen virtuellen oder nicht virtuellen Umgebung ausgeführt werden. Jeder Container arbeitet virtuell isoliert, wobei jede Anwendung auf einen gemeinsam genutzten Betriebssystemkern zugreift, ohne dass VMs erforderlich sind.

Cloud-Container wurden entwickelt, um eine einzelne Anwendung zu virtualisieren, unabhängig davon, ob es sich um eine einfache Einzweck-App oder eine MySQL-Datenbank handelt. Container haben eine Isolationsgrenze auf Anwendungsebene und nicht auf Serverebene, sodass der Container isoliert wird, wenn ein Problem auftritt. Wenn es zu einem App-Absturz oder einem unerklärlichen übermäßigen Ressourcenverbrauch durch einen Prozess kam, betrifft dies nur diesen einzelnen Container und nicht die gesamte VM oder den gesamten Server. Der Orchestrator ist in der Lage, einen anderen Container hochzufahren, um den problematischen Container zu ersetzen. Außerdem wird der Container mit dem Problem heruntergefahren und neu gestartet.

Die Vorteile von Containern im Cloud Computing

Die Vorteile der Verwendung von Containern sind zahlreich. Erstens ähnelt die Verwendung von Vorlagen der Funktionsweise von Klassen und Bibliotheken in der objektorientierten Programmierung (OOP). In OOP erstellen Sie eine Klasse oder ein Objekt und verwenden es dann in mehreren Apps wieder. Dasselbe gilt für Container. Ein einzelnes Container-Image wird verwendet, um mehrere Container zu erstellen. Das OOP-Konzept der Vererbung gilt auch für Container, da Container-Images als Eltern für andere, stärker angepasste Container-Images fungieren.

Container werden konsistent auf einem Desktop, lokalen Server oder in der Cloud ausgeführt. Das macht das Testen vor dem Einsatz unkompliziert. Einige Szenarien erfordern eine Testumgebung, deren Größe der Bereitstellungsumgebung ähnlich ist, was bedeutet, dass beträchtliche Ressourcen für die Testumgebung bereitgestellt werden müssen. Container können vor der Cloud-Bereitstellung lokal getestet werden, mit der Gewissheit, dass die Leistung konsistent ist.

Der Hauptvorteil von Containern, insbesondere im Vergleich zu einer VM, besteht darin, dass Container leicht und portabel sind. Container teilen sich den Kernel des Betriebssystems der Maschine, wodurch viel Overhead eliminiert wird. Ihre geringere Größe im Vergleich zu VMs bedeutet, dass sie schnell hochgefahren werden können und Cloud-native Anwendungen, die horizontal skalieren, besser unterstützen.

  1. Sie sind plattformunabhängig:Container tragen alle ihre Abhängigkeiten mit sich und Sie können sie auf verschiedenen Linux-Varianten verwenden, solange Sie keine Kernel-Aufrufe durchführen.

  2. Unterstützt moderne Entwicklungsarchitekturen:Aufgrund einer Kombination aus Bereitstellungsportabilität/Konsistenz über Plattformen hinweg und ihrer geringen Größe eignen sich Container ideal für moderne Entwicklungs- und Anwendungsmethoden wie Agile, DevOps, Serverless und Microservices.

  3. Verbessert die Leistung:Containerisierte Apps sind in der Regel große Apps, die in überschaubare Teile zerlegt sind. Dies hat mehrere Vorteile, nicht zuletzt Leistungsverbesserungen, denn wenn eine Komponente mehr Ressourcen benötigt, wird der Container automatisch skaliert, um mehr CPU-Kerne/Speicher/Netzwerk bereitzustellen, und wird dann herunterskaliert, wenn die Last sinkt.

  4. Effizientes Debugging:Ein weiterer Vorteil der Containerisierung gegenüber monolithischen Anwendungen besteht darin, dass Leistungsengpässe schneller gefunden werden. Bei einer monolithischen App müssen Entwickler viel Trial-and-Error-/Eliminierungsprozess durchführen, um einen Leistungsengpass zu finden. Wenn er in Komponenten zerlegt wird, wird der fehlerhafte Code besser sichtbar und die Entwickler können schneller auf die Problemstelle zoomen.

  5. Hybrid-/Multi-Cloud-Unterstützung:Aufgrund ihrer Portabilität können Container zwischen On-Premises und der Cloud hin und her migrieren. Sie können auch von einem Cloud-Anbieter zu einem anderen wechseln.

  6. Anwendungsmodernisierung:Eine gängige Methode zur Modernisierung einer alten On-Prem-Anwendung besteht darin, sie zu containerisieren und „wie sie ist“ in die Cloud zu verschieben. Dieses Modell ist als „Lift and Shift“ bekannt und wird nicht empfohlen. On-Prem-Apps verhalten sich anders als Cloud-native Apps, und das einfache Verschieben einer On-Prem-App in die Cloud nutzt Cloud-Vorteile wie automatisches Hoch- und Herunterskalieren nicht.

  7. Verbessert die Auslastung:Unter einer monolithischen App muss die gesamte App und ihre gesamte Speichernutzung die Leistung steigern. Dies verlangsamt den Server. Bei einer containerisierten Anwendung muss nur diese leistungsintensive Komponente skaliert werden. Dies geschieht automatisch, und der Orchestrator skaliert die Ressourcen bei Bedarf hoch und wieder herunter, wenn die Aufgabe erledigt ist.

Schlussfolgerung

Container werden für Unternehmen immer beliebter, um On-Premises-Anwendungen in die Cloud zu migrieren und alle Vorteile der Cloud zu nutzen:Skalierbarkeit, Elastizität, DevOps-Entwicklung und Auslagern von On-Prem-Ressourcen an einen Cloud-Anbieter.

Die Technologie ist ausgereift, mit einer Reihe von Konkurrenten von Docker, einschließlich Microsoft Azure, und Konkurrenten von Kubernetes, wie Red Hat OpenShift. Die meisten Cloud-Anbieter bieten einige vorgefertigte Container- und Orchestrierungsdienste an, darunter auch wir hier bei Linode, mit einem verwalteten Kubernetes-Dienst.


Docker
  1. So exportieren und importieren Sie Docker-Container

  2. Überwachung von Docker-Containern:Vorteile, Best Practices und unverzichtbare Tools

  3. So teilen Sie Daten zwischen Docker-Containern

  4. So sichern und wiederherstellen Sie Docker-Container

  5. So halten Sie Docker-Container an und setzen sie fort

So stellen Sie einen Docker-MongoDB-Container bereit und verwalten ihn

So führen Sie SSH in Docker-Container ein [Schritt für Schritt]

So führen Sie Docker-Container aus

So benennen oder umbenennen Sie Docker-Container

Gewusst wie:Erste Schritte mit Windows-Containern und Docker

So verwalten Sie Docker-Container