
Die Trends in der Anwendungsentwicklung führen die Branchen (sowohl im technischen als auch im nichttechnischen Bereich) zu einem stärker Cloud-nativen und verteilten Modell mit Digital-First-Strategien. Viele Unternehmen setzen neue Technologien und verteilte Arbeitsabläufe ein, um wettbewerbsfähig zu bleiben.
Software-Entwicklungspipelines ermöglichen es Teams, effizient zusammenzuarbeiten und die Produktivität zu erhalten. Viele Unternehmen, die sich schon früh für Containerisierung und Multi-Cloud-Umgebungen entschieden haben, sind heute führend in Sachen Agilität und Skalierbarkeit. Ganz gleich, ob Sie eine SaaS-Plattform entwickeln, Altsysteme modernisieren oder eine kontinuierliche Bereitstellung unterstützen – es ist wichtig zu verstehen, wie Container und Orchestrierungswerkzeuge in das Gesamtbild passen.
Was ist Docker?
Docker ist eine Open-Source-Container-Technologie und eine grundlegende Plattform für Software-Container. Diese Container kapseln eine Anwendung zusammen mit ihren Bibliotheken, Tools und der Laufzeit in ein einziges, replizierbares Paket, das konsistent in verschiedenen Hosting-Umgebungen wie AWS, Microsoft Azure und Google Cloud laufen kann.
Docker-Container haben dazu beigetragen, die Welt der Softwareentwicklung zu revolutionieren, indem sie es ermöglichen, dass Anwendungen unabhängig von der zugrunde liegenden Infrastruktur auf die gleiche Weise funktionieren.
Heute verwenden Entwickler Docker, um Module zu erstellen, die Microservices genannt werden. Diese dezentralisieren Pakete und teilen Aufgaben in separate, eigenständige Integrationen auf, die zusammenarbeiten. Die Entwickler einer landesweiten Pizzakette können zum Beispiel eine Microservices-Anwendung erstellen, die eine Bestellung aufnimmt, eine Zahlung verarbeitet und ein „Zubereiten“-Ticket für die Köche und ein „Liefern“-Ticket für die Fahrer erstellt. Diese Microservices würden dann zusammenarbeiten, um Pizzen im ganzen Land zuzubereiten und auszuliefern.
Schlüsselkomponenten der Docker-Architektur
Wenn Menschen über Docker sprechen, meinen sie oft Docker Engine, die Laufzeitumgebung, mit der Sie Container erstellen und ausführen können. Aber bevor Sie einen Docker-Container starten können, müssen Sie eine Dockerdatei erstellen.
- Dockerdatei: Definiert alles, was für die Ausführung des Container-Images benötigt wird, einschließlich der Netzwerkspezifikationen des Betriebssystems und der Dateispeicherorte.
- Docker-Image: Sobald Sie eine Docker-Datei haben, können Sie ein Docker-Image erstellen. Das ist die portable, statische Komponente, die auf der Docker-Engine läuft. Ein Docker-Image ist ein Satz von Anweisungen (oder eine Vorlage) zum Erstellen von Docker-Containern.
- Docker Compose: Wird in erster Linie für die Definition und Ausführung von Docker-Anwendungen mit mehreren Containern auf einem einzigen Host verwendet, ideal für die Entwicklung. Für das Clustering über mehrere Hosts hinwegs ist Kubernetes jetzt der Standard.
- Docker Swarm: Entwickler können Docker Swarm verwenden, um einen Pool von Docker-Hosts in einen einzigen, virtuellen Docker-Host zu verwandeln. Swarm verwaltet die Skalierung Ihrer Anwendung auf mehrere Hosts im Hintergrund.
- Docker Hub: Docker Hub ist ein umfangreiches und wachsendes Ökosystem von containerisierten Microservices. Es beherbergt Millionen von Container-Images, darunter offizielle Builds für beliebte Dienste wie NGINX, MySQL und Redis sowie Tausende von der Community gepflegte Images.
Wenn Sie mit AWS arbeiten, ist Amazon EC2 Container Service (ECS) ein Container-Management-Service, der Docker-Container unterstützt und es Ihnen ermöglicht, Anwendungen auf einem verwalteten Cluster von Amazon EC2-Instanzen auszuführen. ECS bietet Cluster-Verwaltung, einschließlich Task-Management und Scheduling, so dass Sie Ihre Anwendungen dynamisch skalieren können. Mit Amazon ECS entfällt auch die Notwendigkeit, einen eigenen Cluster-Manager zu installieren und zu verwalten. Mit ECS können Sie Docker-fähige Anwendungen starten und beenden, den Status Ihres Clusters abfragen und über API-Aufrufe auf andere AWS-Services (z. B. CloudTrail, ELB, EBS-Volumes) und Funktionen wie Sicherheitsgruppen zugreifen.
Die Entwicklung von Microservices in Docker erfordert neue Denkweisen und Ansätze, schafft aber auch unvergleichliche Möglichkeiten für den Aufbau stabiler, skalierbarer Integrationen.
Was sind Microservices?
Microservices bedeuten eine Abkehr von der klassischen monolithischen Anwendungsentwicklung. Anstatt eine große Anwendung zu entwickeln, erstellen Entwickler spezialisierte, in der Cloud gehostete Teilanwendungen, die jeweils eine bestimmte Geschäftsfunktion haben. Microservices verteilen den Lastausgleich von Anwendungen und können mit replizierbaren, skalierbaren Diensten, die miteinander interagieren, zur Stabilität beitragen.
Aber was ist der richtige Ansatz, um eine monolithische Integration aufzubrechen? Wenn eine Anwendung in Module zerlegt wird, neigen Benutzer dazu, geplanten Zerlegungsmustern zu folgen und die neuen Softwaremodule in logische Arbeitsgruppen zu sortieren.
Die Versand- und Tracking-Software einer Lebensmittelkette, die derzeit eine Anwendung für Obst verwendet, könnte beispielsweise in Module zerfallen, die Bananen, Orangen usw. verarbeiten. Dies kann die Nachverfolgung verbessern, aber die Zerlegung von Software in logische Teilbereiche – in diesem Fall Obstsorten – kann unvorhergesehene Folgen für die Geschäftsfähigkeit haben.
Die Microservice-Architektur verfolgt einen anderen Ansatz bei der Organisation von Modulen. Sie zerlegt Anwendungen rund um Geschäftsfunktionen und bildet funktionsübergreifende Teams, die Microservices entwickeln, unterstützen und kontinuierlich einsetzen. Fowler betont den Ansatz „Produkte, nicht Projekte“ für eine geschäftsorientierte Zerlegung: Die Lieferung eines Pakets ist kein einmaliges Projekt mit einem Team, das nach der Fertigstellung zerfällt, sondern eine fortlaufende, gemeinschaftliche Verpflichtung zur kontinuierlichen Lieferung hervorragender Produkte.
Microservices dezentralisieren auch die klassischen Speichermodelle der Entwicklung monolithischer Anwendungen. Microservices funktionieren am besten mit der nativen Verwaltung ihrer eigenen Datenspeicher, entweder mit wiederholten Instanzen derselben Datenbanktechnologie oder mit einer Mischung aus verschiedenen Datenbanktypen, die für den Dienst am besten geeignet sind. Die Vorteile des Microservice-Ansatzes werden noch erforscht. Seien Sie sich also, wie bei allen Systemen, der möglichen Fallstricke und Grenzen der Praxis bewusst.
Herausforderungen beim Aufbau einer Microservice-Architektur
Die Vorteile von Microservices sind mit einigen Herausforderungen verbunden:
- Service-Tracking: Dienste, die über mehrere Container und Hosts verteilt sind, können schwer zu verfolgen sein. Anstatt monolithische Integrationen nur an einer Stelle zu optimieren, müssen kooperierende Microservices, die über Ihre gesamte Umgebung verstreut sind, inventarisiert und schnell zugänglich sein.
- Schnelle Ressourcenskalierung: Jeder Microservice verbraucht weit weniger Ressourcen als monolithische Anwendungen, aber denken Sie daran, dass die Anzahl der Microservices in der Produktion mit der Skalierung Ihrer Architektur schnell wachsen wird. Ohne angemessene Verwaltung können viele kleine Hosts so viel Rechenleistung und Speicherplatz verbrauchen wie eine monolithische Anwendung.
- Ineffiziente Minimalressourcen: Wenn Sie die AWS-Umgebung nutzen, gibt es eine untere Grenze für die Ressourcen, die Sie jeder Aufgabe zuweisen können. Microservices können so klein sein, dass sie nur einen Teil einer minimalen Amazon EC2-Instanz benötigen, was verschwendete Ressourcen und Kosten zur Folge hat, die den tatsächlichen Ressourcenbedarf des Microservices übersteigen.
- Erhöhte Bereitstellungskomplexität: Microservices sind eigenständig und können in vielen Programmiersprachen entwickelt werden. Aber jede Sprache hängt von ihren eigenen Bibliotheken und Frameworks ab, so dass diese verschiedenen Programmiersprachen einen völlig unterschiedlichen Satz von Bibliotheken und Frameworks erfordern. Dies erhöht den Ressourcenaufwand (und die Kosten) und macht die Bereitstellung zu einer komplexen Angelegenheit.
Aber diese Hindernisse sind nicht unüberwindbar. Hier kann Containertechnologie wie Docker einspringen und bestehende Lücken füllen.
Docker als Retter in der Not für Microservices
Die Docker-Technologie begegnet diesen Microservices-Herausforderungen mit den folgenden Maßnahmen:
- Aufgabenisolierung: Erstellen Sie einen Docker-Container für jeden einzelnen Microservice. Dies löst das Problem der Ressourcenaufblähung durch übermäßig bereitgestellte Instanzen, die unter der fast nicht vorhandenen Belastung eines einzelnen Dienstes im Leerlauf laufen, und es können mehrere Container pro Instanz ausgeführt werden.
- Unterstützung von Programmiersprachen: Teilen Sie alle für die Ausführung einer Sprache erforderlichen Dienste, einschließlich Bibliotheken und Framework-Informationen, in verknüpfte Container auf, um die Verwaltung mehrerer Plattformen zu vereinfachen.
- Datenbanktrennung: Verwenden Sie Docker-Volumes oder dedizierte Datencontainer für die Speichertrennung.
- Automatisieren Sie die Überwachung: Tools wie Sumo Logic lassen sich in Docker integrieren, um laufende Container, Protokolle und Leistungsmetriken für Continuous Delivery Pipelines zu überwachen.
Fünf Grundsätze für eine erfolgreiche Architektur
- Kultivieren Sie ein solides Fundament. Alles beginnt mit Menschen. Stellen Sie also sicher, dass Ihre Mitarbeiter bereit sind, in einer Microservices-Umgebung zu leben und zu arbeiten.
- API-first-Design. Jeder Microservice sollte einen klar definierten API-Contract haben – oft REST oder gRPC – der als Kommunikationsschnittstelle dient. Entwerfen Sie Ihre Dienste nach dem API-first-Prinzip, um lose Kopplung und Auffindbarkeit zu unterstützen
- Sorgen Sie für eine Trennung der Anliegen. Jeder Microservice muss einen einzigen, definierten Zweck haben. Wenn Sie das Gefühl haben, dass sie eine Verantwortung hinzufügen sollten, fügen Sie stattdessen einen neuen Microservice (und eine neue API) hinzu.
- Produktionsfreigabe durch Testen. Schreiben Sie umfassende Testparameter für jeden Microservice und kombinieren Sie diese dann zu einer vollständigen Testsuite für die Verwendung in Ihrer Continuous Delivery Pipeline.
- Automatisieren Sie die Bereitstellung. Automatisieren Sie Code-Analysen, Container-Sicherheitsscans, Pass/Fail-Tests und jeden anderen möglichen Prozess in Ihrer Microservice-Umgebung. Nutzen Sie Tools für die Container-Orchestrierung und Continuous Deployment Pipelines, um Microservices in großem Umfang zu verwalten.
Wie hängen Docker und Kubernetes zusammen?
Kubernetes und Docker werden oft zusammen erwähnt, aber sie haben unterschiedliche Aufgaben im Container-Ökosystem. Docker stellt die Container-Laufzeit zur Verfügung und umfasst Tools wie Docker CLI, Docker Daemon, Docker Desktop, Docker Compose und Docker Hub. Außerdem bietet es ein natives Clustering-Tool für die Orchestrierung und Planung von Containern in Maschinenclustern.
Im Gegensatz dazu ist Kubernetes eine Plattform zur Orchestrierung von Containern, die entwickelt wurde, um die Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen in Clustern zu automatisieren. Es ist dazu gedacht, Cluster von Knoten in der Produktion effizient zu koordinieren. Es basiert auf dem Konzept der Pods, die im Kubernetes-Ökosystem Planungseinheiten sind (und einen oder mehrere Container enthalten können) und auf Knoten verteilt werden, um hohe Verfügbarkeit zu gewährleisten.
Man kann ein Docker-Build problemlos auf einem Kubernetes-Cluster ausführen, aber Kubernetes selbst ist keine vollständige Lösung und soll benutzerdefinierte Plugins enthalten.
Obwohl Kubernetes und Docker grundlegend unterschiedliche Technologien sind, arbeiten sie gut zusammen und erleichtern die Verwaltung und Bereitstellung von Containern in einer verteilten Architektur.
Gehen Sie über zu Microservices
Der Wechsel zu Microservices, die auf Docker-Containern basieren und über Kubernetes-Cluster orchestriert werden, ermöglicht es Unternehmen wie dem Ihren, skalierbarere, widerstandsfähigere und agilere Anwendungen zu entwickeln. Durch die Einführung einer Containerisierungsstrategie in Kombination mit DevOps-Automatisierung können Sie Ihre Anwendungsentwicklungs- und Bereitstellungsprozesse modernisieren.
Wenn Sie mehr über die Verwaltung von Containern erfahren möchten, sehen Sie sich an, wie die Docker App von Sumo Logic Ihnen helfen kann, Ihre Docker-Container und Kubernetes-Umgebung zu überwachen und zu optimieren, um eine bessere Leistung und Transparenz zu erzielen.

