Eine kurze Diskussion über die Docker-Compose-Netzwerkeinstellungen

Eine kurze Diskussion über die Docker-Compose-Netzwerkeinstellungen

Tutorial zur Netzwerknutzung

Offizielle Website docker-compose.yml Referenzdokument: Compose-Datei Version 3 Referenz

Genauere chinesische Übersetzung: Referenz zur Compose-Dateiversion 3

Netzwerke werden üblicherweise für Clusterdienste verwendet, sodass verschiedene Anwendungen im selben Netzwerk ausgeführt werden können und so das Problem der Netzwerkisolation gelöst wird. Diese Anwendung ist bei Schwarmbereitstellungen sehr verbreitet. In diesem Artikel wird darauf jedoch nicht eingegangen.

Im Allgemeinen werden für Clusterdienste häufig Docker-Compose.yml-Dokumente verwendet, um Anwendungsdienste schnell zu orchestrieren und bereitzustellen. Die offizielle Website bietet die folgenden Verwendungsszenarien und -methoden:

1. docker-compose.yml ohne explizite Netzwerkdeklaration

Erstellen Sie beispielsweise docker-compose.yml im app Verzeichnis mit folgendem Inhalt:

Version: '3'
Leistungen:
 Webseite:
  Magier: nginx:latest
  Containername: Web
  hängt ab von:
   -db
  Häfen:
   - „9090:80“
  Links:
   -db
 db:
  Bild: MySQL
  Containername: db1234567891011121314

Nach dem Starten der Container mit docker-compose up werden diese Container dem app_default -Netzwerk hinzugefügt. Verwenden Sie docker network ls um die Netzwerkliste anzuzeigen, und docker network inspect <container id> um die Konfiguration des entsprechenden Netzwerks anzuzeigen.

$ Docker-Netzwerk ls
NETZWERK-ID-NAME TREIBER-UMFANG
6f5d9bc0b0a0 app_default Brücke lokal
0fb4027b4f6d Brücke Brücke lokal
567f333b9de8 Docker-Compose_Default-Brücke lokal
bb346324162a Host Host lokal
a4de711f6915 mysql_app Brücke lokal
f6c79184ed27 mysql_default Brücke lokal
6358d9d60e8a keine null lokal
12345678910

2. Das Schlüsselwort „networks“ gibt ein benutzerdefiniertes Netzwerk an

Beispielsweise definiert die folgende Datei docker-compose.yml die Front- und Backnetzwerke und implementiert die Netzwerkisolation. Der Proxy und die Datenbank können nur über die App kommunizieren. Unter diesen kann custom-driver-1 nicht direkt verwendet werden. Sie sollten es durch eine der Optionen wie host, bridge, overlay usw. ersetzen.

Version: '3'

Leistungen:
 Proxy:
  Erstellen: ./Proxy
  Netzwerke:
   - Vorderseite
 App:
  Erstellen: ./app
  Netzwerke:
   - Vorderseite
   - zurück
 db:
  Bild: postgres
  Netzwerke:
   - zurück

Netzwerke:
 Front:
  # Verwenden Sie einen benutzerdefinierten Treiber
  Treiber: benutzerdefinierter Treiber-1
 zurück:
  # Verwenden Sie einen benutzerdefinierten Treiber, der spezielle Optionen akzeptiert
  Treiber: benutzerdefinierter Treiber-2
  Treiberoptionen:
   foo: "1"
   Balken: "2"123456789101112131415161718192021222324252627

Es ist erwähnenswert, dass hier zwei Netzwerke definiert sind, Back und Front. Es scheint, dass ihre Namen als Back und Font definiert sind, aber Sie können sie mit dem Befehl docker network ls nicht finden. Wenn Sie den Befehl docker-compose up im Verzeichnis myApp ausführen, sollten die beiden Netzwerke jeweils myApp_back und myApp_front entsprechen.

3. Konfigurieren Sie das Standardnetzwerk

Version: '2'

Leistungen:
 Webseite:
  bauen: .
  Häfen:
   - "8000:8000"
 db:
  Bild: postgres

Netzwerke:
 Standard:
  # Verwenden Sie einen benutzerdefinierten Treiber
  Treiber: custom-driver-11234567891011121314

4. Nutzen Sie ein vorhandenes Netzwerk

Netzwerke:
 Standard:
  extern:
   Name: mein-bereits-vorhandenes-Netzwerk1234

Aufgetretene Probleme

Nach dem Erlernen des oben Gesagten ist der Autor bereit, sein eigenes Projekt in die Praxis umzusetzen. Mein Projekt enthält zwei docker-compose.yml-Dateien und verwendet die links -Option, daher muss ich die Netzwerkkonfiguration verwenden.

Darunter wird eine docker-compose.yml verwendet, um den MySQL-Dienst zu starten, der sich im Verzeichnis mysql/ befindet:

 Version: "3"
Leistungen:
 Datenbankmaster:
  Bild: Master/MySQL:neueste
  Containername: dbmaster
  Häfen:
   - „3308:3306“
  Bände:
   - $HOME/Arbeit/Daten/dbmaster:/var/lib/mysql
  Umfeld:
   MYSQL_ROOT_PASSWORD: Master
  Protokollierung:
   Treiber: "JSON-Datei"
   Optionen:
    maximale Größe: „1000k“
    Max-Datei: "20"
  Netzwerke:
   - App

 Datenbanksklave:
  Bild: Slave/MySQL:neueste
  Containername: dbslave
  Häfen:
   - „3309:3306“
  hängt ab von:
   -dbmaster
  Bände:
   – $HOME/Arbeit/Daten/dbslave:/var/lib/mysql
  Umfeld:
   MYSQL_ROOT_PASSWORD: Sklave
  Protokollierung:
   Treiber: "JSON-Datei"
   Optionen:
    maximale Größe: „1000k“
    Max-Datei: "20"
  Links:
   -dbmaster
  Netzwerke:
   - App
Netzwerke:
  Standard:
  extern:
   Name: app12345678910111213141516171819202122232425262728293031323334353637383940414243

Zum Starten des Serviceprogramms wird eine weitere Datei docker-compose.yml verwendet, die sich im Verzeichnis cloudgo/ befindet:

Version: "3"
Leistungen:
 Webseite:
  Bild: nginx:latest
  Containername: Web
  hängt ab von:
   -Wolke gehen
  Häfen:
   - „9090:80“
  Bände:
   – $HOME/Work/docker/docker-compose/nginx/conf.d:/etc/nginx/conf.d
  Links:
   -Wolkegot
  Protokollierung:
   Treiber: "JSON-Datei"
   Optionen:
    maximale Größe: „1000k“
    Max-Datei: "20"
  Netzwerke:
   - App

 Cloudgo:
  Bild: cloudgo:latest
  Containername: Cloudgo
  Häfen:
   - „8080:8080“
  Protokollierung:
   Treiber: "JSON-Datei"
   Optionen:
    maximale Größe: „1000k“
    Max-Datei: "20" 
  externe_links:
   -dbmaster
   -dbSklave
  Netzwerke:
   - App
Netzwerke:
 App:
  extern: true123456789101112131415161718192021222324252627282930313233343536373839

Ich habe beschlossen, ein vorab erstelltes Netzwerk zu verwenden und sie dann diesem bereits erstellten Netzwerk hinzuzufügen, um die Kommunikation zu ermöglichen. Dazu habe ich den folgenden Befehl ausgeführt:

$ Docker-Netzwerk erstellt App1

Starten Sie anschließend die Ausführung der vorbereiteten Datei docker-compose.yml. Führen Sie zuerst die Konfigurationsdatei aus, um MySQL zu starten. Das Ergebnis ist wie folgt:

$ Docker-Compose nach oben
FEHLER: Der Dienst „dbmaster“ verwendet ein nicht definiertes Netzwerk „app“12

Es wurde erstellt, meldet aber immer noch einen Fehler, der besagt, dass das Netzwerk nicht definiert ist. Ich habe versucht, den Namen in mysql_app zu ändern, aber es wird immer noch dieselbe Fehlermeldung angezeigt. Letztendlich wurde bewiesen, dass dieser Ansatz nicht durchführbar ist. In der offiziellen Dokumentation wurden bis heute keine Beispiele dafür gefunden.

Daher wurde schließlich entschieden, die Netzwerkkonfiguration in der ersten Datei docker-compose.yml wie folgt zu ändern:

Netzwerke:
  mysql_app:
   Treiber: bridge123

Definieren Sie in dieser Datei ein Netzwerk zur späteren Verwendung. Die Änderung ist hier abgeschlossen. Die gleiche Änderung muss an anderen Stellen in der Datei vorgenommen werden, an denen auf das Netzwerk verwiesen wird. Gleiches gilt auch für die zweite Datei.

Andere Verwendungen

Verwenden Sie Aliase anstelle von Links

Das allgemeine Verwendungsformat ist wie folgt:

Leistungen:
 einige Dienste:
  Netzwerke:
   irgendein Netzwerk:
    Aliase:
     -alias1
     -alias3
   anderes Netzwerk:
    Aliase:
     -alias212345678910

Im folgenden Beispiel kann mein web direkt über database:3306 oder db:3306 auf den db zugreifen. Sie gehören zum selben Netzwerk und für db ist ein Host-Alias ​​festgelegt, daher ist diese Zugriffsmethode durchaus möglich.

Version: '2'

Leistungen:
 Webseite:
  hängt ab von:
   - Arbeiter
  Netzwerke:
   - neu

 Arbeitnehmer:
  hängt ab von:
   -db
  Netzwerke:
   - Vermächtnis

 db:
  Bild: MySQL
  Netzwerke:
   neu:
    Aliase:
     - Datenbank
   Vermächtnis:
    Aliase:
     -mysql
Netzwerke:
 neu:
 veraltet:123456789101112131415161718192021222324252627

Derzeit ist für die direkte Verwendung von depends_on kein Link mehr erforderlich. Wenn der Worker auf die Datenbank zugreifen muss, kann er direkt mysql:port verwenden.

Die wichtigsten Punkte bei der Nutzung von Netzwerken sind:
1. Passen Sie Ihr Netzwerk sorgfältig an
2. Beachten Sie die Beziehung zwischen dem Speicherort der Datei docker-compose.yml und der Standardbenennung des Netzwerks
3. Achten Sie darauf, mehrere alternative Lösungsansätze auszuprobieren

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Erläuterung der Docker Compose-Netzwerkeinstellungen
  • Docker fügt eine Brücke hinzu und legt den IP-Adressbereich fest
  • Docker-Benutzerdefinierte Brücke Docker0 und Befehlsvorgänge zum Öffnen, Schließen und Neustarten von Docker
  • Eine Fehlerbehebungserfahrung im CentOS-Docker-Bridge-Modus, bei dem auf den Host-Redis-Dienst nicht zugegriffen werden kann
  • Docker-Compose erstellt eine Brücke, fügt ein Subnetz hinzu und löscht eine Netzwerkkarte

<<:  Vue-Beispielcode mit dem Animationseffekt „Übergangskomponente“

>>:  MySQL5.6.31 winx64.zip Installations- und Konfigurationstutorial

Artikel empfehlen

Nginx-Lastausgleichsalgorithmus und Failover-Analyse

Überblick Der Lastenausgleich von Nginx bietet Up...

Tutorial-Diagramm zur Installation von TomCat unter Windows 10

Installieren Sie TomCat unter Windows Dieser Arti...

JavaScript implementiert Informationen zur Kennwortfeldüberprüfung

In diesem Artikelbeispiel wird der spezifische Ja...

Zwei Möglichkeiten zur Visualisierung von ClickHouse-Daten mit Apache Superset

Apache Superset ist ein leistungsstarkes BI-Tool,...

Zusammenfassung der Anwendungsbereiche von Kubernetes

Kubernetes ist aufgrund seiner Anwendungsportabil...

MySQL-Startfehler InnoDB: Sperren nicht möglich/ibdata1-Fehler

Beim Starten von MySQL in einer OS X-Umgebung wir...

Detaillierte Analyse des React Native-Startvorgangs

Einführung: Dieser Artikel verwendet das von reac...

Befehle zum Suchen der Domänen-IP-Adresse im Linux-Terminal (fünf Methoden)

In diesem Tutorial wird erklärt, wie Sie die IP-A...

Vue3.0 verwendet das Plug-In vue-grid-layout, um Drag-Layout zu implementieren

Inhaltsverzeichnis 1. Plugins 2. Zwischenspiel 3....