Published Date: February 1, 2021
Ein Container ist ein System, das es ermöglicht, Software modular, portabel und standardisiert zu gestalten, sodass sie problemlos in jeder Computerumgebung eingesetzt werden kann. Container sind so konzipiert, dass Sie sowohl den Code einer Anwendung als auch all ihre Abhängigkeiten enthalten können. Damit befindet sich alles, was zur Ausführung der Anwendung benötigt wird, an nur einem Ort.
Im Laufe der letzten Jahre sind Container zu einem beliebten Tool für Softwareentwickler geworden, was zum Teil daran liegt, dass sie leichtgewichtig sind – der typische Container ist sehr klein und besteht lediglich aus wenigen Megabytes. Daher kann er sehr schnell geladen und entladen werden, was zu einer hohen Funktionalität, Leistung, Portabilität und einfachen Verwaltung führt.
Container sind der Schlüssel zur Entwicklung und Bereitstellung von Microservices, ein Ansatz, der Anwendungen und die Anwendungsentwicklung vereinfacht, indem er sie in kompakte Module aufteilt, die jeweils nur eine einzige Funktion haben. Bereits jetzt haben Container und Microservices erheblichen Einfluss: IDC prognostiziert, dass bis Ende 2021 mehr als 95 % der neuen Microservices in Containern bereitgestellt werden, sodass es sich hier um einen Markt handelt, der Milliarden wert ist.
Große Cloud-Technologieanbieter wie Microsoft, Google und Amazon AWS setzen Container dank beliebter Tools wie Docker und Kubernetes ein, die zur optimierten Entwicklung und Bereitstellung für die Kunden beitragen.
In den folgenden Abschnitten beschäftigen wir uns eingehender damit, wie Container funktionieren, und besprechen die wichtigsten Plattformen, auf denen sie betrieben werden.
Was ist der Unterschied zwischen einem Container und einer virtuellen Maschine?
Sowohl bei Containern als auch bei virtuellen Maschinen geht es um die Idee der Virtualisierung, auch wenn sie sich in der Tiefe der Virtualisierung unterscheiden. Der größte Unterschied besteht darin, dass eine virtuelle Maschine eine virtualisierte Version des Betriebssystems sowie die Anwendung und die Abhängigkeiten für die Anwendung enthält. Obwohl dies im Vergleich zu den wenigen Megabytes eines typischen Containers zu VMs mit mehreren Gigabytes führen kann, haben virtuelle Maschinen dennoch ihre Berechtigung. Auf einem einzelnen Server können mehrere virtuelle Maschinen gleichzeitig ausgeführt werden, jede mit ihrem eigenen Betriebssystem. Unternehmen können somit beispielsweise auf ein und demselben Hardwaregerät gleichzeitig Windows-, Unix- und Linux-Server ausführen.
Das können Container nicht, denn die Container, die auf einem Gerät ausgeführt werden, haben alle dasselbe Betriebssystem. Folglich eignen sich Container am besten für Umgebungen, in der nicht mehrere Betriebssysteme erforderlich sind.
Welche Vorteile hat die Verwendung von Containern gegenüber virtuellen Maschinen?
Im Vergleich zu virtuellen Maschinen sind Container:
- kleiner
- schneller zu starten
- leichter zu verwalten
- portabler
Ihre geringere Größe führt wohl zum größten Vorteil des Containers: seiner Geschwindigkeit. Eine typische VM braucht unter Umständen Minuten, bis sie gestartet ist, während ein Container oftmals nach nur wenigen Sekunden hochgefahren ist. Bei einem Container ist es fast zu vernachlässigen, wenn Sie einige Dutzend Anwendungen gleichzeitig starten müssen. Bei einer virtuellen Maschine dauert der Vorgang gerne schon mal eine Stunde oder länger – und gegebenenfalls werden mehrere Hardwaregeräte benötigt.
Da das Betriebssystem einer virtuellen Maschine eingebettet ist, kann ihre Verwaltung komplex und zeitaufwändig sein. Administratoren von Rechenzentren müssen Host-Betriebssysteme patchen, und zwar möglicherweise viele verschiedene, die alle unterschiedliche Tools und unterschiedliches Fachwissen erfordern. Alles in einer komplexen VM-Umgebung, wie z. B. VMware, nachzuverfolgen, kann schwierig sein, während diese Herausforderung bei Containern geringer ist, da sie es Ihnen ermöglichen, eine Umgebung mit nur einem Betriebssystem zu verwalten.
Schließlich lassen sich virtuelle Maschinen nur schwer zwischen Cloud-Umgebungen (öffentliche und private Clouds) und lokalen Umgebungen mit physischen Servern verschieben. Container können Sie hingegen leichter in einer Umgebung entwickeln und in einer anderen bereitstellen.
Wie sicher sind Container?
Container sind an sich nicht sicherer oder weniger sicher als nicht containerisierte Umgebungen. Allerdings bringen sie einige neue Sicherheitsherausforderungen mit sich. Das liegt zu einem großen Teil an der ungewöhnlichen Komplexität des typischen Containers. Da Container-Images Systembibliotheken und andere abhängige Dateien und Dateisysteme beinhalten, sind Schwachstellen weit verbreitet. Bei einer Analyse von 1.000 der beliebtesten Docker-Container zeigten sich in jedem von ihnen eine Vielzahl von Schwachstellen, von denen viele kritisch waren. Folglich haftet Containern der Ruf an, dass sie unsicher sind.
Unter dem Strich sind Container zwar nicht grundsätzlich unsicher, aber Sie müssen sie mit der gleichen Aufmerksamkeit für Security-Aspekte entwickeln und verwalten wie jede andere Computing-Umgebung auch.
Sind Container sicherer als VMs?
Die Sicherheit sowohl von VMs als auch von Containern hängt von vielen Faktoren ab, wie z. B. davon, wie Sie die Technologien verwalten. Da Sicherheit keine quantifizierbare oder messbare Einheit ist, ist es unmöglich, die beiden Technologien direkt miteinander zu vergleichen.
Wenn Container ordnungsgemäß entwickelt und verwaltet werden, können sie recht sichere Umgebungen darstellen. Wie oben bereits erwähnt, sind Container komplexer als virtuelle Maschinen, und während VMs streng isoliert arbeiten, interagieren Container zuweilen auf unerwartete Weise miteinander, sodass sich unter Umständen Sicherheitsherausforderungen ergeben. Darüber hinaus müssen Sie die Sicherheit des Host-Betriebssystems des Containers berücksichtigen. Ein sicherer Container, der auf einer unsicheren Host-Plattform läuft, ist ebenso riskant wie ein unsicherer Container.
Was ist ein Cloud-Container?
Ein Cloud-Container ist ein Container, der auf einem cloud-nativen Dienst und nicht in einer lokalen Umgebung ausgeführt wird. Container funktionieren in jeder Art von Umgebung, aber ein cloud-natives Ökosystem bietet einem Unternehmen generell mehr Flexibilität und ermöglicht es Teams, die Container mit weniger Betriebskosten als in einer lokalen Umgebung zu konfigurieren und zu betreiben. Viele Cloud-Serviceanbieter bieten darüber hinaus webbasierte Monitoring-Tools, mit denen sich der Containerbetrieb, die Anwendungsentwicklung und die Performance leichter im Auge behalten lassen.
Container-as-a-Service, oder CaaS, ist ein konzeptionelles Betriebsmodell, mit dem Unternehmen Verträge mit einem cloud-basierten Serviceanbieter schließen können, um Container zu erstellen und zu verwalten. Es ähnelt anderen „as-a-Service“-Modellen, wie z.B. Software-as-a-Service oder Platform-as-a-Service, bei denen wiederverwendbare Softwarekomponenten bei Bedarf in Echtzeit zugeschaltet werden. In einer CaaS-Umgebung bietet ein Serviceanbieter einen vollständigen, cloud-nativen Rahmen, in dem Sie Container und die mit ihnen verbundenen Komponenten betreiben können. CaaS-Anbieter bieten im Allgemeinen auch Monitoring-Tools an, sodass Kunden einen besseren Einblick in ihre Containervorgänge haben.
Der größte Vorteil eines Container-as-a-Service-Modells besteht darin, dass sich Container einfacher und schneller erstellen und bereitstellen lassen. Da der Serviceanbieter die Containerverwaltung übernimmt, kann sich der Kunde stattdessen auf den Inhalt der eigentlichen Container konzentrieren, der sich direkter auf das Geschäftsergebnis auswirkt.
Was ist Container-Monitoring?
Container müssen überwacht werden, damit sichergestellt ist, dass sie die erwartete Leistung erbringen. Im Vergleich zu herkömmlich entwickelter Software erstellen Container mehrere Abstraktionsebenen zwischen der Anwendung und der zugrunde liegenden Plattform. Dies erfordert speziell entwickelte Tools und macht konventionelles Monitoring für DevOps-Fachleute zur Herausforderung. Containerumgebungen werden oftmals in großem Maßstab bereitgestellt, sodass herkömmliches Monitoring noch schwieriger wird. Wenn das Monitoring ordnungsgemäß erfolgen soll, benötigen Sie ein ausgefeiltes Visualisierungssystem, mit dem Sie sowohl einzelne Container als auch alle Container insgesamt überwachen können. Mit dieser Art von Monitoring-System können Entwickler und DevOps-Fachleute Probleme aufdecken und Performance- und Aktivitätstrends ausfindig machen, die ansonsten in ihrem Containerökosystem verborgen bleiben würden.
Was ist ein Linux-Container?
Linux-Container sind Open Source-Technologien, die von Red Hat und anderen Anbietern bereitgestellt werden und es Entwicklern ermöglichen, Anwendungen mit der kompletten Containerlaufzeitumgebung zu bündeln und zu isolieren. Da sie über alle für die Ausführung benötigten Dateien verfügen, kann die enthaltene Anwendung nahtlos zwischen Umgebungen wie z. B. zwischen Test-, Entwicklungs- und Produktionsumgebungen wechseln. Durch diese Portabilität können Linux-Container viel schneller und effizienter genutzt werden als herkömmliche Entwicklungs-Pipelines, die auf replizierte Testumgebungen angewiesen sind. Somit lassen sich Linux-Container bei vielen verschiedenen Problemen einsetzen, wenn Portabilität, Konfiguration und Isolation gefragt sind. Durch ihre Benutzerfreundlichkeit sind sie auch für zahlreiche IT-Sicherheitsinitiativen von entscheidender Bedeutung.
Es gibt zahlreiche Implementierungsmöglichkeiten für Linux-Container, die auf Mechanismen basieren, die der Linux-Kernel bereitstellt, insbesondere Linux-Namespaces und -cgroups. Hierzu zählen.
- Docker
- Linux-VServer
- Imctfy
- LXC
- LXD
- OpenVZ
- Rkt
- Singularity
- systemd-nspawn
- Podman
- Charliecloud
- Kata Containers
- Bottlerocket
Was ist Docker?
Docker ist die 2013 entwickelte branchenübliche Containerplattform zum Erstellen, Bereitstellen und Verwalten von containerbasierten Anwendungen. Sie erleichtert die Arbeit mit Containern während des gesamten Entwicklungszyklus. Mit der Docker Engine können Sie containerisierte Umgebungen erstellen; sie ist für die Interaktion zwischen dem Betriebssystem oder der virtuellen Maschine zuständig, auf dem bzw. der die Container ausgeführt wird. Docker Desktop beinhaltet Tools zum Entwickeln von Containern und Docker-Images. Dabei handelt es sich um Anwendungen, die den Containercode ausführen.
Ist Docker ein Microservice?
Docker selbst ist kein Microservice, aber sie können Microservices, die wichtige Teilkomponenten von Containern sind, mit ihm erstellen und betreiben. Oder andersherum: Microservices sind in der Regel in Container eingebettet und Container beinhalten die erforderliche Infrastruktur.
Was ist Kubernetes?
Kubernetes ist ein beliebtes Open Source-Container-Managementsystem, auch Container-Orchestrierungsplattform genannt, das zum Planen, Verwalten und Skalieren von Containern eingesetzt wird. Kubernetes beinhaltet Funktionen zum Bereitstellen von Containern für bestimmte Hosts, zum Load Balancing von Containern, wenn der Datenverkehr Überhand nimmt, zum Neustarten von Containern, wenn sie ausfallen und zum automatischen Zurücksetzen von Code bei größeren Vorfällen.
In den meisten Umgebungen existieren Docker- und Kubernetes-Plattformen nebeneinander. Kubernetes ist in der Regel auf Docker angewiesen, um Container zu verpacken und auszuführen, wobei Docker das Werkzeug für die Erstellung von Containern ist und Kubernetes die Plattform für die Orchestrierung dieser Container als Gruppe. Kubernetes hat an Popularität zugenommen und ersetzt zunehmend die Orchestrierungstools von Docker, da es insbesondere durch zwei Punkte hervorsticht: die effiziente Skalierung einer großen Anzahl von Containern und die Gewährleistung hoher Verfügbarkeit während des Betriebs.
Ist Kubernetes ein Microservice?
Wie Docker ist Kubernetes kein Microservice, spielt aber bei der Orchestrierung von Containern, in denen Microservices enthalten sind, eine wichtige Rolle.
Was sind Azure-Container?
Azur ist der Cloud-Computing-Dienst von Microsoft, und Azure-Container sind Containerinstanzen, die auf der Microsoft-Plattform ausgeführt werden. Das einfachste Containersystem von Microsoft ist Azure Container Instances (ACI), das so konzipiert ist, dass Docker-Container-Images nach Bedarf in einer verwalteten, serverlosen Umgebung ausgeführt werden können. Microsoft wirbt damit, dass Azure Container Instances die schnellste und einfachste Methode zur Bereitstellung von Containern in Azure ist, wenn keine Orchestrierung erforderlich ist. Der Azure Kubernetes Service (AKS), der über eine noch umfassendere Palette an Funktionen verfügt, kann für komplexe Anwendungen verwendet werden, für die mehrere Container, Skalierungsoptionen und koordinierte Upgrades erforderlich sind.
Was ist Amazon ECR?
Wie Microsoft hat auch Amazon mehrere containerorientierte Angebote, von denen die einfachste Amazon Elastic Container Registry (ECR) ist, ein verwaltetes Docker-System, das Entwicklern eine Umgebung zum Speichern, Bereitstellen und Verwalten ihrer Docker-Images bietet. Container-Images werden auf der S3-Speicherinfrastruktur von Amazon gespeichert, und Daten werden automatisch verschlüsselt und an mehreren Speicherorten gesichert. Darüber hinaus unterstützt ECR das Identitäts- und Zugriffsmanagement für komplexere Entwicklungsumgebungen. Amazon ECR ist standardmäßig für die Integration mit Amazon ECS konzipiert, das Gegenstand des nächsten Abschnitts ist.
Was ist Amazon ECS?
Amazon Elastic Container Service (ECS) ist ein Orchestrierungssystem, das abgesehen davon, dass es proprietär und auf Amazon beschränkt ist, Kubernetes ähnelt. Während Amazon ECR zum Speichern, Verschlüsseln und Verwalten von Container-Images verwendet wird, dient Amazon ECS zur Ausführung dieser containerisierten Anwendungen. Amazon hat ECS entwickelt, damit es sich passgenau in andere AWS-Dienste integriert, und es gilt generell als einfacher und kostengünstiger als Amazon EKS (siehe unten). ECS ist oftmals die natürliche Wahl zur Containerorchestrierung für Langzeit-AWS-Benutzer, die bereits ihre eigenen Skalierungsfunktionen entwickelt haben und denen es nichts ausmacht, dass sie an die proprietäre Plattform gebunden sind.
Was ist Amazon EKS?
Amazon Elastic Kubernetes Service (EKS) ist das cloud-basierte Kubernetes-Angebot von Amazon für die Containerorchestrierung. Es ähnelt ECS, mit dem Unterschied, dass EKS-Benutzer anstatt den proprietären Dienst von Amazon zu nutzen, vollen Zugriff auf eine Open Source-Kubernetes-Plattform haben, die auf ihren eigenen Servern oder auf einem anderen Cloud-Service ausgeführt wird. Viele Amazon-Kunden haben EKS übernommen, um die Beschränkung auf einen Anbieter zu vermeiden, durch die ihnen die Migration ihrer Container auf andere Dienste verwehrt würde. Darüber hinaus bietet EKS höherwertige Features als ECS, wie z. B. die Möglichkeit zur Unterstützung einer bedeutend höheren Anzahl an Container-Images, auch wenn diese Funktionen teurer sind mehr Aufwand für die Verwaltung, Konfiguration und Sicherung erfordern.
Benutzer, die die Wahl zwischen Amazon EKS und ECS haben, müssen sich für eines von beiden entscheiden.
Was ist AWS Fargate?
AWS Fargate ist eine serverlose Computing-Engine für Container, ein echtes Container-as-a-Service-System, mit dem Benutzer unabhängig von der zugrunde liegenden Serverplattform Container bereitstellen können. Sie funktioniert sowohl mit Amazon ECS als auch mit Amazon EKS, und der Benutzer muss in diesen Umgebungen keine Server bereitstellen und verwalten. Stattdessen ermöglicht es Fargate den Benutzern, die Server-Ressourcen nach Bedarf zu bezahlen, sodass sie ihre Containerumgebung nahtlos skalieren können. Tatsächlich ist Fargate so konzipiert, dass gar kein Servermanagement mehr erforderlich ist, kein Patchen, kein Skalieren und keine Größenfestlegung von Rechnern. Mit anderen Worten: Es verwandelt Ihre virtuellen Maschinen in einen monolithischen Ressourcenpool, den Sie nutzen können, ohne sich um Kapazitätsmanagement oder andere serverseitige Probleme kümmern zu müssen.
Was ist Amazon EC2?
Amazon Elastic Compute Cloud (EC2), eine geläufigere Alternative zu Fargate, ist ein beliebtes cloud-basiertes Modell zur Ausführung von Containern und anderen Anwendungen auf AWS. EC2 lässt sich genauer als Infrastructure-as-a-Service beschreiben, da es nicht speziell um die Bereitstellung von Containerdiensten herum erstellt wurde (auch wenn es häufig genau so verwendet wird). EC2, das es bereits seit mehr als 14 Jahren gibt, ist für seine große Nutzerbasis bekannt, einschließlich der Amazon-eigenen Handels-Website, die 2010 zu EC2 migriert ist. Als eine der am weitesten in der Branche verbreiteten und ausgereiftesten Computing-Plattformen verfügt EC2 über eine unendliche Vielfalt an Anwendungsmöglichkeiten. All dies macht EC2 zur natürlichen Plattform für den Betrieb so gut wie jeder Container- oder VM-Umgebung.
Was ist AWS App2Container?
AWS App2Container (zuweilen auch A2C geschrieben) ist ein Tool, das Entwickler zur Containerisierung vorhandener Anwendungen und zur Vorbereitung dieser Anwendungen auf den Einsatz in Verbindung mit den cloud-basierten Containerdiensten von Amazon verwenden können. Das Ziel von App2Container besteht darin, Benutzer auf ihrem Weg weg von herkömmlichen, monolithischen, serverbasierten Workloads zu unterstützen, ohne dass sie ihren Code ganz neu schreiben müssen. App2Container ist ein Befehlszeilentool, das diese Umwandlung (auch Refactoring genannt) automatisiert, indem es mit .Net- und Java-Anwendungen arbeitet. A2C steht AWS-Benutzern kostenlos zur Verfügung.
Was ist AWS Copilot?
AWS Copilot ist ein Befehlszeilentool, mit dem AWS-Benutzer ihre containerisierten Anwendungen auf den ECS- und Fargate-Plattformen starten und verwalten können. Mit diesem Tool können Benutzer beim Starten containerisierter Anwendungen die Erstellung ihrer Containerinfrastruktur und ihrer Abhängigkeiten automatisieren. Copilot-Benutzer erstellen Code, der eine Reihe von Aktionen zum Bereitstellen einer Produktionsumgebung und zum Starten von Containern auf AWS definiert. Das Tool kümmert sich im Hintergrund um Details wie Lastausgleich, zustandsabhängige Datenspeicherung und andere Komponenten.
Der Wechsel von herkömmlicher Software und virtuellen Maschinen hin zu Containern ist in vollem Gange. Grand View Research bewertete den Containermarkt im Jahr 2018 mit 1,5 Mrd.USD und geht davon aus, dass die Wachstumsrate in der Branche bis Ende 2025 bei 26,5 % liegen wird. Allied Market Research erwartet sogar einen noch stärkeren Zuwachs von 31,8 % im selben Zeitraum und geht davon aus, dass die Containertechnologie bis 2025 einen Wert von 8,2 Mrd. USD haben wird.
Wenn Sie mit Ihrer Anwendungsarchitektur den Schritt hin zu Containern noch nicht vollzogen haben, sollten Sie schnell damit beginnen. Die gute Nachricht ist, dass Cloud-Serviceanbieter ihre Kunden aktiv bei diesem Schritt unterstützen, indem sie ihnen Tools und Tutorials zur Verfügung stellen, die die Containerentwicklung, -bereitstellung und -konvertierung erleichtern. Auch wenn die Containertechnologie virtuelle Maschinen nie ganz verdrängen wird, muss jedes Unternehmen in naher Zukunft in die Containertechnologie investieren, um seine Umgebung zu optimieren und wettbewerbsfähig zu bleiben.
Die 5 grundlegenden DevOps-Praktiken
Was unterscheidet erfolgreiche DevOps-Teams von denen, die scheitern? Ganz einfach: Diese 5 grundlegenden Praktiken.