Docker Compose Bridge Networking

Docker Compose Bridge Networking
Docker Compose ist eine einfache Möglichkeit, Multi-Container-Anwendungen bereitzustellen. Es automatisiert eine Menge der Buchung, Vernetzung und Ressourcenverwaltung von Anwendungen in einem einzigen ordentlichen Docker-Compose.YML -Datei. Sie können die App aufbauen, indem Sie Docker-Compose ausführen und sie mit Docker-Compose wieder nach unten drehen.

In unserer Docker -Umgebung wird viel hinzugefügt, das übersehen und dann mit dem letzten Befehl gelöscht wird. Eines der wichtigsten Objekte ist ein Brückennetzwerk. Darauf werden wir uns konzentrieren. Genauer gesagt Brückennetzwerke.

Docker Bridge Network

Docker hat viele netzwerkbezogene Treiber. Zwei der wichtigsten sind Bridge Networking -Treiber und Overlay One. Letzteres wird für den Docker Swarm -Modus verwendet, in dem Container, die über verschiedenen Knoten laufen. Bridge Networking ist jedoch diejenige, die uns hier interessiert.

Um ein neues Docker-Netzwerk namens My-Network zu erstellen und es zu inspizieren, rennen Sie:

$ Docker Network erstellen -d Bridge My -Network
$ docker inspizieren Sie My-Network

Sie werden unter anderem eine Subnetzmaske und ein Standard -Gateway sehen.


"Konfiguration": [

"Subnetz": "172.18.0.0/16 ",
"Gateway": "172.18.0.1 "

Jeder Container, der mit diesem Netzwerk verbunden wird, erhält eine IP im Bereich von 172.18.0.2 bis 172.18.255.254. Versuchen wir, ein paar Container in diesem Netzwerk zu erstellen:

$ docker run -dit -name container1 --network my -network ubuntu: neuest
$ docker run -dit -name container2 --network my -network ubuntu: neuest

Wenn Sie jetzt laufen, überprüfen Sie My-Network.

$ docker inspizieren Sie My-Network

"Behälter":
"8CE5CD67E6AED180B5D0B6B0FCD597175D6154C9208DAA9DE304AEC94757E99B":
"Name": "Container1",
"EndpointID": "93D020D22172D6C98A0B88E78A7A01F6D1A3D44B983E7454FBA7C1B1BE5FAE9D",
"MacAddress": "02: 42: AC: 12: 00: 02",
"Ipv4address": "172.18.0.2/16 ",
"IPv6address": ""
,
"AF1434DF6F86D2DF96ACA1D7348DD6C815A4989EC07FB0F3CFEA95D4A38B4F74":
"Name": "Container2",
"EndpointID": "3A5F57639C71685A10584FD392C20ABC5AE693684860BEF486404D26B332395A",
"MacAddress": "02: 42: AC: 12: 00: 03",
"Ipv4address": "172.18.0.3/16 ",
"IPv6address": ""

Wenn Sie ein anderes Netzwerk my-network2 erstellen, hat es eine andere Subnetzmaske wie 172.19.0.0/16 und Container darauf werden aus Containern in anderen Netzwerken isoliert. Im Idealfall möchten Sie also ein Netzwerk pro Anwendung, sodass jede App sicher und voneinander isoliert ist.

Wie komponiert ein Netzwerk erstellt

Docker Compose versteht die Idee hinter dem Ausführen von Diensten für eine Anwendung in einem Netzwerk. Wenn Sie eine App mithilfe der Docker Compose -Datei bereitstellen, wird Docker Compose auch dann ein neues Brückennetzwerk erstellt und den Container über dieses Netzwerk bereitstellen.

Wenn der Docker-Compose.YML befindet sich im Verzeichnis my-App, der Name des Verzeichnisses wird verwendet, um das Netzwerk sowie die darauf montierten Container zu benennen. Zum Beispiel, wenn ich ein Verzeichnis erstelle:

$ mkdir my-App
$ cd my-App
$ vim docker-compose.YML

Und fügen Sie dem Docker-Compose den folgenden Inhalt hinzu.YML -Datei:

Version: '3'
Dienstleistungen:
my-nginx:
Bild: Nginx: Neueste

Beachten Sie, wie wir keine Ports enthüllt haben. Lassen Sie uns diese App bereitstellen:

$ docker -compose up -d

Dadurch wird ein neues Netzwerk namens My-App_Default mithilfe von Bridge Network-Treiber erstellt, das wir zuvor besprochen haben.Sie können alle Netzwerke in Ihrem persönlichen Setup mithilfe von Docker Network LS auflisten und dann die Netzwerkschnittstelle auswählen, die dem Namen Ihres Verzeichnisses entspricht. Sobald Sie den Namen des Netzwerks haben, können Sie inspizieren, um alle Container zu sehen, die zusammen mit ihren individuellen IP -Adressen und Subnetzmaske Teil dieses Netzwerks sind.

Wenn wir einen anderen Container erstellen, in diesem Netzwerk direkt die CLI (dies wird für reale Anwendungsfälle nicht empfohlen), können wir tatsächlich mit unserem My-Nginx-Dienst sprechen.

$ docker run -dit -name container4 --network my -sapp_default ubuntu: letztlich
$ docker exec -it container4 Bash
root@a32ACDF15A97:/# curl http: // my-app_my-nginx_1

Dadurch wird eine HTML -Datei mit vertrauten Ausschnitten wie "Welcome to Nginx" darin ausdrucken. Der NGINX -Webserver ist innerhalb des Netzwerks erreichbar, ohne dass wir irgendwelche Ports veröffentlichen müssen! Noch wichtiger ist, dass Sie es nicht einmal mit seiner privaten IP erreichen müssen.

Wenn Sie eine Datenbank ausführen und sie mit dem Frontend verbinden, müssen Sie den Datenbankport überhaupt nicht veröffentlichen. Stattdessen können Sie den DB vom Webserver vom vorhersehbaren Hostnamen aufrufen. Auch wenn Docker Compose an anderer Stelle ausgeführt wird, wo und das IP und das Subnetz jetzt unterschiedlich. Die Container können immer noch miteinander sprechen.

Um einen Hafen in die Außenwelt zu veröffentlichen, schreiben wir natürlich so etwas wie Folgendes:

Version: '3'
Dienstleistungen:
my-nginx:
Bild: Nginx: Neueste
Hafen:
- "8080: 80"

Jetzt können die Leute von Port 8080 bei der IP Ihres Docker -Hosts von Port 8080 auf den Webserver zugreifen. Dies kann beispielsweise die öffentliche IP Ihres VPS oder nur Localhost sein, wenn Sie Docker auf Ihrem Desktop ausführen. Ich betonte erneut, dass Sie keine Ports für Ihren Datenbankcontainer freilegen müssen, da der Webserver direkt mit ihm sprechen kann, und dies verringert daher das Risiko von Datenbanken, die dem Internet ausgesetzt sind.

Wenn Sie Ihre Bewerbung abbringen, verwenden Sie:

$ docker-compose down

Dieses benutzerdefinierte Brückennetzwerk zusammen mit allen kurzlebigen Containern, die darauf erstellt und angehängt wurden, unter Verwendung des Docker-Compose.Die YML -Datei wird gelöscht. Lassen Sie Ihre Docker -Umgebung in einem sauberen Zustand.

Definieren Sie Ihr eigenes Netzwerk

Mit Compose können Sie Ihre eigene Netzwerkdefinition definieren. Dies würde unter anderem Optionen für Subnetzmaske und IPv6 -Adressen umfassen. Die Art und Weise, wie es fertig ist. Dieser Schlüssel hat keine Abhängigkeit. Unter dem Netzwerkschlüssel können wir jetzt verschiedene Attribute des Netzwerks definieren, jetzt werden wir es einfach halten und nur erwähnen, dass es Brückenfahrer verwenden sollte.

Version: '3'
Netzwerke:
Mein Netzwerk:
Fahrer: Brücke

Jetzt kann jeder Container eine Verbindung zu mehreren Netzwerken herstellen. Daher erwähnen wir im Abschnitt Dienste den Namen dieses benutzerdefinierten Netzwerks. Der Netzwerkschlüssel hier erwartet eine Liste von Netzwerken.

Version: '3'
Dienstleistungen:
my-nginx:
Bild: Nginx: Neueste
Netzwerke:
- Mein Netzwerk
- Ein anderer Netzwerk # Dies ist ein weiteres Netzwerk, das Sie möglicherweise erstellt haben.

Zuletzt ist die Reihenfolge, in der das Netzwerk definiert und dann in einer Dienstdefinition verwendet wird, relevant. Die gesamte YML -Datei sieht also ungefähr so ​​aus:

Version: '3'
Dienstleistungen:
my-nginx:
Bild: Nginx: Neueste
Netzwerke:
- Mein Netzwerk
Netzwerke:
Mein Netzwerk:
Fahrer: Brücke

Weitere Informationen

Während Sie Ihre eigenen Netzwerkdefinitionen schreiben, sollten Sie sich möglicherweise auf die offizielle Dokumentation beziehen. Für einen kurzen Blick auf die wichtigsten Netzwerke von Netzwerken finden Sie diesen Link und für die Servicelegelnetzwerkeschlüssel hier die Referenz.

Sie können auch versuchen, Subnetze in der Definition von Netzwerken auf der obersten Ebene anzugeben, damit die Dienste einen festgelegten Bereich von IP -Adressen haben können.