Das Docker-Ökosystem: Eine Einführung in gängige Komponenten

Einführung

Bei der Containerisierung werden Anwendungen auf tragbare und vorhersehbare Weise verteilt und bereitgestellt. Dies wird erreicht, indem Komponenten und ihre Abhängigkeiten in standardisierte, isolierte, leichte Prozessumgebungen, sogenannte Container, verpackt werden. Viele Unternehmen sind jetzt daran interessiert, Anwendungen und Dienste zu entwerfen, die problemlos auf verteilten Systemen bereitgestellt werden können, sodass das System einfach skaliert werden kann und Maschinen- und Anwendungsfehler überleben. Docker, eine Containerisierungsplattform, die entwickelt wurde, um die Bereitstellung in verschiedenen Umgebungen zu vereinfachen und zu standardisieren, war maßgeblich an der Einführung dieses Service-Design- und -Management-Stils beteiligt. Es wurde eine große Menge an Software erstellt, um auf diesem Ökosystem des verteilten Containermanagements aufzubauen.

Docker und Containerisierung

Docker ist die am häufigsten verwendete Containerisierungssoftware. Während es andere Containerisierungssysteme gibt, vereinfacht Docker die Erstellung und Verwaltung von Containern und lässt sich in viele Open-Source-Projekte integrieren.

Docker containerization

In diesem Bild können Sie (in einer vereinfachten Ansicht) sehen, wie sich Container auf das Hostsystem beziehen. Container isolieren einzelne Anwendungen und verwenden Betriebssystemressourcen, die von Docker abstrahiert wurden. In der Explosionsdarstellung auf der rechten Seite können wir sehen, dass Container durch „Layering“ erstellt werden können, wobei sich mehrere Container die darunter liegenden Layer teilen, wodurch die Ressourcennutzung verringert wird.

Die Hauptvorteile von Docker sind:

  • Lightweight resource utilization: Anstatt ein gesamtes Betriebssystem zu virtualisieren, isolieren Container auf Prozessebene und verwenden den Kernel des Hosts.

  • Portability: Alle Abhängigkeiten für eine containerisierte Anwendung sind im Container gebündelt, sodass sie auf jedem Docker-Host ausgeführt werden kann.

  • Predictability: Dem Host ist es egal, was im Container ausgeführt wird, und dem Container ist es egal, auf welchem ​​Host er ausgeführt wird. Die Schnittstellen sind standardisiert und die Interaktionen sind vorhersehbar.

Wenn Sie eine Anwendung oder einen Dienst für die Verwendung von Docker entwerfen, ist es in der Regel am besten, die Funktionalität in einzelne Container aufzuteilen. Dies ist eine Entwurfsentscheidung, die als serviceorientierte Architektur bezeichnet wird. Dies gibt Ihnen die Möglichkeit, Komponenten in Zukunft problemlos unabhängig voneinander zu skalieren oder zu aktualisieren. Diese Flexibilität ist einer der vielen Gründe, warum Docker für die Entwicklung und Bereitstellung interessant ist.

Klicken Sie aufhere, um mehr über das Containerisieren von Anwendungen mit Docker zu erfahren.

Service Discovery und globale Konfigurationsspeicher

Die Serviceerkennung ist eine Komponente einer Gesamtstrategie, die darauf abzielt, Container-Bereitstellungen skalierbar und flexibel zu gestalten. Die Dienstermittlung wird verwendet, damit Container ohne Eingreifen des Administrators Informationen über die Umgebung erhalten, in die sie eingeführt wurden. Sie finden Verbindungsinformationen für die Komponenten, mit denen sie interagieren müssen, und können sich registrieren, damit andere Tools wissen, dass sie verfügbar sind. Diese Tools fungieren in der Regel auch als global verteilte Konfigurationsspeicher, in denen beliebige Konfigurationseinstellungen für die Dienste festgelegt werden können, die in Ihrer Infrastruktur ausgeführt werden.

Docker service discovery

In der obigen Abbildung sehen Sie einen Beispielfluss, in dem eine Anwendung ihre Verbindungsinformationen beim Discovery-Service-System registriert. Einmal registriert, können andere Anwendungen den Erkennungsdienst abfragen, um herauszufinden, wie eine Verbindung mit der Anwendung hergestellt werden kann.

Diese Tools werden häufig als einfache Schlüsselwertspeicher implementiert, die in einer Clusterumgebung auf die Hosts verteilt werden. Im Allgemeinen stellen die Schlüsselwertspeicher eine HTTP-API zum Zugreifen auf und Festlegen von Werten bereit. Einige enthalten zusätzliche Sicherheitsmaßnahmen wie verschlüsselte Einträge oder Zugriffskontrollmechanismen. Die verteilten Stores sind für die Verwaltung der gruppierten Docker-Hosts von entscheidender Bedeutung. Sie dienen in erster Linie dazu, Details zur Selbstkonfiguration für neue Container bereitzustellen.

Einige der Aufgaben von Service Discovery Stores sind:

  • Zulassen, dass Anwendungen die Daten abrufen, die zum Herstellen einer Verbindung mit den Diensten erforderlich sind, von denen sie abhängig sind.

  • Zulassen, dass Dienste ihre Verbindungsinformationen für den oben genannten Zweck registrieren.

  • Bereitstellung eines global zugänglichen Speicherorts zum Speichern beliebiger Konfigurationsdaten.

  • Speichern von Informationen zu Clustermitgliedern nach Bedarf durch eine Clusterverwaltungssoftware.

Einige beliebte Diensterkennungstools und verwandte Projekte sind:

  • etcd: Serviceerkennung / global verteilter Schlüsselwertspeicher

  • consul: Serviceerkennung / global verteilter Schlüsselwertspeicher

  • zookeeper: Serviceerkennung / global verteilter Schlüsselwertspeicher

  • crypt: Projekt zum Verschlüsseln von etcd-Einträgen

  • confd: Überwacht den Schlüsselwertspeicher auf Änderungen und löst die Neukonfiguration von Diensten mit neuen Werten aus

Weitere Informationen zur Serviceerkennung mit Docker finden Sie in unserem Handbuchhere.

Netzwerk-Tools

Containerisierte Anwendungen eignen sich für ein serviceorientiertes Design, bei dem die Funktionalität in einzelne Komponenten aufgeteilt wird. Dies erleichtert die Verwaltung und Skalierung, erfordert jedoch noch mehr Sicherheit in Bezug auf die Funktionalität und Zuverlässigkeit der Vernetzung zwischen den Komponenten. Docker selbst stellt die grundlegenden Netzwerkstrukturen bereit, die für die Kommunikation von Container zu Container und von Container zu Host erforderlich sind.

Die nativen Netzwerkfunktionen von Docker bieten zwei Mechanismen zum Zusammenbinden von Containern. Die erste besteht darin, die Ports eines Containers freizugeben und optional dem Host-System für das externe Routing zuzuordnen. Sie können den zuzuordnenden Host-Port auswählen oder Docker die zufällige Auswahl eines hohen, nicht verwendeten Ports erlauben. Dies ist eine allgemeine Methode, um Zugriff auf einen Container zu gewähren, der für die meisten Zwecke gut funktioniert.

Die andere Methode besteht darin, Containern die Kommunikation über Docker-Verknüpfungen zu ermöglichen. Ein verknüpfter Container erhält Verbindungsinformationen zu seinem Gegenüber, sodass er automatisch eine Verbindung herstellen kann, wenn er so konfiguriert ist, dass er diese Variablen berücksichtigt. Dies ermöglicht den Kontakt zwischen Containern auf demselben Host, ohne dass zuvor der Hafen oder die Adresse bekannt sein muss, an der sich der Dienst befinden wird.

Diese grundlegende Netzwerkebene eignet sich für Einzelhost- oder eng verwaltete Umgebungen. Das Docker-Ökosystem hat jedoch eine Vielzahl von Projekten durchgeführt, die sich auf die Erweiterung der Netzwerkfunktionen konzentrieren, die Betreibern und Entwicklern zur Verfügung stehen. Einige zusätzliche Netzwerkfunktionen, die über zusätzliche Tools verfügbar sind, umfassen:

  • Überlagern Sie das Netzwerk, um den Adressraum auf mehreren Hosts zu vereinfachen und zu vereinheitlichen.

  • Virtuelle private Netzwerke für die sichere Kommunikation zwischen verschiedenen Komponenten.

  • Zuweisen von Subnetzen pro Host oder pro Anwendung

  • Einrichten von macvlan-Schnittstellen für die Kommunikation

  • Benutzerdefinierte MAC-Adressen, Gateways usw. konfigurieren für ihre container

Einige Projekte, die zur Verbesserung der Docker-Vernetzung beitragen, sind:

  • flannel: Überlagerungsnetzwerk, das jedem Host ein separates Subnetz zur Verfügung stellt.

  • weave: Überlagerungsnetzwerk, das alle Container in einem einzelnen Netzwerk darstellt.

  • pipework: Erweitertes Netzwerk-Toolkit für beliebig erweiterte Netzwerkkonfigurationen.

Klicken Sie aufhere, um die verschiedenen Ansätze zur Vernetzung mit Docker genauer zu betrachten.

Zeitplanung, Clusterverwaltung und Orchestrierung

Eine weitere Komponente, die beim Erstellen einer Cluster-Container-Umgebung benötigt wird, ist ein Scheduler. Scheduler sind dafür verantwortlich, Container auf den verfügbaren Hosts zu starten.

Schedule applications

Das obige Bild zeigt eine vereinfachte Planungsentscheidung. Die Anfrage wird über eine API oder ein Verwaltungstool gestellt. Von hier aus wertet der Scheduler die Bedingungen der Anfrage und den Status der verfügbaren Hosts aus. In diesem Beispiel werden Informationen zur Containerdichte von einem verteilten Datenspeicher- / Erkennungsdienst abgerufen (wie oben erläutert), damit die neue Anwendung auf dem Host mit der geringsten Auslastung platziert werden kann.

Dieser Hostauswahlprozess gehört zu den Kernaufgaben des Schedulers. Normalerweise verfügt es über Funktionen, die diesen Prozess automatisieren, wobei der Administrator die Möglichkeit hat, bestimmte Einschränkungen festzulegen. Einige dieser Einschränkungen können sein:

  • Planen Sie den Container auf demselben Host wie einen anderen angegebenen Container.

  • Stellen Sie sicher, dass sich der Container nicht auf demselben Host wie ein anderer Container befindet.

  • Stellen Sie den Container auf einen Host mit einem passenden Label oder Metadaten.

  • Stellen Sie den Container auf den am wenigsten ausgelasteten Host.

  • Führen Sie den Container auf jedem Host im Cluster aus.

Der Scheduler ist dafür verantwortlich, Container auf relevante Hosts zu laden und den Lebenszyklus des Prozesses zu starten, zu stoppen und zu verwalten.

Da der Scheduler mit jedem Host in der Gruppe interagieren muss, sind in der Regel auch Clusterverwaltungsfunktionen enthalten. Über diese kann der Scheduler Informationen über die Mitglieder abrufen und Verwaltungsaufgaben ausführen. Orchestrierung bezieht sich in diesem Zusammenhang im Allgemeinen auf die Kombination aus Containerplanung und Hostverwaltung.

Einige beliebte Projekte, die als Scheduler und Flottenmanagement-Tools fungieren, sind:

  • fleet: Scheduler- und Cluster-Management-Tool.

  • marathon: Scheduler und Service Management Tool.

  • Swarm: Scheduler und Service Management Tool.

  • mesos: Host-Abstraktionsdienst, der Host-Ressourcen für den Scheduler konsolidiert.

  • kubernetes: Erweiterter Scheduler, der Containergruppen verwalten kann.

  • compose: Container-Orchestrierungs-Tool zum Erstellen von Container-Gruppen.

Klicken Sie aufhere, um mehr über die grundlegende Planungs-, Containergruppierungs- und Clusterverwaltungssoftware für Docker zu erfahren.

Fazit

Inzwischen sollten Sie mit den allgemeinen Funktionen der meisten mit dem Docker-Ökosystem verbundenen Software vertraut sein. Docker selbst bietet zusammen mit allen unterstützenden Projekten eine Strategie für Softwareverwaltung, -design und -bereitstellung, die eine massive Skalierbarkeit ermöglicht. Wenn Sie die Funktionen verschiedener Projekte verstehen und nutzen, können Sie komplexe Anwendungsbereitstellungen ausführen, die flexibel genug sind, um unterschiedliche Betriebsanforderungen zu berücksichtigen.