Zum Inhalt springen

Container und Buildpacks

Container sind ein gängiges Konzept in der Cloud-Infrastruktur. In diesem Dokument wollen wir erklären, was Container sind und warum sie gut für Ihre Anwendung sind. Dazu werfen wir einen Blick auf das am weitesten verbreitete Containerisierungs-Tool namens Docker. Wir werden aber auch zeigen, wie die AppCloud Ihre Anwendung mit Buildpacks automatisch für Sie containerisieren kann.

Bei Containern handelt es sich um ausführbare Instanzen Ihrer Anwendung, die zusammen mit allen für die Ausführung erforderlichen Abhängigkeiten verpackt sind. Diese lose isolierten Umgebungen sind nicht nur für die Cloud hilfreich, sondern können auch auf Container-Laufzeiten auf lokalen Rechnern oder anderen traditionelleren Konfigurationen ausgeführt werden.

Während virtuelle Maschinen (VMs) die zugrunde liegende Infrastruktur virtualisieren und daher ein Gastbetriebssystem benötigen, virtualisieren Container direkt das Betriebssystem und enthalten daher nur die Anwendung und ihre Abhängigkeiten. Dies macht Container sehr leicht und portabel. Da alle Abhängigkeiten der Anwendung im Container verpackt sind, sind sie plattformunabhängig.

Ihre Anwendung, die in einem Container verpackt ist und bereitgestellt werden kann, wird als Container-Image bezeichnet. Diese Images sind einfach zu erstellen und schnell zu starten, weshalb sie das Rückgrat jeder schnell skalierenden Infrastruktur sind.

Mit diesen Vorteilen unterstützen sie moderne Entwicklungstechniken und Architekturen wie DevOps und Micro-Services. Aufgrund ihrer geringen Größe verbessern sie die CPU- und Speichernutzung.

Das am weitesten verbreitete Containerisierungswerkzeug ist Docker. Es ist ein Open-Source-Projekt, das von einem Unternehmen mit dem gleichen Namen unterstützt wird. Es liefert die Containerisierungswerkzeuge, die zum Verpacken Ihrer Anwendung in Container-Images benötigt werden, hat aber auch zusätzliche Produkte in seinem Ökosystem, wie die Container-Registry Docker Hub, die als Repository für öffentliche (und private) Container-Images dient, einen Desktop-Client mit Docker Desktop und mehr.

Es liefert einen Client und Kommandozeilen-Tools und kann Images automatisch erstellen, indem es die Anweisungen aus einer Docker-Datei liest. Das bedeutet aber auch, dass Sie für jede Anwendung, die Sie mit Docker containerisieren wollen, eine solche Datei schreiben müssen.

Weitere Informationen über Docker und Docker Images im Allgemeinen finden Sie unter in der offiziellen Dokumentation.

Buildpacks sind eine Containerisierungsmethode, die speziell für die Cloud Foundry-Plattform entwickelt wurde, aber auch in anderen Cloud-Plattform-Projekten immer häufiger diskutiert wird. Kurz gesagt, Buildpacks können Ihre Anwendungs-Frameworks und Abhängigkeiten identifizieren und dann alles, was sie brauchen, in ein Container-Image packen. Im Vergleich zu Docker müssen Sie nicht einmal eine Anleitung schreiben, wie Sie Ihre Anwendung containerisieren - Buildpacks wissen bereits, wie es geht.

Damit Buildpacks dies tun können, gibt es viele Buildpacks, die auf verschiedene Frameworks, Sprachen und sogar Abhängigkeiten spezialisiert sind. Sie alle bestehen in der Regel aus 4 Skripten:

  • detect bestimmt, ob ein Buildpack für einen Anwendungstyp verwendet werden kann
  • supply verpackt alle Abhängigkeiten, die die Anwendung benötigt
  • finalize bereitet die Anwendung für die Ausführung vor
  • release gibt die Information preis, wie genau die Anwendung ausgeführt werden soll

Die Ausführung dieser Skripte wird als Staging bezeichnet. Das Ergebnis des Stagings wird Droplet genannt und funktioniert genauso wie jedes andere Container-Image.

Wenn ein Build-Artefakt auf eine Cloud Foundry-Plattform (wie die AppCloud) gepusht wird, durchläuft die Plattform die Erkennungsphase der Buildpacks der Plattform (oder verwendet das über ein Argument in der Push-Befehls-/Manifestdatei vordefinierte Buildpack). Das erste Buildpack mit einem erfolgreichen Detect-Lauf wird dann zur Erstellung eines Droplets verwendet. Nach diesem Staging-Prozess kann das Droplet bereitgestellt und auf der internen Container-Laufzeit ausgeführt werden.

Wenn Sie das von der Plattform zu verwendende Buildpack im Push-Argument oder in der Manifestdatei definieren, können Sie auch benutzerdefinierte Buildpacks aus der Open-Source-Community verwenden oder Ihr eigenes benutzerdefiniertes Buildpack erstellen.

Mit Buildpacks können Sie den Aufwand für das Skripting und die Containerisierung des Build-Artefakts Ihrer Anwendung direkt an die Cloud-Plattform delegieren, auf der Sie Ihre Anwendung veröffentlichen möchten.

Weitere Informationen über Buildpacks finden Sie in der offiziellen Cloud Foundry Dokumentation über Buildpacks.