tostphoto - stock.adobe.com
Anwendungskonfigurationen mit mehreren Docker-Files
Die Verwendung von mehreren Docker-Files vereinfacht die Konfiguration von verteilten Anwendungen. In diesem Artikel werden die wichtigsten Fragen zur Vorgehensweise beantwortet.
Die meisten Web-basierten Anwendungen im Produktionsbetrieb nutzen heutzutage mehrere Container. Das ermöglicht Kapazitätserweiterungen zur Abfederung verstärkter Workloads bei hohem Traffic. Der Einsatz mehrerer Docker-Files hilft dabei zu entscheiden, wie eine Anwendung partitioniert werden muss, damit deren funktionale Aggregation erfolgen kann. Doch bevor es so weit ist, sollten Anwender die Rahmenbedingungen klären.
Manche IT-Abteilungen nutzen Docker-Files nur, um mehr Frontend-Worker-Nodes hinter einem Load Balancer hochzufahren, um somit den Anforderungen der Nutzer gerecht zu werden. Doch selbst dann gilt es einige Faktoren zu berücksichtigen, etwa welche Anwendungen von Docker-Files profitieren können, wie viele Docker-Files eine Anwendung erfordert, und ob die IT bereits Prozesse festgelegt hat, um Docker-Files zu überwachen.
Überlegungen zur Konfiguration mit Docker-Files
Eine verteilte Anwendung zu erstellen und zu verwalten, kann ein komplexes Unterfangen sein. Docker-Files und spezialisierte Tools, die es beispielsweise auf GitHub gibt, versprechen eine Vereinfachung der Anwendungskonfiguration. Vor der Nutzung von Docker-Files sollten IT-Abteilungen sich die folgenden Fragen stellen:
Welche Arten von Anwendungen profitieren von mehreren Docker-Files?
Jede Anwendung mit einer Benutzeroberfläche im Frontend, einer Logik oder einem Prozessbestandteil sowie einem Speicher im Backend profitiert von der Verwendung mehrerer Docker-Files.
Ein Beispiel für diese Architektur ist das Beispiel Docker Voting App auf GitHub. Diese Anwendung nutzt Python, Node.js, Redis, PostgreSQL und eine .NET-Worker-Anwendung. Wer diese Anwendung auf der eigenen Maschine ausprobieren möchten, muss Drive-Sharing in der Docker-Settings-Anwendung aktivieren.
Jeder Node in dieser Anwendung verfügt über ein Docker-File mit eigener Konfiguration. Mitunter gibt es Varianten, die spezifische Aufgaben besonders gut lösen können, etwa Python oder ASP.NET Core für das Frontend der Webanwendung. Die Anwendung aus unserem Beispiel verfügt über nicht weniger als fünf Nodes unterschiedlicher Funktionalität für die Implementierung der Beispielanwendung, für jeden davon gibt es auch entsprechende Docker-Files.
Wie entscheidet man, welche Dienste eigene Docker-Files brauchen?
Bei der Docker Voting App aus unserem Beispiel stehen zwei Frontend-Anwendungen zur Verfügung, die aus einem einzelnen Node oder einem Cache- und einem Datenbank-Node plus einem einzelnen Worker-Node bestehen können. Eine Anwendung in funktionale Bereiche aufzuteilen, macht es entsprechend einfacher, verschiedene Optionen für Docker-Files für jeden Node anzubieten.
Wie viele Docker-Files sollte es pro Anwendung geben?
Für jeden einzelnen Dienst oder Funktion sollten Sie über ein Docker-File verfügen. In der Docker Voting App wird zum Beispiel ein Docker-File für jeden der fünf funktionalen Nodes verwendet.
Jeder Dienst verfügt über mehrere Docker-Files für die verschiedenen Implementierungsmethoden. Der Worker-Node verfügt über zwei Docker-Files mit spezifischen Anweisungen bezüglich der ASP.NET-Version und eine zweite für die Java-Implementierung. Beide enthalten eine minimale Anzahl an Anweisungen, die sich ausschließlich auf diesen Dienst beziehen.
Wie kommt eine Anwendung mit mehreren Docker-Files in den Container?
Der gängige Weg, eine Anwendung zu erstellen, die aus mehreren Docker-Files besteht, ist Docker Compose. Dafür wird eine YAML-Datei benötigt, in der eine Reihe von Befehlen den Container erzeugt.
Auf der Dokumentationsseite von Docker gibt es ein Listing der Compose-Datei für die Docker Voting App. Jeder funktionale Dienst wird dort in einem gesonderten Abschnitt geführt, der alles enthält, was für das Erstellen der App notwendig ist.
Das Keyword dockerfile ermöglicht die Vergabe eines anderen Dateinamens als dockerfile in der Datei docker-compose.yml.
Wie lässt sich ein zu Großer Anstieg der Ressourcennutzung verhindern?
Die besten Mittel für die Begrenzung der Ressourcennutzung in einer Containerarchitektur sind Ressourcenbegrenzungen oder Quotas.
Mit Docker können Anwender feste Speichergrenzen erzwingen, indem sie Kommandozeilenbefehle wie --memory-swap oder --kernel-memory verwenden. Auf ähnlichem Weg ist auch eine Begrenzung der CPU-Nutzung möglich.
Auch Kubernetes unterstützt die Vergabe von Verbrauchsgrenzen auf Basis eines Namensraums. Genutzt wird dafür eine YAML-Datei mit bestimmten Definitionen und Schlüsselwort-Begrenzungen.
Ein Namensraum in Kubernetes ähnelt einem Feature, das aus Programmiersprachen bekannt ist. Er dient dazu, einzelne Ressourcen mit entsprechenden Verwaltungs- und Sicherheitssteuerungen zu provisionieren oder instanziieren. Das Konzept ist mit einem virtuellen Workspace in Python vergleichbar.
Wie lassen sich mehrere Docker-Files am besten organisieren und überwachen?
Für das Erstellen einer verteilten Anwendung, die sich über mehrere Container hinweg erstreckt, ist der DevOps-Ansatz eine sehr naheliegende Wahl. DevOps eignet sich bestens für Quellcode-Verwaltungssysteme wie Git, um Versionierung und die Abhängigkeiten für jedes Release zu verwalten.
Die Konfiguration einer Anwendung so einfach wie möglich zu gestalten, trägt in besonderer Weise zum langfristigen Erfolg von Projekten bei. Ein guter Ansatzpunkt ist es, sich für erste Entwicklungen und Bereitstellungen mit einer der Beispielanwendungen zu beschäftigen.
Zu diesen sollte man dann seinen eigenen Code inkrementell hinzufügen, um bis zu einem ersten Release zu gelangen. Selbst wenn daraus noch kein marktreifes Produkt entstehen sollte, werden Entwickler auf diesem Weg eine Menge über ihren Code und dessen Lauffähigkeit lernen.