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

Implementierung der Docker-Bereitstellung von ElasticSearch und ElasticSearch-Head

In diesem Artikel wird hauptsächlich erläutert, w...

So erstellen Sie LVM für das XFS-Dateisystem in Ubuntu

Vorwort Die logische Datenträgerverwaltung von lv...

Tiefgreifendes Verständnis des Ereignisausführungsmechanismus von JavaScript

Inhaltsverzeichnis Vorwort Das Prinzip der asynch...

Spezifische Verwendung der Schnittstelle wx.getUserProfile im Applet

Kürzlich hat das WeChat Mini-Programm Anpassungen...

Eine kurze Erläuterung der Unterschiede zwischen FTP, FTPS und SFTP

Inhaltsverzeichnis Einführung in FTP, FTPS und SF...

Detaillierte Erklärung des Hash-Jump-Prinzips von Vue

Inhaltsverzeichnis Der Unterschied zwischen Hash ...

Die Bilder in HTML werden direkt durch base64-kodierte Strings ersetzt

Kürzlich stieß ich auf eine Webseite, die zwar Bil...

Detaillierte Erklärung der Nginx-Konfigurationsdatei

Die Hauptkonfigurationsdatei von Nginx ist nginx....

Das WeChat-Applet ermöglicht horizontales und vertikales Scrollen

In diesem Artikelbeispiel wird der spezifische Co...

Tipps zur Datenstatistik in MySQL

Als häufig verwendete Datenbank erfordert MySQL v...

Implementierung des Vue-Zählers

Inhaltsverzeichnis 1. Implementierung des Zählers...