Alle Blogposts Know-howProdukt-News 7 Minuten Lesezeit

Warum wir Dockerfile Support zu Deploio hinzugefügt haben

Tim Grethler
Verfasst von
Tim Grethler
Veröffentlicht
October 8, 2024
Diesen Blogpost teilen

Einführung

Bei Nine arbeiten wir gerade stark an der Weiterentwicklung von Deploio, unserer Plattform für einfaches Anwendungsdeployment. Wenn Sie dessen Entwicklung verfolgt haben, kennen Sie bereits unsere wesentlichen Fortschritte in diesem Bereich. Wenn Ihnen das Thema neu ist, empfehle ich Ihnen, unseren letzten Blogpost zu lesen oder sich unsere Docs anzuschauen, in denen wir Deploio vorstellen und seine Kernfunktion erklären.

Heute freuen wir uns, die neueste Erweiterung der Plattform bekanntgeben zu dürfen: Dockerfile Support. Diese Neuerung stellt einen wichtigen Schritt nach vorne dar – besonders für Teams und Entwickler, die sich mehr Kontroll- und Anpassungsmöglichkeiten in ihrem Deploymentprozess wünschen. Um aber die Bedeutung dieses Updates wirklich wertschätzen zu können, ist es wichtig zu verstehen, wie Deploio die Anwendungserstellung bisher gehandhabt hat.

Wie wir Anwendungen bisher erstellt haben: Buildpacks

Von Anfang an hat Deploio auf Buildpacks gesetzt, um den Prozess zu automatisieren, mit dem laufende Container-Images aus Quellcode erstellt werden. Das geht ganz unkompliziert: Sobald Sie ein Git-Repository mit Deploio verbinden und den Branch oder die Umgebung ausgewählt haben, erkennt Deploio automatisch die Art der Anwendung in Ihrer Codebase. Basierend darauf wird das passende Buildpack für den Erstellungsprozess verwendet. Das klingt theoretisch relativ einfach, bringt aber auch Komplexität mit sich, denn man muss immer Annahmen darüber treffen, welche Plugins, Erweiterungen oder einfache Abhängigkeiten zu erwarten sind.

Aber was genau sind Buildpacks? Und warum sind sie wichtig?

Was ist ein Buildpack?

Ein Buildpack ist im Prinzip ein automatisiertes Tool, das Quellcode in laufende Container-Images umwandelt, ohne dafür eine Dockerfile oder sonstige komplexe Konfigurationen zu benötigen. Sie können es sich als Möglichkeit vorstellen, mit der die Komplexität der Containererstellung einfach wegfällt. Buildpacks sind daher eine attraktive Option für Teams, die sich mit Docker, oder mit Container-Technologie im Allgemeinen, weniger gut auskennen.

Das Schöne an Buildpacks ist ihre Einfachheit. Sie erkennen die Sprache und die Abhängigkeiten Ihres Codes und bauen Ihre Anwendung auf einem vorkonfigurierten, vertrauenswürdigen Base-Image auf. Das bedeutet, dass niemals eine Dockerfile angefasst werden muss, um vom erstellten Code zum komplett funktionsfähigen Container zu gelangen. Sobald der Erstellungsprozess fertig ist, können Sie das Docker Image sogar herunterladen.

Warum Buildpacks (bis jetzt) grossartig waren 

Die Unkompliziertheit von Buildpacks sind ihre grösste Stärke – da sie den Container-Erstellungsprozess komplett übernehmen, können sich Entwickler ganz auf das Programmieren konzentrieren, ohne sich Gedanken um die Konfiguration der darunterliegenden Infrastruktur machen zu müssen. Das ist besonders für solche Teams von Vorteil, die schnell handeln und nicht in die Details der Containerisierung eintauchen wollen.

Ausserdem werden die vorgefertigten Base-Images, auf denen Buildpacks aufbauen, von vertrauenswürdigen Quellen verwaltet, sodass die Sicherheits- und Leistungsoptimierung im Hintergrund gehandhabt wird. Das entlastet Entwickler noch zusätzlich, sodass sie sich ganz auf das konzentrieren können, was sie am besten können: die Anwendungsentwicklung.

Obwohl Buildpacks sehr praktisch sind, bringen Sie jedoch auch Einschränkungen mit sich – besonders in Bezug auf komplexere oder nicht-standardmässige Workloads.

Die Einschränkungen von Buildpacks

Buildpacks stellen zwar eine schnelle und sichere Möglichkeit dar, um Anwendungen zum Laufen zu bringen, aber sie bieten nicht die nötige Flexibilität, um jeden Use Case abzudecken. Gerade die komplette Übernahme vieler Prozesse, die Buildpacks so nutzerfreundlich macht, kann eben auch einschränkend sein, wenn Sie eine detailliertere Kontrolle über die Erstellung Ihrer Container benötigen.

Beispielsweise bauen Buildpacks auf vorkonfigurierten Base-Images auf, die sich möglicherweise nicht für Anwendungen mit speziellen Anforderungen eignen. Wenn Ihre App zum Beispiel individuelle Abhängigkeiten oder eine bestimmte Version einer System Library erfordert, ist die Erstellung mit Buildpacks eventuell nicht umsetzbar. Ausserdem kann das Troubleshooting von Problemen bei Nutzung von Buildpacks mitunter wie ein Buch mit sieben Siegeln erscheinen, da ein so grosser Teil des Erstellungsprozesses nicht sichtbar ist. Dies führt zu einem Hin-und-Her zwischen unseren Kunden und uns. Manchmal läuft es sogar darauf hinaus, dass wir Buildpacks abspalten, um eine weitere Individualisierung durch den Kunden zu ermöglichen.

Anders gesagt vereinfachen Buildpacks zwar das Deployment standardmässiger Anwendungen, können aber für Teams, die eine detailliertere Kontrolle benötigen, zum Hindernis werden. Darum haben wir nun Dockerfile Support für Deploio eingeführt.

Was ist eine Dockerfile?

Wenn Sie diesen Blog lesen, ist die Wahrscheinlichkeit hoch, dass Ihnen das Konzept der Dockerfiles bereits bekannt ist. Trotzdem möchte ich Ihnen hier eine «einfache» Erklärung dazu geben, was Dockerfiles sind und wie sie funktionieren.

Bei einer Dockerfile handelt es sich um ein Script, das eine Reihe an Anweisungen zur Erstellung eines Docker-Images enthält. Im Gegensatz zu Buildpacks, die auf vorgefertigten Regeln und Bass-Images basieren, geben Dockerfiles Entwicklern die volle Kontrolle über jeden Schritt des Containerisierungs-Prozesses.

Mit einer Dockerfile können Sie alles selbst definieren – Sie bestimmen zum Beispiel das Base-Image, wie Abhängigkeiten installiert werden, welche Ports genutzt werden sollen und wie die Anwendung gestartet wird. Dieses hohe Mass an Kontrolle ist von wesentlicher Bedeutung, wenn Sie an komplexen Anwendungen arbeiten oder spezielle Leistungs-, Sicherheits- oder Umgebungsanforderungen haben.

Warum Dockerfiles für Deploio einen Wendepunkt darstellen

Mit Einführung von Dockerfile Support für Deploio geben wir Ihnen, den Entwicklern, mehr Flexibilität und Kontrolle darüber, wie Ihre Anwendungen erstellt und betrieben werden. Einige der Hauptgründe, warum Dockerfiles wichtig sind:

  1. Komplexere Workloads: Mit Dockerfiles können Sie Ihre Umgebung genau definieren. Dies ist besonders wichtig bei Anwendungen mit komplexen Anforderungen, wie etwa individuelle Abhängigkeiten, spezielle Betriebssystemkonfigurationen oder Legacy-Komponenten. Mit Dockerfiles steht es Ihnen frei, Ihren Container genau auf die Bedürfnisse Ihrer Anwendung abzustimmen.
  2. Kontrolle über den Erstellungsprozess: Während Ihnen Buildpacks jegliche Komplexität abnehmen, geben Ihnen Dockerfiles die volle Kontrolle über den Erstellungsprozess. Dadurch lässt sich die Erstellung optimieren, denn Sie bestimmen, wie Caching und Layer Management aussehen. Sogar die Grösse des letztlich erstellten Container-Images liegt in Ihrer Hand.
  3. Flexibilität der Base-Images: Buildpacks erfordern die Nutzung vorgefertigter Base-Images, die nicht unbedingt ideal auf Ihren Use Case abgestimmt sind. Mit Dockerfiles können Sie sich für ein beliebiges Base-Image entscheiden. Ob Sie auf ein minimales Alpine-Image setzen, um einen leichtgewichtigen Container zu erhalten, oder ob Sie ein massgeschneidertes Base-Image für Business-Anwendungen wünschen – es ist Ihre Entscheidung.
  4. Debugging und Troubleshooting: Da Dockerfiles einen kompletten Einblick darin bieten, wie Ihr Container erstellt wird, ist bei Auftreten von Problemen auch das Troubleshooting einfacher. Sollte etwas während der Erstellung schieflaufen, können Sie genau erkennen, was das Problem verursacht hat und wie es behoben werden kann, ohne dazu verschiedene Abstraktionsschichten durchsuchen zu müssen.

Die Verwendung von Dockerfiles in Deploio

Da Dockerfile Support nun komplett in Deploio integriert ist, haben Sie die Wahl. Sie können sich für das Tool entscheiden, das am besten zu Ihren Anforderungen passt – egal, ob Sie bei der Unkompliziertheit von Buildpacks bleiben oder in die feinmaschigen Kontrollmöglichkeiten von Dockerfiles eintauchen. Buildpacks sind nach wie vor eine ausgezeichnete Option, wenn Sie sich rein auf die Entwicklung konzentrieren wollen, ohne sich Gedanken um die darunterliegende Infrastruktur zu machen. Sie nehmen die Komplexität der Containerisierung weg, sparen Zeit und reduzieren die Konfiguration. Damit sind sie perfekt geeignet, um Anwendungen schnell und sicher zum Laufen zu bringen.

Wenn aber mehr Kontrolle benötigt wird – wenn Ihre Anwendung individuelle Abhängigkeiten, spezielle Systemkonfigurationen oder Optimierungen erfordert – dann eröffnen Ihnen Dockerfiles eine neue Welt der Möglichkeiten. Sie wollen Ihre Image-Ebenen individualisieren oder ein bestimmtes Base-Image nutzen? Oder vielleicht wollen Sie Ihre Anwendung optimieren, um deren Fussabdruck zu reduzieren? Dockerfiles ermöglichen Ihnen all das und noch mehr. Mit ihrer Flexibilität eignen sie sich perfekt für komplexe, nicht standardmässige Workloads.

Um mit Dockerfiles zu deployen, müssen Sie Ihre Dockerfile einfach nur zu Ihrem Repository hinzufügen. Deploio erkennt sie automatisch und ermöglicht es Ihnen so, jegliche Aspekte – vom Betriebssystem bis zu den kleinsten Abhängigkeiten – selbst zu bestimmen. Wenn Sie bereit sind, mit Dockerfiles durchzustarten, können Sie mithilfe unserer Dockerfile Build Dokumentation in den Prozess eintauchen.

Egal, ob Sie die Schnelligkeit von Buildpacks oder die Individualisierungsmöglichkeiten von Dockerfiles bevorzugen, Deploio steht Ihnen zur Seite. Sie wollen es ausprobieren? Wir sind gespannt, welche neuen Ideen Sie mit dieser zusätzlichen Flexibilität ins Leben rufen.