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:
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:
|
<<: Zusammenfassung der Methoden zur Verbesserung der MySQL-Anzahl
>>: JavaScript implementiert die zufällige Generierung von Bestätigungscode und Bestätigung
Als Root-Konto von MySQL verwende ich beim Verbin...
MySQL ist ein relationales Datenbankverwaltungssy...
Der erste Schritt besteht darin, TypeScript globa...
<frameset></frameset> ist jedem bekann...
String-Extraktion ohne Trennzeichen Fragenanforde...
Beim Erstellen einer Datenbank und Schreiben eine...
wie Für LIKE ist eine Übereinstimmung der gesamte...
Webdesigner zu sein ist nicht einfach. Sie müssen...
1. Verwenden Sie den Befehl df, um die gesamte Fe...
In diesem Artikel wird die Implementierungsmethod...
Inhaltsverzeichnis 1. Was ist eine benutzerdefini...
Vorwort Wir alle wissen, dass Startups zunächst m...
Deepin 2014 herunterladen und installieren Zum He...
1. Löschen Sie die ursprüngliche MariaDB, sonst k...
Vorbereitung 1. Überprüfen Sie, ob die GPU CUDA u...