Erläuterung der Docker Compose-Netzwerkeinstellungen

Erläuterung der Docker Compose-Netzwerkeinstellungen

Grundlegende Konzepte

Standardmäßig erstellt Compose ein Netzwerk für unsere Anwendung und jeder Container des Dienstes tritt dem Netzwerk bei. Auf diese Weise kann von anderen Containern im Netzwerk auf den Container zugegriffen werden. Darüber hinaus kann auch von anderen Containern auf den Container zugegriffen werden, indem der Dienstname als Hostname verwendet wird.

Standardmäßig basiert der Netzwerkname der Anwendung auf dem Compose-Projektnamen, der wiederum auf dem Namen des Verzeichnisses basiert, in dem sich die Datei docker-compose.yml befindet. Um den Projektnamen zu ändern, verwenden Sie das Flag --project-name oder die Umgebungsvariable COMPOSE_PORJECT_NAME.

Wenn sich eine Anwendung beispielsweise in einem Verzeichnis namens myapp befindet und die Datei docker-compose.yml folgendermaßen aussieht: version: '2'

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

Wenn wir docker-compose up ausführen, werden die folgenden Schritte ausgeführt:

  • Erstellen Sie ein Netzwerk namens myapp_default.
  • Erstellen Sie mithilfe der Webdienstkonfiguration einen Container, der dem Netzwerk myapp_default mit dem Namen „web“ beitritt.
  • Ein Container wird mit der Konfiguration für den DB-Dienst erstellt und mit dem Namen „db“ dem Netzwerk myapp_default beigetreten.

Container können über den Dienstnamen (Web oder DB) als Hostnamen aufeinander zugreifen. Beispielsweise kann der Webdienst postgres://db:5432 verwenden, um auf den Datenbankcontainer zuzugreifen.

Container aktualisieren

Wenn sich die Konfiguration eines Dienstes ändert, können Sie die Konfiguration mit dem Befehl „docker-compose up“ aktualisieren.

An diesem Punkt löscht Compose den alten Container und erstellt einen neuen. Der neue Container wird dem Netzwerk mit einer anderen IP-Adresse beitreten, der Name bleibt jedoch derselbe. Alle Verbindungen zum alten Container werden geschlossen und der Container findet den neuen Container und stellt eine Verbindung mit ihm her. Wie im vorherigen Artikel erwähnt, können Dienste standardmäßig über den Dienstnamen aufeinander zugreifen.

Links

Ermöglicht uns, einen Alias ​​zu definieren und diesen Alias ​​für den Zugriff auf andere Dienste zu verwenden. Beispiel: Version: „2“

Leistungen:
 Webseite:
 bauen: .
 Links:
  - "db:Datenbank"
 db:
 Bild: postgres

Auf diese Weise kann der Webdienst „db“ oder „Datenbank“ als Hostnamen verwenden, um auf den DB-Dienst zuzugreifen.

Angeben eines benutzerdefinierten Netzwerks

In manchen Fällen kann die Standardnetzwerkkonfiguration unseren Anforderungen nicht gerecht werden. In diesem Fall können wir das Netzwerk mit dem Befehl „networks“ anpassen. Mit dem Befehl „Netzwerke“ können wir komplexere Netzwerktopologien erstellen und benutzerdefinierte Netzwerktreiber und -optionen angeben. Darüber hinaus können wir Netzwerke auch verwenden, um Dienste mit extern erstellten Netzwerken zu verbinden, die nicht von Compose verwaltet werden.

Wie unten gezeigt, definieren wir zwei benutzerdefinierte Netzwerke. Version: '2'

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"

Der Proxy-Dienst ist vom DB-Dienst isoliert und jeder verwendet sein eigenes Netzwerk; der App-Dienst kann mit beiden kommunizieren.

Anhand dieses Beispiels lässt sich leicht erkennen, dass sich mit dem Befehl „networks“ problemlos eine Netzwerkisolierung und Verbindung zwischen Diensten erreichen lässt.

Konfigurieren des Standardnetzwerks

Zusätzlich zur Anpassung des Netzwerks können wir auch die Konfiguration für das Standardnetzwerk anpassen. Version: '2'

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

Netzwerke:
 Standard:
 # Verwenden Sie einen benutzerdefinierten Treiber
 Treiber: benutzerdefinierter Treiber-1

Auf diese Weise kann ein benutzerdefinierter Netzwerktreiber für die Anwendung angegeben werden.

Vorhandenes Netzwerk nutzen

In manchen Szenarien müssen wir kein neues Netzwerk erstellen, sondern nur einem vorhandenen Netzwerk beitreten. In diesem Fall können wir die externe Option verwenden. Beispiel:

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

Mehrere Möglichkeiten, externe Container mit Docker Compose zu verknüpfen

In Docker ist das Verknüpfen zwischen Containern eine sehr gängige Operation: Es bietet die Möglichkeit, auf die Netzwerkdienste eines der Container zuzugreifen, ohne dem Docker-Host die erforderlichen Ports zugänglich zu machen. Die Unterstützung dieser Funktion in Docker Compose ist ebenfalls sehr praktisch. Wenn die zu verknüpfenden Container jedoch nicht in derselben Datei docker-compose.yml definiert sind, wird es etwas problematischer und komplizierter.

Wenn Sie Docker Compose nicht verwenden, ist es relativ einfach, zwei Container mit dem Parameter --link zu verknüpfen. Nehmen Sie das nginx-Image als Beispiel:

docker run --rm --name test1 -d nginx #Starten Sie eine Instanz test1
docker run --rm --name test2 --link test1 -d nginx #Starten Sie eine Instanz test2 und stellen Sie eine Verbindung mit test1 her

Auf diese Weise wird eine Verknüpfung zwischen Test2 und Test1 hergestellt und auf die Dienste in Test1 kann in Test2 zugegriffen werden. Wenn Sie Docker Compose verwenden, ist dies noch einfacher. Nehmen Sie das obige Nginx-Image als Beispiel und bearbeiten Sie die Datei docker-compose.yml wie folgt:

Version: "3"
Leistungen:
 Prüfung2:
 Bild: nginx
 hängt ab von:
  -Test1
 Links:
  -Test1
 Prüfung1:
 Bild: nginx

Der endgültige Effekt unterscheidet sich nicht von der Verknüpfung, die mit dem normalen Docker-Befehl „docker run xxxx“ hergestellt wird. Dies ist einfach die idealste Situation.

Wie soll ich Container verknüpfen, wenn sie nicht in derselben Datei docker-compose.yml definiert sind?

Was soll ich tun, wenn der in der Datei docker-compose.yml definierte Container mit dem von docker run xxx gestarteten Container verknüpft werden muss?

Für diese beiden typischen Situationen sind hier meine persönlichen Testlösungen:

Methode 1: Stellen Sie sicher, dass die zu verknüpfenden Container zum selben externen Netzwerk gehören

Wir verwenden immer noch das Nginx-Image, um ein solches Szenario zu simulieren: Angenommen, wir müssen zwei von Docker Compose verwaltete Nginx-Container (Test1 und Test2) verknüpfen, damit Test2 auf die von Test1 bereitgestellten Dienste zugreifen kann. Hier nehmen wir den Ping als Standard.

Zunächst definieren wir den Inhalt der Datei docker-compose.yml des Containers test1 wie folgt:

Version: "3"
Leistungen:
 Prüfung2:
 Bild: nginx
 Containername: test1
 Netzwerke:
  - Standard
  - app_net
Netzwerke:
 app_net:
 extern: wahr

Der Inhalt des Containers test2 ist im Wesentlichen derselbe wie der von test1, außer dass es zusätzliche external_links gibt. Es ist zu beachten, dass die kürzlich veröffentlichte Docker-Version keine external_links mehr zum Verknüpfen von Containern verwenden muss. Der DNS-Dienst des Containers kann korrekte Urteile treffen. Wenn Sie daher mit einer älteren Version von Docker kompatibel sein müssen, lautet der Inhalt der Datei docker-compose.yml des Containers test2:

Version: "3"
Leistungen:
 Prüfung2:
 Bild: nginx
 Netzwerke:
  - Standard
  - app_net
 externe_links:
  -Test1
 Containername: test2
Netzwerke:
 app_net:
 extern: wahr

Ansonsten ist die Definition der docker-compose.yml von test2 genau dieselbe wie die von test1 und es ist nicht erforderlich, zusätzliche external_links anzugeben. Verwandte Fragen finden Sie in den verwandten Fragen auf Stackoverflow: Docker-Compose + externer Container.

Wie Sie sehen, verwenden beide Container in ihren Definitionen dasselbe externe Netzwerk app_net. Daher müssen wir das externe Netzwerk vor dem Starten der beiden Container mit dem folgenden Befehl erstellen:

Docker-Netzwerk erstellt App_Net

Starten Sie anschließend die beiden Container mit dem Befehl docker-compose up -d und führen Sie anschließend docker exec -it test2 ping test1 aus. Sie erhalten die folgende Ausgabe:

docker exec -it test2 ping test1

PING-Test1 (172.18.0.2): 56 Datenbytes
64 Bytes von 172.18.0.2: icmp_seq=0 ttl=64 Zeit=0,091 ms
64 Bytes von 172.18.0.2: icmp_seq=1 ttl=64 Zeit=0,146 ms
64 Bytes von 172.18.0.2: icmp_seq=2 ttl=64 Zeit=0,150 ms
64 Bytes von 172.18.0.2: icmp_seq=3 ttl=64 Zeit=0,145 ms
64 Bytes von 172.18.0.2: icmp_seq=4 ttl=64 Zeit=0,126 ms
64 Bytes von 172.18.0.2: icmp_seq=5 ttl=64 Zeit=0,147 ms

Dies beweist, dass die beiden Container erfolgreich verknüpft sind. Umgekehrt kann pingtest2 auch normal in test1 angepingt werden.

Wenn wir einen Container (test3) mit „docker run --rm --name test3 -d nginx“ starten und das externe Netzwerk, zu dem er gehört, nicht angeben und ihn mit test1 oder test2 verknüpfen müssen, können wir das externe Netzwerk manuell verknüpfen:

Docker-Netzwerkverbindung app_net test3

Auf diese Weise können die drei Container aufeinander zugreifen.

Methode 2: Ändern Sie den Netzwerkmodus des zu verknüpfenden Containers

Sie können dies tun, indem Sie den Netzwerkmodus der Container ändern, die Sie miteinander verknüpfen möchten, um eine Bridge zu erstellen, und die externen Container angeben, die verknüpft werden müssen (external_links). Im Gegensatz zum Verbindungsmodus 1, bei dem Container, die zum selben externen Netzwerk gehören, aufeinander zugreifen können, ist dieser Zugriff einseitig. Am Beispiel des Nginx-Containerimages: Wenn die Containerinstanz Nginx1 auf die Containerinstanz Nginx2 zugreifen muss, lautet die Docker-Compose.yml-Definition von Nginx2:

Version: "3"
Leistungen:
 nginx2:
 Bild: nginx
 Containername: nginx2
 Netzwerkmodus: Bridge

Entsprechend wird die Datei docker-compose.yml von nginx1 wie folgt definiert:

Version: "3"
Leistungen:
 nginx1:
 Bild: nginx
 externe_links:
  - nginx2
 Containername: nginx1
 Netzwerkmodus: Bridge

Es ist zu beachten, dass external_links nicht weggelassen werden können und nginx1 nach nginx2 gestartet werden muss, da sonst möglicherweise ein Fehler gemeldet wird, dass der Container nginx2 nicht gefunden werden kann. Als nächstes verwenden wir Ping, um die Konnektivität zu testen:

$ docker exec -it nginx1 ping nginx2 # nginx1 zu nginx2
PING nginx2 (172.17.0.4): 56 Datenbytes
64 Bytes von 172.17.0.4: icmp_seq=0 ttl=64 Zeit=0,141 ms
64 Bytes von 172.17.0.4: icmp_seq=1 ttl=64 Zeit=0,139 ms
64 Bytes von 172.17.0.4: icmp_seq=2 ttl=64 Zeit=0,145 ms

$ docker exec -it nginx2 ping nginx1 #nginx2 an nginx1
Ping: unbekannter Host

Das oben Gesagte kann eindeutig beweisen, dass es sich bei dieser Methode um eine Einwegverbindung handelt.

In tatsächlichen Anwendungen können Sie diese beiden Verknüpfungsmethoden flexibel entsprechend Ihren Anforderungen auswählen. Wenn Sie faul sein möchten, können Sie die zweite wählen. Ich empfehle jedoch die erste Methode mehr. Es ist nicht schwer zu erkennen, dass die zweite Methode, die benutzerfreundlicher ist als das Ändern des Netzwerkmodus, in Bezug auf Konnektivität und Flexibilität benutzerfreundlicher ist.

Die angehängte Datei docker-compose.yml erklärt die Kompatibilität zwischen Compose und Docker:

 Es gibt drei Versionen des Compose-Dateiformats: 1, 2.x und 3.x
 Der aktuelle Mainstream ist 3.x, das Docker 1.13.0 und höher unterstützt. Allgemeine Parameter:
 version #Geben Sie die Version der Compose-Datei anservices #Definieren Sie alle Serviceinformationen. Der Schlüssel der ersten Ebene unter services ist der Name eines Servicebuild #Geben Sie den Pfad an, der den Build-Kontext enthält, oder als Objekt mit Kontext und der angegebenen Dockerfile-Datei und dem args-Parameterwertcontext #context: Geben Sie den Pfad an, in dem sich die Dockerfile-Datei befindetdockerfile #dockerfile: Geben Sie den Namen der Dockerfile im durch Kontext angegebenen Verzeichnis an (Standard ist Dockerfile)
   args # args: Parameter, die von Dockerfile während des Build-Prozesses benötigt werden (entspricht docker container build --build-arg)
   cache_from # Neuer Parameter in v3.2, gibt die zwischengespeicherte Bilderliste an (entspricht docker container build --cache_from)
   labels # Neuer Parameter in v3.3, legt die Metadaten des Bildes fest (entspricht der Funktion von Docker Container Build --labels)
   shm_size # Neuer Parameter in v3.5, legt die Größe der Containerpartition /dev/shm fest (entspricht docker container build --shm-size)

  Befehl # Überschreibt den Standardbefehl, der nach dem Starten des Containers ausgeführt wird, und unterstützt Shell-Format und []-Formatkonfigurationen. # Weiß nicht, wie man cgroup_parent verwendet. # Weiß nicht, wie man container_name verwendet. # Gibt den Namen des Containers an (entspricht docker run --name).

  credential_spec # Ich weiß nicht, wie ich „deploy“ verwende. # Version v3 und höher, gibt die Konfiguration im Zusammenhang mit der Bereitstellung und Ausführung von Diensten an, der Bereitstellungsteil wird vom Docker-Stack verwendet, der Docker-Stack hängt von Docker Swarm ab
   endpoint_mode # Neue Funktion in v3.3, gibt an, wie der Dienst verfügbar gemacht wirdvip # Docker weist dem Dienst eine virtuelle IP (VIP) zu, die vom Client verwendet wird, um auf den Dienst zuzugreifendnsrr # DNS-Round-Robin, Docker richtet einen DNS-Eintrag für den Dienst ein, sodass die DNS-Abfrage für den Dienstnamen eine Liste von IP-Adressen zurückgibt und der Client direkt auf eine der Adressen zugreiftlabels # Gibt die Labels des Dienstes an, die nur beim Dienstmodus festgelegt werden # Gibt den Bereitstellungsmodus anglobal # Jeder Clusterknoten hat nur einen Containerrepliziert # Benutzer können die Anzahl der Container im Cluster angeben (Standard)
   Platzierung # Weiß nicht, wie man Replikate verwendet # Wenn der Bereitstellungsmodus repliziert wird, geben Sie die Anzahl der Containerkopien an Ressourcen # Ressourcenlimits # Legen Sie Ressourcenlimits für den Container fest CPUs: "0,5" # Stellen Sie den Container so ein, dass er höchstens 50 % der CPU verwendet 
     Speicher: 50 M # Stellen Sie den Container so ein, dass er maximal 50 M Speicherplatzreservierungen verwendet. # Stellen Sie die für den Container reservierten Systemressourcen ein (jederzeit verfügbar).
     cpus: "0.2" # Reserviere 20% der CPU für diesen Container
     Speicher: 20 M # Reservieren Sie 20 M Speicherplatz für die Neustartrichtlinie des Containers. # Definieren Sie die Neustartrichtlinie des Containers, die zum Ersetzen der Neustartparameterbedingung verwendet wird. # Definieren Sie die Neustartrichtlinie des Containers (akzeptiert drei Parameter).
     none # Bei einem Fehler keinen Neustart versuchen. # Nur neu starten, wenn ein Problem mit der Anwendung im Container vorliegt. any # Trotzdem Neustart versuchen (Standard)
    Verzögerung # Das Intervall zwischen Neustartversuchen (Standard ist 0 s)
    max_attempts # Anzahl der Neustartversuche (standardmäßig wird immer ein Neustartversuch unternommen)
    Fenster # Wartezeit, bevor überprüft wird, ob der Neustart erfolgreich war (dh wenn der Container gestartet wird, wie viele Sekunden dauert es, um zu überprüfen, ob der Container normal ist, der Standardwert ist 0 s)
   update_config # Wird verwendet, um die Konfiguration für fortlaufende Updates zu konfigurieren Parallelität # Die Anzahl der Container, die gleichzeitig aktualisiert werden Verzögerung # Das Intervall zwischen den Aktualisierungen einer Gruppe von Containern Fehleraktion # Definieren Sie die Strategie für fehlgeschlagene Updates Weiter # Fortsetzen des Updates rollback # Rollback des Updates pause # Pausieren des Updates (Standard)
    Monitor # Dauer nach jedem Update, um zu überwachen, ob das Update fehlschlägt (Einheit: ns|us|ms|s|m|h) (Standard 0)
    max_failure_ratio # Die beim Rollback tolerierte Fehlerrate (Standardwert ist 0)
    order # Neuer Parameter in v3.4, die Reihenfolge der Operationen beim Rollback stop-first #Die alte Aufgabe wird gestoppt, bevor die neue Aufgabe gestartet wird (Standard)
     start-first #Starten Sie zuerst die neue Aufgabe, und die laufenden Aufgaben überlappen sich vorübergehend rollback_config #Ein neuer Parameter, der in v3.7 hinzugefügt wurde und zum Definieren der Rollback-Strategie verwendet wird, wenn update_config die Parallelität nicht aktualisieren kann #Die Anzahl der Container, für die gleichzeitig ein Rollback durchgeführt werden soll. Wenn auf 0 gesetzt, werden alle Container gleichzeitig zurückgesetzt delay #Das Zeitintervall zwischen jedem Gruppen-Rollback (Standard ist 0)
    failure_action # Definiert die Rollback-Fehlerstrategie continue # Rollback fortsetzen pause # Rollback anhalten monitor # Dauer nach jedem Rollback-Task zur Überwachung von Fehlern (Einheit: ns|us|ms|s|m|h) (Standard ist 0)
    max_failure_ratio # Die beim Rollback tolerierte Fehlerrate (Standardwert 0)
    order # Reihenfolge der Operationen beim Rollback stop-first # Alte Tasks werden gestoppt bevor neue gestartet werden (Standard)
     start-first # Starten Sie zuerst eine neue Aufgabe, und die laufenden Aufgaben überlappen sich vorübergehend. Hinweis:
    Unterstützt Docker-Compose Up und Docker-Compose Run, aber nicht Docker Stack Deploy Unteroptionen Security_Opt Container_Name Geräte tmpfs Stop_Signal Links cgroup_parent
    Netzwerkmodus, externe Links, Neustart, Build, Benutzermodus, Sysctls

  Geräte #Geben Sie die Gerätezuordnungsliste an (entspricht docker run --device)

  depends_on #Definieren Sie die Reihenfolge, in der Container gestartet werden (diese Option löst Abhängigkeiten zwischen Containern auf und wird bei Verwendung der Swarm-Bereitstellung in v3 ignoriert)
   Beispiel:
    docker-compose up startet Dienste in Abhängigkeitsreihenfolge. Im folgenden Beispiel werden die Dienste redis und db vor den Webdiensten gestartet. Wenn Sie den Webdienst mit docker-compose up web starten, werden standardmäßig auch die Dienste redis und db gestartet, da die Abhängigkeitsbeziehungsversion: „3“ in der Konfigurationsdatei definiert ist.
    Leistungen:
     Webseite:
      bauen: .
      hängt ab von:
       -db  
       - Redis 
     Redis:
      Bild: Redis
     db:
      Bild: postgres       

  dns # DNS-Adresse festlegen (entspricht docker run --dns)

  dns_search # DNS-Suchdomäne festlegen (entspricht docker run --dns-search)

  tmpfs # Version v2 und höher, mounten Sie das Verzeichnis in den Container als temporäres Dateisystem für den Container (entspricht docker run --tmpfs, diese Option wird bei Verwendung der Swarm-Bereitstellung ignoriert)

  entrypoint # Überschreibt die Standard-Entrypoint-Anweisung des Containers (entspricht docker run --entrypoint)

  env_file # Liest Variablen aus der angegebenen Datei und setzt sie als Umgebungsvariablen im Container. Es kann sich um einen einzelnen Wert oder eine Liste von Dateien handeln. Wenn die Variablen in mehreren Dateien denselben Namen haben, überschreibt die letztere Variable die erstere Variable und der Wert der Umgebung überschreibt den Wert von env_file. Dateiformat:
    RACK_ENV=Entwicklung

  Umgebung #Umgebungsvariablen festlegen. Der Wert der Umgebung kann den Wert von env_file überschreiben (entspricht der Funktion von docker run --env)

  exhibit # Ports freigeben, aber keine Mapping-Beziehung zum Host herstellen, ähnlich der EXPOSE-Anweisung im Dockerfile external_links # Verbindung zu Containern herstellen, die nicht in docker-compose.yml definiert oder nicht von Compose verwaltet werden (Container, die von Docker Run gestartet wurden, diese Option wird bei Verwendung von Swarm Deployment in Version v3 ignoriert)

  extra_hosts # Host-Datensätze zu /etc/hosts im Container hinzufügen (entspricht docker run --add-host)

  healthcheck # Für Versionen über v2.1 definieren Sie die Container-Integritätsprüfung, ähnlich der HEALTHCHECK-Anweisung in Dockerfiletest # Befehl zum Überprüfen des Containerstatus. Diese Option muss eine Zeichenfolge oder eine Liste sein. Das erste Element muss NONE, CMD oder CMD-SHELL sein. Wenn es eine Zeichenfolge ist, entspricht dies CMD-SHELL plus der Zeichenfolge NONE # Deaktivieren Sie die Container-Integritätsprüfung CMD # Test: ["CMD", "curl", "-f", "http://localhost"]
    CMD-SHELL # Test: ["CMD-SHELL", "curl -f http://localhost || exit 1"] oder Test: curl -f https://localhost || exit 1
   Intervall: 1m30s # Das Intervall zwischen jeder ÜberprüfungTimeout: 10s # Das Timeout zum Ausführen des BefehlsRetries: 3 # Die Anzahl der WiederholungenStart_Periode: 40s # Neue Option in v3.4 und höher, definiert das Startintervall des Containersdisable: true # Wahr oder falsch, gibt an, ob die Erkennung und der Test des Integritätsstatus deaktiviert werden sollen: KEINEGleich wie Image # Gibt das Docker-Image an, das ein Remote-Repository-Image oder ein lokales Image sein kanninit # Neuer Parameter in v3.7, wahr oder falsch gibt an, ob ein Init im Container ausgeführt werden soll, der Signale empfängt und sie an den Prozess weiterleitetisolation # Isolationscontainertechnologie, in Linux wird nur der Standardwert unterstütztlabels # Verwenden Sie Docker-Labels, um Containern Metadaten hinzuzufügen, ähnlich wie LABELS in Dockerfilelinks # Links zu Containern in anderen Diensten, diese Option ist eine veraltete Option von Docker und wurde durch benutzerdefinierte Netzwerk-Namespaces ersetzt und kann irgendwann veraltet sein (diese Option wird bei Verwendung der Swarm-Bereitstellung ignoriert)

  logging # Legen Sie den Treiber für den Container-Protokolldienst fest. # Geben Sie den Protokollierungstreiber an. Der Standardwert ist json-file (entspricht docker run --log-driver).
   Optionen #Protokollbezogene Parameter angeben (entspricht Docker Run --log-opt)
    max-size # Legt die Größe einer einzelnen Protokolldatei fest. Wenn dieser Wert erreicht ist, wird das Protokoll überschrieben max-file # Die Anzahl der beizubehaltenden Protokolldateien network_mode # Gibt den Netzwerkmodus an (entspricht docker run --net, diese Option wird bei Verwendung von Swarm-Bereitstellung ignoriert)  

  Netzwerke # Fügen Sie den Container zum angegebenen Netzwerk hinzu (entspricht der Funktion „Docker Network Connect“). Netzwerke finden Sie im Schlüssel der obersten Ebene der Compose-Datei und im sekundären Schlüssel des Dienstschlüssels. Aliase # Container im selben Netzwerk können den Dienstnamen oder Alias ​​verwenden, um eine Verbindung zum Container eines der Dienste herzustellen. IPv4_Adresse # IP V4-Format IPv6_Adresse # IP V6-Format Beispiel:
    Version: '3.7'
    Leistungen: 
     prüfen: 
      Bild: nginx:1.14-alpine
      Containername: mynginx
      Befehl: ifconfig
      Netzwerke: 
       app_net: # Rufen Sie das in den folgenden Netzwerken definierte app_net-Netzwerk auf ipv4_address: 172.16.238.10
    Netzwerke:
     app_net:
      Treiber: Brücke
      ipam:
       Treiber: Standard
       Konfiguration:
        - Subnetz: 172.16.238.0/24

  pid: 'host' # Gemeinsam genutzter Host-Prozessbereich (PID)

  Ports # Stellen Sie eine Port-Mapping-Beziehung zwischen dem Host und dem Container her. Ports unterstützt zwei Syntaxformate: Beispiel für KURZES Syntaxformat:
    - „3000“ # Port 3000 des Containers freigeben. Docker wird den Port des Hosts zufällig einem freien Port zuordnen. - „3000-3005“ # Ports 3000 bis 3005 des Containers freigeben. Docker wird den Port des Hosts zufällig einem freien Port zuordnen. - „8000:8000“ # Port 8000 des Containers Port 8000 des Hosts zuordnen. - „9090-9091:8080-8081“
    - "127.0.0.1:8001:8001" #Geben Sie die angegebene Adresse des Mapping-Hosts an - "127.0.0.1:5000-5010:5000-5010" 
    - „6060:6060/udp“ #Geben Sie das Beispiel für das LANGE Syntaxformat des Protokolls an: (Syntaxformat neu hinzugefügt in v3.2)
    Häfen:
     - Ziel: 80 # veröffentlichter Container-Port: 8080 # Host-Port-Protokoll: TCP # Protokolltypmodus: Host # Host veröffentlicht Host-Ports auf jedem Knoten, Ingress-Lastausgleich, Port-Geheimnisse im Schwarmmodus # weiß nicht, wie man Security_opt verwendet # überschreibt Standardbezeichnungen für jeden Container (diese Option wird bei Verwendung der Schwarmbereitstellung ignoriert)

  stop_grace_period #Gibt an, wie viele Sekunden der Container nach dem Senden eines SIGTERM-Signals wartet, bevor er beendet wird (Standard: 10 s)

  stop_signal #Gibt das Signal zum Stoppen des Containers an (der Standardwert ist SIGTERM, was gleichbedeutend mit kill PID ist; SIGKILL entspricht kill -9 PID; diese Option wird bei Verwendung der Schwarmbereitstellung ignoriert)

  sysctls # Kernel-Parameter im Container festlegen (diese Option wird bei Verwendung der Swarm-Bereitstellung ignoriert)

  ulimits # Containergrenzen festlegen

  userns_mode # Deaktivieren Sie Benutzernamensräume für diesen Dienst, wenn der Docker-Daemon mit Benutzernamensräumen konfiguriert ist (diese Option wird bei Verwendung einer Swarm-Bereitstellung ignoriert)

  Volumes #Definiert die Volume-Zuordnungsbeziehung zwischen Container und Host. Wie Netzwerke kann es im Sekundärschlüssel des Dienstschlüssels und im Schlüssel der obersten Ebene von Compose gefunden werden. Wenn es dienstübergreifend verwendet werden muss, wird es im Schlüssel der obersten Ebene definiert und in Diensten referenziert. Beispiel für KURZES Syntaxformat:
    Bände:
     - /var/lib/mysql # Ordnen Sie /var/lib/mysql im Container einem beliebigen Verzeichnis auf dem Host zu. - /opt/data:/var/lib/mysql # Ordnen Sie /var/lib/mysql im Container /opt/data auf dem Host zu.
     - ./cache:/tmp/cache # Ordnen Sie /var/lib/mysql im Container dem Speicherort der Host-Compose-Datei zu - ~/configs:/etc/configs/:ro # Ordnen Sie das Verzeichnis des Container-Hosts dem Container zu, mit Nur-Lese-Berechtigungen - datavolume:/var/lib/mysql # datavolume ist das Verzeichnis, das durch den Top-Level-Schlüssel des Volumes definiert wird, und LONG wird hier direkt aufgerufen. Beispiel für Syntaxformat: (neues Syntaxformat in v3.2 hinzugefügt)
    Version: "3.2"
    Leistungen:
     Webseite:
      Bild: nginx:alpine
      Häfen:
       - "80:80"
      Bände:
       - Typ: Volume # Der Mount-Typ muss Bind, Volume oder tmpfs sein.
        Quelle: meineDaten # HostverzeichnisZiel: /Daten # ContainerverzeichnisVolume: # Zusätzliche Optionen konfigurieren, sein Schlüssel muss mit dem Wert von Typ übereinstimmennocopy: true # Zusätzliche Volumeoptionen, beim Erstellen eines Volumetyps das Kopieren von Daten aus dem Container deaktivieren: bind # Im Volumemodus muss nur der Containerpfad angegeben werden, der Hostpfad wird zufällig generiert; bind muss den Zuordnungspfad des Containers und der Datenmaschine angebenQuelle: ./static
        Ziel: /opt/app/static
        read_only: true # Stellen Sie das Dateisystem auf ein schreibgeschütztes Dateisystem ein:
     mydata: # Im Volume definiert, Neustart kann in allen Diensten aufgerufen werden. # Container-Neustartrichtlinie definieren (diese Option wird bei Verwendung der Swarm-Bereitstellung ignoriert, verwenden Sie restart_policy statt Neustart in Swarm).
   no # Automatischen Neustart des Containers deaktivieren (Standard)
   immer # Der Container wird unabhängig vom Fehler neu gestartet. # Wenn ein Fehler auftritt, wird der Container neu gestartet. Weitere Optionen:
   Domänenname, Hostname, IPC, Mac-Adresse, privilegiert, schreibgeschützt, SHM-Größe, Standardeingabe geöffnet, TTY, Benutzer, Arbeitsverzeichnis
   Jede der oben genannten Optionen akzeptiert nur einen einzelnen Wert und ähnelt hinsichtlich der akzeptablen Werte für die Zeit den entsprechenden Parametern von Docker Run:
   2,5 Sekunden
   10 Sekunden
   1 Min. 30 Sek.
   2 Std. 32 Min.
   5h34m56s
   Zeiteinheit: us, ms, s, m, h
  Akzeptable Werte für die Größe:
   2b
   1024 KB
   2048k
   300 m
   1 GB
   Einheit: b, k, m, g oder kb, mb, gb
 Netzwerke # Netzwerkinformationen definierenTreiber # Netzwerkmodus angeben, in den meisten Fällen wird eine Brücke zwischen einem einzelnen Host und Overlay Swarmbridge geschlagen # Docker verwendet standardmäßig die Brücke, um Netzwerke auf einem einzelnen Host zu verbindenOverlay # Overlay-Treiber erstellt ein benanntes Netzwerk über mehrere Knoten hinwegHost # Gemeinsam genutzter Host-Netzwerk-Namespace (entspricht Docker Run --net=Host)
   keine # Entspricht docker run --net=none
  driver_opts # Versionen über v3.2, an den Treiber übergebene Parameter, diese Parameter hängen vom Treiber ab attachable # Treiber wird beim Overlay verwendet, wenn auf true gesetzt, können neben Diensten auch unabhängige Container an das Netzwerk angeschlossen werden; wenn ein unabhängiger Container an das Netzwerk angeschlossen ist, kann er mit Diensten und unabhängigen Containern des Netzwerks kommunizieren, die an andere Docker-Daemons angeschlossen sind ipam # Benutzerdefinierte IPAM-Konfiguration. Dies ist ein Objekt mit mehreren Attributen, von denen jedes optional ist driver # IPAM-Treiber, Bridge oder Standard
   config # Konfigurationselement subnet # Subnetz im CIDR-Format, das das Netzwerksegment dieses Netzwerks angibt external # Externes Netzwerk, wenn auf „true“ gesetzt, wird docker-compose up nicht versuchen, es zu erstellen, und ein Fehler wird ausgelöst, wenn es nicht existiert name # Legen Sie für Versionen über v3.5 den Namen für dieses Netzwerk fest. Dateiformat Beispiel:
 Version: "3"
 Leistungen:
  Redis:
  Bild: redis:alpine
  Häfen:
   - "6379"
  Netzwerke:
   -Frontend
  einsetzen:
   Replikate: 2
   Konfiguration aktualisieren:
   Parallelität: 2
   Verzögerung: 10s
   Neustartrichtlinie:
   Bedingung: bei Fehler
  db:
  Bild: postgres:9.4
  Bände:
   -db-data:/var/lib/postgresql/data
  Netzwerke:
   - Backend
  einsetzen:
   Platzierung:
   Einschränkungen: [node.role == manager]

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:
  • Docker-Netzwerkmodus und Konfigurationsmethode
  • Docker erstellt ein benutzerdefiniertes Netzwerk, um eine feste Container-IP-Adresse zu erhalten
  • Benutzerdefinierte Docker-Netzwerkimplementierung

<<:  Zusammenfassung der Methoden zur Verbesserung der MySQL-Anzahl

>>:  JavaScript implementiert die zufällige Generierung von Bestätigungscode und Bestätigung

Artikel empfehlen

Was macht die MySQL-Datenbank?

MySQL ist ein relationales Datenbankverwaltungssy...

Installation und Verwendung von TypeScript und grundlegende Datentypen

Der erste Schritt besteht darin, TypeScript globa...

MySQL-String-Splitting-Beispiel (String-Extraktion ohne Trennzeichen)

String-Extraktion ohne Trennzeichen Fragenanforde...

So wählen Sie den richtigen MySQL-Datums-/Uhrzeittyp zum Speichern Ihrer Zeit

Beim Erstellen einer Datenbank und Schreiben eine...

50 superpraktische Tools für Webdesigner

Webdesigner zu sein ist nicht einfach. Sie müssen...

So überprüfen Sie die Festplattennutzung unter Linux

1. Verwenden Sie den Befehl df, um die gesamte Fe...

Native JavaScript-Karussell-Implementierungsmethode

In diesem Artikel wird die Implementierungsmethod...

Eine detaillierte Anleitung zu benutzerdefinierten Anweisungen in Vue

Inhaltsverzeichnis 1. Was ist eine benutzerdefini...

So lösen Sie das Problem der hohen Parallelität in der MySQL-Datenbank

Vorwort Wir alle wissen, dass Startups zunächst m...

So installieren Sie eine MySQL-Datenbank im Deepin 2014-System

Deepin 2014 herunterladen und installieren Zum He...

Detailliertes Tutorial zur Offline-Installation von MySQL unter CentOS7

1. Löschen Sie die ursprüngliche MariaDB, sonst k...