Detailliertes Tutorial zum Ausführen mehrerer Springboot mit Docker

Detailliertes Tutorial zum Ausführen mehrerer Springboot mit Docker

Docker führt mehrere Springboot

Erstens: Port-Mapping Zweitens: Speichergröße festlegen Drittens: Physische Dateien lesen und schreiben Viertens: Protokolldateien Fünftens: Interner Netzwerkzugriff mehrerer Container Sechstens: Aufgetretene Probleme

Erstens: Port Mapping

Nginx verwendet Weiterleitung, daher ist dies am einfachsten.

[hn@iZbp1gp1t778obaz5m8vk8Z Anleitungen]$ docker run -d -p 8093:8093 guides-collect
 
Ordnen Sie einfach den physischen Port einem virtuellen Port zu. Das ist ganz einfach.

Zweitens: Speichergröße festlegen

-m, --memory Speicherlimit, das Format ist eine Zahl plus eine Einheit, die Einheit kann b, k, m, g sein. Mindestens 4M
--memory-swap Gesamtspeicherlimit + Größe der Swap-Partition. Gleiches Format wie oben. Muss größer sein als das durch -m --memory-reservation festgelegte weiche Limit. Speicherlimit. Gleiches Format wie oben --oom-kill-disable Gibt an, ob OOM-Killer das Töten von Containern verhindern soll. Standardmäßig nicht festgelegt. --oom-score-adj Die Priorität des Containers, der vom OOM-Killer getötet wird. Der Bereich liegt zwischen [-1000 und 1000], der Standardwert ist 0.
--memory-swappiness wird verwendet, um das virtuelle Speichersteuerungsverhalten des Containers festzulegen. Der Wert ist eine Ganzzahl zwischen 0 und 100. --kernel-memory Kernel-Speicherlimit. Gleiches Format wie oben, Mindestgröße ist 4M
Beispiel:
 
[hn@iZbp1gp1t778obaz5m8vk8Z Anleitungen]$ docker run -d -m 1G --memory-swap 4G -p 8093:8093 Anleitungen sammeln

Der dritte: physische Dateien lesen und physische Dateien schreiben

Die beiden oben genannten Situationen werden beim Start geladen, aber was soll ich tun, wenn ich während der Laufzeit kontinuierlich lokale Dateien lesen muss?

[hn-docker@iZbp1gp1t778obaz5m8vk8Z ~]$ docker run -d -m 1G --memory-swap 4G -p 8092:8092 \
-v /home/hn-docker/docker/wechat:/springboot/wechat \
Führer-Nachricht
 
Der Start des Nachrichtencontainers entspricht der Zuordnung der Dateiadresse im Image zur Adresse auf dem physischen Computer. Die Imageadresse lautet beispielsweise: /springboot/wechat
Physische Adresse: /home/hn-docker/docker/wechat

Halterungen binden

Der Bind-Mount-Modus ist dem von Volumes sehr ähnlich. Der Unterschied besteht darin, dass der Bind-Mount-Modus jede Datei oder jeden Ordner auf dem Host in den Container einbindet, während Volumes im Wesentlichen einen vom Docker-Dienst verwalteten Bereich (der Standard ist ein Ordner unter /var/lib/docker/volumes) in den Container einbindet.

Die Verwendung von Bind-Mounts ähnelt der von Volumes, und die Hostdateien werden über -v oder --mount im Container gemountet. Hier ist ein Beispiel:

Wenn Sie den Parameter --mount verwenden, müssen Sie type=bind angeben:

$ docker run -d \
 --name=nginxtest \
 --mount Typ=binden,Quelle=/usr/local/web,Ziel=/usr/share/nginx/html \
 nginx:neueste

Das obige Beispiel mountet den Ordner /usr/local/web auf dem Host in den Ordner /usr/share/nginx/html im Container.

Oder verwenden Sie den Parameter -v :

$ docker run -d \
 --name=nginxtest \
 -v /usr/local/web:/usr/share/nginx/html \
 nginx:neueste

Weitere Einzelheiten finden Sie unter: Detaillierte Erläuterung zu Docker Data Storage Bind Mounts

Viertens: Protokolldatei

Schritt 1: Holen Sie sich die ID des laufenden Containers: da3199e9d032    
 
[hn@iZbp1gp1t778obaz5m8vk8Z Anleitungen]$ Docker PS
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
da3199e9d032 guides-collect "java -Djava.secur..." vor 2 Stunden Vor 2 Stunden 0.0.0.0:8093->8093/tcp sharp_mirzakhani
 
Schritt 2: Abfrage des laufenden Protokolls - Fertig [hn@iZbp1gp1t778obaz5m8vk8Z guides]$ docker logs -f 51c384b8afee

Referenzinformationen:

Befehlsformat:

$ Docker-Protokolle [OPTIONEN] CONTAINER
 Optionen:
    --details Weitere Informationen anzeigen -f, --follow Echtzeitprotokolle verfolgen --since string Protokolle nach einem bestimmten Zeitstempel oder einer relativen Zeit anzeigen, z. B. 42 m (also 42 Minuten)
    --tail string Wie viele Protokollzeilen werden ab dem Ende des Protokolls angezeigt? Der Standardwert ist „alle“
  -t, --timestamps Zeitstempel anzeigen --until Zeichenfolge Protokolle vor einem bestimmten Zeitstempel oder einer relativen Zeit anzeigen, z. B. 42 m (also 42 Minuten)

Beispiel:

Zeigen Sie die Protokolle nach der angegebenen Zeit an und zeigen Sie nur die letzten 100 Zeilen an:

$ Docker-Protokolle -f -t --since="2018-02-08" --tail=100 CONTAINER_ID

Sehen Sie sich die Protokolle der letzten 30 Minuten an:

$ Docker-Protokolle – seit 30 Min. CONTAINER_ID

Zeigen Sie die Protokolle nach einer bestimmten Zeit an:

$ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID

Protokolle für einen bestimmten Zeitraum anzeigen:

$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID

Fünftens: Interaktion zwischen Host- und Containernetzwerk

Problembeschreibung: Sind Sie sprachlos, wenn das in Ihrem Docker ausgeführte Springboot auf das Redis des Hosts zugreifen und das MySQL anderer Container abrufen möchte?

Lösung: Sie müssen die Soft-Connection-IP des Host-Containers abfragen und die Intranet-IP verwenden, um darauf zuzugreifen. docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' xxxid (Container-ID)
 
Zum Beispiel:
[yn@iZbp1gp1t778obaz5m8vk8Z Protokolle]$ docker ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
abe77b60254a Assistent „java -Djava.secur…“ vor 6 Minuten Vor 6 Minuten 0.0.0.0:9304->8091/tcp nostalgic_albattani
37c6dd777636 collect "java -Djava.secur..." vor 30 Stunden Vor 30 Stunden 0.0.0.0:8093->8093/tcp silly_poincare
4dcb9fcae281 Nachricht „java -Djava.secur...“ vor 3 Tagen Seit 3 ​​Tagen aktiv 0.0.0.0:8092->8092/tcp reverent_galileo
 
So überprüfen Sie beispielsweise: abe77b60254a Die Netzwerkadresse dieses Containers [yn@iZbp1gp1t778obaz5m8vk8Z logs]$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' abe77b60254a
172.17.0.4
 
Zu diesem Zeitpunkt:
Die IP-Adresse des Containers abe77b60254a lautet: 172.17.0.4
Wenn Sie darauf zugreifen möchten, verwenden Sie einfach die Intranetadresse 172.17.0.4. Gleichzeitig können Sie auch wissen, dass die IP des Hostcomputers 172.17.0.1 sein sollte

Sechstens: Die Fallstricke, denen Sie begegnen werden

1: Der Start des Spiegels schlägt fehl. So zeigen Sie das Protokoll an

Wenn der Start fehlschlägt, müssen Sie wissen, um welche Image-ID es sich handelt, und dann das Protokoll zur Überprüfung verwenden: docker logs -f image id

Zum Beispiel:
[yn@iZbp1gp1t778obaz5m8vk8Z Protokolle]$ docker ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
abe77b60254a Assistent „java -Djava.secur…“ vor 6 Minuten Vor 6 Minuten 0.0.0.0:9304->8091/tcp nostalgic_albattani
37c6dd777636 collect "java -Djava.secur..." vor 30 Stunden Vor 30 Stunden 0.0.0.0:8093->8093/tcp silly_poincare
4dcb9fcae281 Nachricht „java -Djava.secur...“ vor 3 Tagen Seit 3 ​​Tagen aktiv 0.0.0.0:8092->8092/tcp reverent_galileo
 
Überprüfen Sie die letzten 10 Zeilen dieses Containerprotokolls [yn@iZbp1gp1t778obaz5m8vk8Z ~]$ docker logs -f -t --tail 10 abe77b60254a

2. Die in der Datenbank gespeicherte Protokollzeit oder Daten sind 8 Stunden kürzer als die tatsächliche Zeit

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone 

Dies ist das Ende dieses Artikels über das ausführliche Tutorial zum Ausführen mehrerer Springboots mit Docker. Weitere Informationen zum Ausführen mehrerer Springboots mit Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Problems des unendlichen Neustarts beim Ausführen der Docker-Umgebung des SpringBoot-Projekts
  • So führen Sie das Springboot-Projekt im Docker aus
  • Implementierung eines laufenden Springboot-Projekts mit Docker

<<:  Lösen Sie das Problem, dass bei der Installation von MySQL unter Linux keine my.cnf-Datei in /etc vorhanden ist

>>:  Schritte zum Aufteilen und Komprimieren von CSS mit Webpack und zum Importieren mit Link

Artikel empfehlen

Vue realisiert den Fortschrittsbalken-Änderungseffekt

Dieser Artikel verwendet Vue, um einfach die Ände...

Detaillierte Erklärung der MySQL-Gruppierung durch Optimierung

Inhaltsverzeichnis Standardausführungsprozess Opt...

Code zum Anzeigen des Inhalts eines TXT-Buchs auf einer Webseite

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...

Entwurf und Implementierung einer kaskadierenden Dropdown-Box in Vue

Inhaltsverzeichnis 1. Datenbankdesign 2. Frontend...

CSS-Implementierungscode für horizontale und vertikale Fortschrittsbalken

Manchmal ist es schön, ein paar nette Scrollbar-E...

MySQL 5.6.37 (zip) Download Installationskonfiguration Grafik-Tutorial

In diesem Artikel finden Sie das Download-, Insta...

JavaScript zur Implementierung des Anmeldeformulars

In diesem Artikelbeispiel wird der spezifische Ja...

Detaillierte Erläuterung der MySQL-Mehrtabellenabfrage

Sich gut zu ernähren und ausreichend zu schlafen,...

js, um den Popup-Effekt zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...

Freundliche Alternativen zum Find Tool in Linux

Mit dem Befehl „Find“ können Sie in einem angegeb...