Definition

Container-Image

Was ist ein Container-Image?

Ein Container-Image ist eine feste, statische Datei, die ausführbaren Code enthält, um einen isolierten Prozess in einer IT-Infrastruktur auszuführen. Das Image besteht aus Systembibliotheken, System-Tools und anderen Plattformeinstellungen, die ein Softwareprogramm benötigt, um auf einer Containerisierungsplattform wie Docker, Kubernetes oder Podman ausgeführt zu werden. Das Image nutzt den Betriebssystemkern (OS Kernel) seines Host-Rechners mit.

Ein Container-Image wird aus Dateisystemschichten kompiliert, die auf einem übergeordneten oder Basis-Image aufgebaut sind. Diese Schichten fördern die Wiederverwendung verschiedener Systemkomponenten, sodass der Entwickler nicht für jedes Projekt alles von Grund auf neu erstellen muss. Technisch gesehen wird ein Basis-Image für ein völlig neues Container-Image verwendet, während ein übergeordnetes Image sich auf ein bestehendes Container-Image bezieht, das modifiziert wird. In der Praxis werden die Begriffe jedoch synonym verwendet.

Warum werden Container-Images verwendet?

Container-Images bündeln eine Anwendung und bieten eine konsistente und effiziente Möglichkeit, Anwendungen zu verpacken und bereitzustellen. Sie haben außerdem die folgenden Eigenschaften:

  • Portabilität und Konsistenz: Die erforderliche IT-Infrastruktursoftware ist in einem modularisierten Container enthalten, der auf mehrere Plattformen und Umgebungen übertragbar ist. Dadurch können Anwendungsentwickler häufige Inkompatibilitätsprobleme vermeiden, die beispielsweise auftreten, wenn die Version eines Betriebssystems, auf dem die Anwendung entwickelt und getestet wurde, nicht mit der in der Produktion installierten Version übereinstimmt.
  • Effizienz: Container sind leichter und effizienter als herkömmliche virtuelle Maschinen (VMs). Außerdem passen mehr Container auf einen einzelnen physischen Server als auf einen virtuellen Server, was Zeit und Geld spart.
  • Standardisierung und Konsistenz: Durch die Standardisierung der IT-Infrastruktur und der Betriebssysteme in Containern können Unternehmen eine konsistente Sicherheit und Governance gewährleisten.
  • Flexibilität: Container bieten eine Modularisierung, mit der die von einer Anwendung verwendeten Komponenten, wie beispielsweise eine Datenbank, aufrufbare Unterprogramme und sogar die Anwendung selbst, in einzelnen virtuellen Containern gespeichert werden können. Dies gibt der IT Flexibilität, da sie beispielsweise eine Datenbank in einem Container ändern kann, ohne andere Komponenten, wie zum Beispiel Anwendungen, die außerhalb des Datenbankcontainers existieren, ändern oder erneut testen zu müssen.

Arten von Container-Images

Entwickler klassifizieren in Registries gespeicherte Container-Images je nach Verwendungszweck als privat oder öffentlich. Private Registries sind nur für bestimmte Benutzer zugänglich und werden für Anwendungen verwendet, die nicht gemeinsam genutzt werden sollen, wie eine App, die für die Mitarbeiter einer bestimmten Organisation entwickelt wurde. Entwickler verwenden öffentliche Registries, um Anwendungen zu teilen, die sie öffentlich zugänglich machen möchten.

Container-Images werden mit Tools wie Docker oder Podman erstellt und verwaltet. Kubernetes hingegen dient als Plattform zur Orchestrierung und Verwaltung mehrerer Container über Cluster hinweg. Viele IT-Unternehmen bieten vorgefertigte Container-Images ihrer eigenen Systeme oder Anwendungen an, die den Prozess der Image-Erstellung vereinfachen können. Beispiele für von Anbietern bereitgestellte Container-Images sind Microsoft SQL Server, verschiedene Linux-Distributionen oder Images, die von Anbietern wie Amazon, IBM und Oracle öffentlich zur Verfügung gestellt werden. GitHub verwaltet seine eigenen Container-Images in der GitHub Container Registry und die Docker-Community verwaltet offizielle Python-Container-Images auf Docker Hub.

Bei der Erkundung dieser verschiedenen Container-Image-Typen müssen Entwickler sicherstellen, dass die bereitgestellten Images authentisch sind, damit keine Malware in ihre Systeme gelangt.

System des Container-Images
Abbildung 1: Ein einzelnes Container-Image kann in der Produktion als mehrere identische Container bereitgestellt werden.

Wie werden Container-Images erstellt?

Ein wesentlicher Vorteil von Container-Images ist die Möglichkeit, viele bereits in der IT-Infrastruktur vorhandene Komponenten für den Aufbau des Container-Inhalts zu verwenden. Dieser Inhalt kann an die Anforderungen der Anwendungen angepasst werden, die den Container aufrufen oder in ihm existieren. Container-Images bestehen aus den folgenden Komponenten:

  • Basis-Image: Container-Images werden in einer Schichtstruktur aufgebaut. Die unterste Schicht bildet das Fundament, auf dem die meisten Container-Workflows starten und die Dateisysteme des Containers gespeichert sind.
  • Bibliotheken: Hierbei handelt es sich um Sammlungen von vorab geschriebenem Code, den die Anwendung im Container ausführt.
  • Anwendungscode: Hierbei handelt es sich um ausführbare Dateien, die für die Implementierung der verschiedenen Programme und Befehle erforderlich sind.
  • Konfigurationsdateien: Diese regeln die Erstellung und den Betrieb des Containers.

Container können auch in die folgenden vier Funktionstypen unterteilt werden:

1. Object-Container: Diese speichern Metadaten zu einem bestimmten Container-Image, beispielsweise wann es erstellt wurde und von wem.

2. Dependency-Container: Sie verwalten die Objekterstellung und den Lebenszyklus von Objekten innerhalb der Anwendung.

3. Authentication-Container: Diese Container helfen dabei, die Identität eines Benutzers festzustellen und Zugriffskontrollrichtlinien durchzusetzen.

4. Containerlaufzeiten: Diese grundlegenden Softwareprogramme fungieren als Brücken zwischen den Container-Images, dem Betriebssystem und der Hardware, führen Anwendungen aus und stellen deren ordnungsgemäße Funktion sicher.

Wie funktionieren Container-Images?

Container-Images sind im Wesentlichen Blaupausen für die Erstellung von Containern. Sie werden durch die ersten zwölf Zeichen einer eindeutigen Kennung identifiziert, zum Beispiel Secure Hash Algorithm 256, und haben eine virtuelle Größe, die anhand der einzelnen zugrunde liegenden Ebenen gemessen wird. Images können mit oder ohne Tags versehen werden und sind nur über eine eindeutige Kennung suchbar.

Container-Images basieren auf offenen Standards und funktionieren über verschiedene Infrastrukturen hinweg, darunter virtuelle und physische Maschinen sowie Cloud-gehostete Instanzen, um eine umfassende Interoperabilität zu gewährleisten. Bei Containerbereitstellungen sind Anwendungen voneinander isoliert und von der zugrunde liegenden Infrastruktur abstrahiert. Moderne Container-Images folgen dem offenen OCI-Standard, was Interoperabilität und Kompatibilität zwischen verschiedenen Tools und Plattformen gewährleistet.

Container-Images können unterschiedlich groß sein. Große Images können alle Laufzeit-, Infrastrukturabhängigkeiten, Anwendungs- und Betriebssystem-Kernel-Images enthalten, die eine Anwendung zum Ausführen benötigt. Das Ergebnis kann ein schweres Container-Image sein, das zwar vollständig integriert, aber ressourcenintensiv und kompliziert zu warten ist, wenn irgendwo darin eine Änderung vorgenommen werden muss.

Ein weiterer, häufiger verwendeter Ansatz für die Containerisierung besteht darin, die verschiedenen Komponenten eines Ende-zu-Ende-Anwendungsausführungsprozesses in diskrete, einzelne Container zu modularisieren, die von der Anwendung nach Bedarf aufgerufen werden. Ein Container könnte beispielsweise die Datenbank enthalten. Ein anderes Container-Image könnte alle IT-Infrastruktur-Abhängigkeiten und unterstützenden Subroutinen enthalten, die die App zum Ausführen benötigt. Ein weiterer Container könnte die Sicherheits- und Autorisierungsroutine für die App oder die Laufzeitanweisungen enthalten. Auf diese Weise kann ein einzelnes Container-Image geändert werden, ohne dass alle anderen Container, die eine Anwendung verwendet, geändert werden müssen.

Zunächst laden Entwickler Container-Images in eine Container-Registry hoch, einem zentralen Speicherort für diese Images. Autorisierte Benutzer können sie dann in ihre Anwendungen ziehen.

Vor- und Nachteile von Container-Images

Container-Images bieten zahlreiche Vorteile, darunter die folgenden:

  • einfache Verwendung: Das Container-Image-Format ist so konzipiert, dass es schnell heruntergeladen werden kann und sofort startet.
  • Wiederverwendbarkeit: Da ein Container-Image eine Anwendung und ihre Abhängigkeiten bündelt, muss die App nicht für andere Umgebungen neu erstellt werden.
  • geringer Platzbedarf: Ein laufender Container verbraucht in der Regel weniger Rechenleistung und Memory als eine vergleichbare VM.

Container-Images haben auch die folgenden Nachteile:

  • Potenzial für betrügerische Images: Unternehmen müssen auf betrügerische Images achten und Benutzer in Best Practices schulen, wenn sie Images aus öffentlichen Container-Repositorys abrufen. Um dieses Problem zu vermeiden, können sie eine begrenzte Liste vertrauenswürdiger Images erstellen.
  • unkontrollierte Verbreitung von Container-Images: Unternehmen können eine Ansammlung ähnlicher oder ungenutzter Container-Images haben, was zu Speicherineffizienzen und potenziellen Sicherheitsrisiken führen kann.
  • Ressourcenverbrauch: Gestoppte Container werden nicht automatisch entfernt und verbrauchen weiterhin Storage-Ressourcen. Mit Docker-Befehlen können nicht verwendete Images und Container entfernt werden. Automatisierung kann auch verwendet werden, um Container nach einer vordefinierten Zeit der Nichtbenutzung zu löschen.

Container-Images auf einen Blick

Container-Images sind ein zentrales Werkzeug in der modernen Softwareentwicklung. Sie bieten eine effiziente, portable und standardisierte Möglichkeit, Anwendungen bereitzustellen. Durch ihren modularen Aufbau und die breite Unterstützung in Tools und Cloud-Umgebungen ermöglichen sie eine flexible und sichere Ausführung von Software. Vorausgesetzt, sie werden sorgfältig verwaltet und aus vertrauenswürdigen Quellen bezogen.

Erfahren Sie mehr über Server- und Desktop-Virtualisierung