Docker Networking - Erfahren Sie, wie Container miteinander kommunizieren



Erfahren Sie alles über Docker-Netzwerkfunktionen mit einem Verständnis für das Containernetzwerkmodell und dessen praktische Implementierung.

In der heutigen Welt sind Unternehmen an der Containerisierung interessiert, die starke Netzwerkfähigkeiten erfordert, um eine Containerarchitektur ordnungsgemäß zu konfigurieren. Daher wird das Konzept des Docker-Netzwerks eingeführt.

In diesem Blog über Docker Networking werden Sie die folgenden Themen behandeln:





Was ist Docker?

Um Docker zu verstehen, müssen Sie wissen, wie Anwendungen zuvor bereitgestellt wurden und wie Anwendungen jetzt mithilfe von Containern bereitgestellt werden.

Bereitstellung von Anwendungen auf alte und neue Weise - Docker Networking - Edureka



Wie Sie im obigen Diagramm sehen können, hatte der alte Weg Anwendungen auf dem Host.Daher teilen sich n Anwendungen die in diesem Betriebssystem vorhandenen Bibliotheken.Mit der Containerisierung verfügt das Betriebssystem jedoch über einen Kernel, der das einzige ist, was allen Anwendungen gemeinsam sein wird.Anwendungen können also nicht auf die Bibliotheken des anderen zugreifen.

So, Docker In einfachen Worten ist es eine offene Plattform zum Entwickeln, Versenden und Ausführen von Anwendungen, mit der der Benutzer mithilfe von Hilfe von Anwendungen von Infrastrukturen trennen kann Behälter Software schnell zu liefern.

Wie kommunizieren diese Container in verschiedenen Situationen miteinander?



Nun, das kommt durch Docker Networking.

Cross-Browser-Tests in Selen

Docker-Netzwerk

Bevor ich mich eingehend mit Docker Networking befasse, möchte ich Ihnen den Workflow von Docker zeigen.

Wie Sie im obigen Diagramm sehen können. Ein Entwickler schreibt einen Code, der die Anwendungsanforderungen oder die Abhängigkeiten in einer einfach zu schreibenden Docker-Datei festlegt, und diese Docker-Datei erzeugt Docker-Images. In diesem Bild sind also alle Abhängigkeiten vorhanden, die für eine bestimmte Anwendung erforderlich sind.

Jetzt sind Docker-Container nichts anderes als die Laufzeitinstanz von Docker Image. Diese Bilder werden auf den Docker Hub (Git-Repository für Docker-Bilder) hochgeladen, der öffentliche / private Repositorys enthält.

Aus öffentlichen Repositorys können Sie also auch Ihr Bild abrufen und Ihre eigenen Bilder auf den Docker Hub hochladen. Von Docker Hub aus ziehen dann verschiedene Teams wie Qualitätssicherungs- oder Produktionsteams dieses Image ab und bereiten ihre eigenen Container vor. Diese einzelnen Container kommunizieren über ein Netzwerk miteinander, um die erforderlichen Aktionen auszuführen. Dies ist nichts anderes als Docker Networking.

Sie können Docker Networking also als Kommunikationsdurchgang definieren, über den alle isolierten Container in verschiedenen Situationen miteinander kommunizieren, um die erforderlichen Aktionen auszuführen.

Was sind Ihrer Meinung nach die Ziele von Docker Networking?

Ziele von Docker Networking

Flexibilität - Docker bietet Flexibilität, indem beliebig viele Anwendungen auf verschiedenen Plattformen miteinander kommunizieren können.

Plattformübergreifend - Docker kann problemlos plattformübergreifend verwendet werden und funktioniert mithilfe von Docker Swarm Clusters auf verschiedenen Servern.

Skalierbarkeit - Docker ist ein vollständig verteiltes Netzwerk, mit dem Anwendungen individuell wachsen und skaliert werden können, während gleichzeitig die Leistung sichergestellt wird.

Dezentral - Docker verwendet ein dezentrales Netzwerk, das es ermöglicht, die Anwendungen zu verbreiten und hoch verfügbar zu machen. Für den Fall, dass plötzlich ein Container oder ein Host in Ihrem Ressourcenpool fehlt, können Sie entweder eine zusätzliche Ressource aufrufen oder an noch verfügbare Dienste übergeben.

Benutzerfreundlich - Mit Docker ist es einfach, die Bereitstellung von Diensten zu automatisieren und sie im täglichen Leben einfach zu verwenden.

Unterstützung - Docker bietet sofort einsatzbereite Unterstützung. Die Möglichkeit, Docker Enterprise Edition zu verwenden und alle Funktionen sehr einfach und unkompliziert zu nutzen, macht die Verwendung der Docker-Plattform sehr einfach.

Um die oben genannten Ziele zu erreichen, benötigen Sie das sogenannte Containernetzwerkmodell.

Möchten Sie verschiedene DevOps-Stufen erkunden?

Containernetzwerkmodell (CNM)

Bevor ich Ihnen sage, was genau ein Containernetzwerkmodell ist, möchte ich Sie über Libnetwork informieren, das erforderlich ist, bevor Sie CNM verstehen.

Libnetwork ist eine Open-Source-Docker-Bibliothek, die alle Schlüsselkonzepte des CNM implementiert.

So, Containernetzwerkmodell (CNM) Standardisiert die Schritte, die erforderlich sind, um das Netzwerk für Container mithilfe mehrerer Netzwerktreiber bereitzustellen. CNM erfordert einen verteilten Schlüsselwertspeicher wie eine Konsole, um die Netzwerkkonfiguration zu speichern.

Das CNM verfügt über Schnittstellen für IPAM-Plugins und Netzwerk-Plugins.

Die IPAM-Plugin-APIs werden zum Erstellen / Löschen von Adresspools und zum Zuweisen / Freigeben von Container-IP-Adressen verwendet, während die Netzwerk-Plugin-APIs zum Erstellen / Löschen von Netzwerken und zum Hinzufügen / Entfernen von Containern aus Netzwerken verwendet werden.

Ein CNM besteht hauptsächlich aus 5 Objekten: Netzwerkcontroller, Treiber, Netzwerk, Endpunkt und Sandbox.

Container-Netzwerkmodellobjekte

Netzwerk-Controller: Bietet den Einstiegspunkt in Libnetwork, der einfache APIs für Docker Engine zum Zuweisen und Verwalten von Netzwerken bereitstellt. Da Libnetwork mehrere integrierte und Remote-Treiber unterstützt, können Benutzer mit Network Controller einen bestimmten Treiber an ein bestimmtes Netzwerk anschließen.

Treiber: Besitzt das Netzwerk und ist für die Verwaltung des Netzwerks verantwortlich, indem mehrere Treiber teilnehmen, um verschiedene Anwendungsfälle und Bereitstellungsszenarien zu erfüllen.

Netzwerk: Bietet Konnektivität zwischen einer Gruppe von Endpunkten, die zum selben Netzwerk gehören und vom Rest isoliert sind. Wenn also ein Netzwerk erstellt oder aktualisiert wird, wird der entsprechende Treiber über das Ereignis informiert.

Endpunkt: Bietet die Konnektivität für Dienste, die von einem Container in einem Netzwerk bereitgestellt werden, mit anderen Diensten, die von anderen Containern im Netzwerk bereitgestellt werden. Ein Endpunkt stellt einen Dienst dar und nicht unbedingt einen bestimmten Container. Endpunkt hat auch einen globalen Bereich innerhalb eines Clusters.

Sandkasten: Erstellt, wenn Benutzer die Erstellung eines Endpunkts in einem Netzwerk anfordern. An eine Sandbox können mehrere Endpunkte an verschiedene Netzwerke angeschlossen sein, die die Netzwerkkonfiguration des Containers darstellen, z. B. IP-Adresse, MAC-Adresse, Routen, DNS.

Das waren also die 5 Hauptobjekte von CNM.

Lassen Sie mich nun die verschiedenen Netzwerktreiber erläutern, die am Docker-Netzwerk beteiligt sind.

Möchten Sie das DevOps-Lernen auf ein neues Level bringen?

Netzwerktreiber

Es gibt hauptsächlich 5 Netzwerktreiber: Bridge, Host, None, Overlay, Macvlan

Brücke: Das Bridge-Netzwerk ist ein privates internes Standardnetzwerk, das von Docker auf dem Host erstellt wurde. Alle Container erhalten also eine interne IP-Adresse und diese Container können über diese interne IP aufeinander zugreifen. Die Bridge-Netzwerke werden normalerweise verwendet, wenn Ihre Anwendungen in eigenständigen Containern ausgeführt werden, die kommunizieren müssen.

Gastgeber : Dieser Treiber entfernt die Netzwerkisolation zwischen dem Docker-Host und den Docker-Containern, um das Netzwerk des Hosts direkt zu verwenden. Auf diese Weise können Sie nicht mehrere Webcontainer auf demselben Host auf demselben Port ausführen, da der Port jetzt allen Containern im Hostnetzwerk gemeinsam ist.

Keiner : In dieser Art von Netzwerk sind Container keinem Netzwerk zugeordnet und haben keinen Zugriff auf das externe Netzwerk oder andere Container. Dieses Netzwerk wird also verwendet, wennSie möchten den Netzwerkstapel auf einem Container vollständig deaktivieren und,Erstellen Sie nur ein Loopback-Gerät.

Überlagerung : Erstellt ein internes privates Netzwerk, das sich über alle am Schwarmcluster beteiligten Knoten erstreckt. Overlay-Netzwerke erleichtern also die Kommunikation zwischen einem Schwarmdienst und einem eigenständigen Container oder zwischen zwei eigenständigen Containern auf verschiedenen Docker-Daemons.

Macvlan: Ermöglicht das Zuweisen einer MAC-Adresse zu einem Container, sodass dieser als physisches Gerät in Ihrem Netzwerk angezeigt wird. Anschließend leitet der Docker-Dämon den Datenverkehr anhand seiner MAC-Adressen an Container weiter. Der Macvlan-Treiber ist die beste Wahl, wenn erwartet wird, dass Sie direkt mit dem physischen Netzwerk verbunden sind, anstatt über den Netzwerkstapel des Docker-Hosts geleitet zu werden.

Okay, das war die ganze Theorie, die erforderlich war, um Docker Networking zu verstehen. Lassen Sie mich nun fortfahren und Ihnen praktisch zeigen, wie die Netzwerke erstellt werden und Container miteinander kommunizieren.

Zum Anfassen

Unter der Annahme, dass Sie alle Docker auf Ihren Systemen installiert haben, muss ich ein Szenario vorstellen.

Angenommen, Sie möchten den Kursnamen und die Kurs-ID speichern, für die Sie eine Webanwendung benötigen. Grundsätzlich benötigen Sie einen Container für die Webanwendung und einen weiteren Container als MySQL für das Backend. Dieser MySQL-Container sollte mit dem Webanwendungscontainer verknüpft sein.

Wie wäre es, wenn ich das oben genannte Beispiel praktisch ausführen würde?

Schritte:

  • Initialisieren Sie Docker Swarm, um einen Swarm-Cluster zu bilden.
  • Erstellen Sie ein Overlay-Netzwerk
  • Erstellen Sie Dienste für Webanwendungen und MySQL
  • Verbinden Sie die Anwendungen über das Netzwerk

Lass uns anfangen!

Schritt 1: Initialisieren Sie Docker Swarm auf dem Computer.

Docker-Schwarm init --advertise-addr 192.168.56.101

Das Flag –advertise-addr konfiguriert den Manager-Knoten so, dass seine Adresse als 192.168.56.101 veröffentlicht wird. Die anderen Knoten im Schwarm müssen unter der IP-Adresse auf den Manager zugreifen können.

Schritt 2: Wenn Sie diesen Manager-Knoten mit dem Worker-Knoten verbinden möchten, kopieren Sie den Link, den Sie erhalten, wenn Sie den Schwarm auf dem Worker-Knoten initialisieren.
Schritt 3: Erstellen Sie ein Overlay-Netzwerk.

Docker-Netzwerk erstellen -d Overlay myoverlaynetwork

Wobei myoverlay der Netzwerkname ist und -d es Docker Daemon ermöglicht, im Hintergrund ausgeführt zu werden.

Verwendung der Scannerklasse

Schritt 4.1: Erstellen Sie eine Dienst-Webanwendung1 und verwenden Sie das von Ihnen erstellte Netzwerk, um diesen Dienst über den Schwarmcluster bereitzustellen.

Docker-Dienst erstellen --name webapp1 -d --network myoverlaynetwork -p 8001: 80 hshar / webapp

Wo -pist für die Portweiterleitung,hsharist der Kontoname in Docker Hub und webapp ist der Name der Webanwendung, die bereits in Docker Hub vorhanden ist.

Schritt 4.2: Überprüfen Sie nun, ob der Dienst erstellt wurde oder nicht.

was ist darin__
Docker-Service ls

Schritt 5.1: Erstellen Sie jetzt einen Dienst MySQL und verwenden Sie das von Ihnen erstellte Netzwerk, um den Dienst über den Schwarmcluster bereitzustellen.

Docker-Dienst erstellen --name mysql -d --network myoverlaynetwork -p 3306: 3306 hshar / mysql: 5.5


Schritt 5.2: Überprüfen Sie nun, ob der Dienst erstellt wurde oder nicht.

Docker-Service ls

Schritt 6.1: Überprüfen Sie anschließend, welcher Container auf Ihrem Masterknoten ausgeführt wird, und wechseln Sie in den Container hshar / webapp.

Docker ps

Schritt 6.2: Sie können also sehen, dass sich nur der Webapp-Dienst auf dem Manager-Knoten befindet. Gehen Sie also in den Webapp-Container.

docker exec -it container_id bash nano var / www / html / index.php

Der Befehl docker ps listet beide Container mit ihrer jeweiligen Container-ID auf. Der zweite Befehl aktiviert diesen Container in einem interaktiven Modus.

Schritt 7: Ändern Sie nun den $ servername von localhost in mysql und das $ password von '' in 'edureka'. Ändern Sie außerdem alle erforderlichen Datenbankdetails und speichern Sie Ihre index.php-Datei mithilfe der Tastenkombination Strg + x und danach y zum Speichern und drücken Sie die Eingabetaste.

Schritt 8: Gehen Sie nun in den MySQL-Container, der auf einem anderen Knoten ausgeführt wird.

docker exec -it container_id bash

Schritt 9: Geben Sie die folgenden Befehle ein, um die Datenbank in MySQL zu verwenden, sobald Sie den MySQL-Container betreten haben.

Schritt 9.1: Erhalten Sie einen Zugriff, um den MySQL-Container zu verwenden.

mysql -u root -pedureka

Dabei steht -u für den Benutzer und -p für das Kennwort Ihres Computers.

Schritt 9.2: Erstellen Sie eine Datenbank in MySQL, mit der Daten von webapp1 abgerufen werden.

DATENBANK ERSTELLEN HandsOn

Schritt 9.3: Verwenden Sie die erstellte Datenbank.

VERWENDEN Sie HandsOn

Schritt 9.4: Erstellen Sie eine Tabelle in dieser Datenbank, die zum Abrufen von Daten aus webapp1 verwendet wird.

TABELLE ERSTELLEN Kursdetails (Kursname VARCHAR (10), Kurs-ID VARCHAR (11))

Schritt 9.5: Beenden Sie nun auch MySQL und Container mit dem Befehl Ausfahrt .

Schritt 10: Gehen Sie zu Ihrem Browser und geben Sie die Adresse als ein localhost: 8001 / index.php . Dadurch wird Ihre Webanwendung geöffnet. Geben Sie nun die Details der Kurse ein und klicken Sie auf Anfrage senden .

Schritt 11: Wenn Sie auf Abfrage senden klicken, wechseln Sie zu dem Knoten, auf dem Ihr MySQL-Dienst ausgeführt wird, und gehen Sie dann in den Container.

docker exec -it container_id bash mysql -u root -pedureka USE HandsOn SHOW-Tabellen wählen * aus kursdetails aus

Dies zeigt Ihnen die Ausgabe aller Kurse, von denen Sie die Details ausgefüllt haben.

Hier beende ich meinen Docker Networking-Blog. Ich hoffe dir hat dieser Beitrag gefallen. Du kannst nachschauen andere Blogs auch in der Serie, die sich mit den Grundlagen von Docker befasst.

Wenn Sie diesen Docker Container-Blog für relevant befunden haben, lesen Sie die von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 450.000 zufriedenen Lernenden auf der ganzen Welt. Der Edureka DevOps Certification Training-Kurs hilft den Lernenden, Kenntnisse in verschiedenen DevOps-Prozessen und -Tools wie Puppet, Jenkins, Docker, Nagios, Ansible und GIT zu erwerben, um mehrere Schritte in SDLC zu automatisieren.

Suchen Sie nach einer Zertifizierung in DevOps?

Hast du eine Frage an mich? Bitte erwähnen Sie es in den Kommentaren und ich werde mich bei Ihnen melden.