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 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 -NetworkSie werden unter anderem eine Subnetzmaske und ein Standard -Gateway sehen.
…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: neuestWenn Sie jetzt laufen, überprüfen Sie My-Network.
$ docker inspizieren Sie My-NetworkWenn 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-AppUnd fügen Sie dem Docker-Compose den folgenden Inhalt hinzu.YML -Datei:
Version: '3'Beachten Sie, wie wir keine Ports enthüllt haben. Lassen Sie uns diese App bereitstellen:
$ docker -compose up -dDadurch 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: letztlichDadurch 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'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 downDieses 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'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'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'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.