Vorgänge der Kommunikation zwischen Docker-Containern und der externen Netzwerkkommunikation

Vorgänge der Kommunikation zwischen Docker-Containern und der externen Netzwerkkommunikation

Kommunikation zwischen Containern

1. Netzwerkfreigabe von Containern

Docker-Container in diesem Modus teilen sich einen Netzwerkstapel, sodass zwei Container über localhost effizient und schnell kommunizieren können.

Wird für die Kommunikation zwischen Webservern und Anwendungsservern verwendet.

##Löschen Sie die experimentelle Umgebung[root@server1 ~]# docker ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
 
##Container mit Standardnetzwerk erstellen [root@server1 ~]# docker run -it --name vm1 ubuntu
root@b1a2a90f98a5:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue Status UNBEKANNT Gruppe Standard qlen 1
  Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 Bereich Host lo
    valid_lft für immer preferred_lft für immer
368: eth0@if369: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue status UP-Gruppenstandard 
  Link/Ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff:ff
  inet 172.17.0.2/16 brd 172.17.255.255 Bereich global eth0
    valid_lft für immer preferred_lft für immer
root@b1a2a90f98a5:/# [root@server1 ~]# 
 
##Container erstellt VM2, die das Netzwerk mit VM1 teilt
[root@server1 ~]# docker run -it --name vm2 --network container:vm1 ubuntu
root@b1a2a90f98a5:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue Status UNBEKANNT Gruppe Standard qlen 1
  Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 Bereich Host lo
    valid_lft für immer preferred_lft für immer
368: eth0@if369: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue status UP-Gruppenstandard 
  Link/Ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff:ff
  inet 172.17.0.2/16 brd 172.17.255.255 Bereich global eth0
    valid_lft für immer preferred_lft für immer
root@b1a2a90f98a5:/#

2.--Link-Methode

##Löschen Sie das Image [root@server1 ~]# docker rm -f vm1
vm1
[root@server1 ~]# docker rm -f vm2
vm2
[root@server1 ~]# docker ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
 
##Standardnetzwerk erstellt vm1
[root@server1 ~]# docker run -it --name vm1 ubuntu
root@68e56c57a9a0:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue Status UNBEKANNT Gruppe Standard qlen 1
  Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 Bereich Host lo
    valid_lft für immer preferred_lft für immer
370: eth0@if371: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue status UP-Gruppenstandard 
  Link/Ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff:ff
  inet 172.17.0.2/16 brd 172.17.255.255 Bereich global eth0
    valid_lft für immer preferred_lft für immer
root@68e56c57a9a0:/# [root@server1 ~]#
 
##--Link-Methode zum Erstellen des Containers vm2 des vm1-Subnetzes
[root@server1 ~]# docker run -it --name vm2 --link vm1:web ubuntu
root@61267851b484:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue Status UNBEKANNT Gruppe Standard qlen 1
  Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 Bereich Host lo
    valid_lft für immer preferred_lft für immer
372: eth0@if373: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue status UP-Gruppenstandard 
  Link/Ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff:ff
  inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0 ##ip ist im selben Netzwerksegment wie vm1, erhöht valid_lft für immer preferred_lft für immer
 
##Analysieren Sie die Datei mit den IP- und Alias-Informationen von vm1 root@61267851b484:/# cat /etc/hosts
127.0.0.1 lokaler Host
::1 lokaler Host ip6-lokaler Host ip6-Loopback
fe00::0 ip6-lokales Netz
ff00::0 ip6-mcastprefix
ff02::1 ip6-alle Knoten
ff02::2 ip6-allerouter
172.17.0.2 Web 68e56c57a9a0 vm1
172.17.0.3 61267851b484
root@61267851b484:/# ^C
root@61267851b484:/#

--Link

Aktualisieren Sie die Hosts-Datei

Die Variablen des Linkcontainers werden ebenfalls kopiert

root@61267851b484:/#Umgebung
HOSTNAME=61267851b484
TERM=xterm
Ls_colors = rs = 0: di = 01; 34: ln = 01; 36: mh = 00: pi = 40; 33: SO = 01; 35: do = 01; 35: bd = 40; 33; 01: cd = 40; 33; 01: oder 40; 34; 42: St = 37; 44: Ex = 01; 32:*. Tar = 01; 31:*. Tgz = 01; 31:*. Arj = 01; 31:*. TAZ = 01; 31:*. LZH = 01; 31:* 1; 31:*. Z = 01; 31:*. DZ = 01; 31:*. GZ = 01; 31:*. LZ = 01; 31:*. XZ = 01; 31:*. Bz2 = 01; 31:*. Bz = 01; 31:*. Tbz = 01; 31:* 1; 31:*. Jar = 01; 31:*. Krieg = 01; 31:*. Ear = 01; 31:*. Sar = 01; 31:*. Rar = 01; 31:*. Ace = 01; 31:*. Zoo = 01; 31:*. 35:*. Gif = 01; 35:*. Bmp = 01; 35:*. Pbm = 01; 35:*. Pgm = 01; 35:*. Ppm = 01; 35:*. TGA = 01; 35:*. XBM = 01; 35:*. png = 01; 35:*. svg = 01; 35:* 1; 35:*. Ogm = 01; 35:*. Mp4 = 01; 35:*. M4V = 01; 35:*. Mp4v = 01; 35:*. VOB = 01; 35:*. Qt = 01; 35:*. Nuv = 01; 35:*. .RMVB = 01; 35:*. Flc = 01; 35:*. Avi = 01; 35:*. Fli = 01; 35:*. Flv = 01; 35:*. Gl = 01; 35:*. Dl = 01; 35:*. xcf = 01; 35:*. xwd = 01; 35:*. EMF = 01; 35:*. Axv = 01; 35:*. Anx = 01; 35:*. Ogv = 01; 35:*. Ogx = 01; 35:*. AAC = 00; 36:*. Au = 00; 36:*. Flac = 00; 00; 36:*. Mpc = 00; 36:*. Ogg = 00; 36:*. Ra = 00; 36:*.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1
HOME=/Wurzel
WEB_NAME=/vm2/web
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/env
root@61267851b484:/#

Wenn der Container gestoppt wird, wird die IP-Adresse freigegeben. Wenn er erneut gestartet wird, werden andere IP-Adressen abgerufen. Der verknüpfte Container aktualisiert die Hosts-Datei automatisch.

Kommunikation zwischen dem Container und dem externen Netzwerk

Sehen Sie sich die aktuelle Firewall-Richtlinie für die iptable-NAT-Tabelle an

[root@server1 ~]# iptables -t nat -nL
Kette PREROUTING (Richtlinie ACCEPT)
Ziel Schutz Opt Quelle Ziel     
DOCKER alle -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE entspricht Zieltyp LOCAL
 
Ketteneingabe (Richtlinie AKZEPTIEREN)
Ziel Schutz Opt Quelle Ziel     
 
Kettenausgabe (Richtlinie AKZEPTIEREN)
Ziel Schutz Option Quelle Ziel     
DOCKER alle -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE entspricht Zieltyp LOCAL
 
Kette POSTROUTING (Richtlinie AKZEPTIEREN)
Ziel Schutz Option Quelle Ziel     
MASQUERADE alle -- 172.26.0.0/24 0.0.0.0/0      
MASQUERADE alle -- 172.20.0.0/16 0.0.0.0/0      
MASQUERADE alle -- 172.18.0.0/16 0.0.0.0/0      
MASQUERADE alle -- 172.17.0.0/16 0.0.0.0/0      
 
Chain DOCKER (2 Referenzen)
Ziel Schutz Opt Quelle Ziel     
Alles zurückgeben -- 0.0.0.0/0 0.0.0.0/0      
Alles zurückgeben -- 0.0.0.0/0 0.0.0.0/0      
Alles zurückgeben -- 0.0.0.0/0 0.0.0.0/0      
Alles zurückgeben -- 0.0.0.0/0 0.0.0.0/0
##Nginx-Container erstellen und Port [root@server1 ~] zuordnen# docker run -d --name nginx -p 80:80 nginx
cfefe6420cfe60c46cb7a050c142af7eff86fa6d687c3577077a5b4e2c8b961c
 
##Öffnen Sie Port 80 [root@server1 ~]# Docker-Port nginx 
80/tcp -> 0.0.0.0:80
 
[root@server1 ~]# netstat -antlp | grep 80
tcp6 0 0 :::80 :::* LISTEN 27094/Docker-Proxy 
[root@server1 ~]# iptables -t nat -nL
Kette PREROUTING (Richtlinie ACCEPT)
Ziel Schutz Option Quelle Ziel     
DOCKER alle -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE entspricht Zieltyp LOCAL
 
Ketteneingabe (Richtlinie AKZEPTIEREN)
Ziel Schutz Option Quelle Ziel     
 
Kettenausgabe (Richtlinie AKZEPTIEREN)
Ziel Schutz Option Quelle Ziel     
DOCKER alle -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE entspricht Zieltyp LOCAL
 
Kette POSTROUTING (Richtlinie AKZEPTIEREN)
Ziel Schutz Opt Quelle Ziel     
MASQUERADE alle -- 172.26.0.0/24 0.0.0.0/0      
MASQUERADE alle -- 172.20.0.0/16 0.0.0.0/0      
MASQUERADE alle -- 172.18.0.0/16 0.0.0.0/0      
MASQUERADE alle -- 172.17.0.0/16 0.0.0.0/0      
MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:80
 
Chain DOCKER (2 Referenzen)
Ziel Schutz Opt Quelle Ziel     
Alles zurückgeben -- 0.0.0.0/0 0.0.0.0/0      
Alles zurückgeben -- 0.0.0.0/0 0.0.0.0/0      
Alles zurückgeben -- 0.0.0.0/0 0.0.0.0/0      
Alles zurückgeben -- 0.0.0.0/0 0.0.0.0/0      
DNAT tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 bis:172.17.0.2:80
[root@server1 ~]

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Implementierung der Docker-Container-Verbindung und -Kommunikation
  • Detaillierte Erläuterung der Docker-Container-Cross-Host-Multi-Netzwerksegment-Kommunikationslösung
  • Detaillierte Erläuterung des direkten Routings bei der hostübergreifenden Kommunikation von Docker-Containern
  • Detaillierte Erklärung, wie Docker-Container über Hosts hinweg kommunizieren
  • Detaillierte Erläuterung einer Methode zur Kommunikation zwischen Docker-Containern
  • So implementieren Sie die Kommunikation zwischen Docker-Containern

<<:  Eine kurze Diskussion über Lösungen zum Stören von CSS3-Animationen

>>:  1 Minute Vue implementiert Rechtsklickmenü

Artikel empfehlen

CSS-Tipps zur Implementierung der Chrome-Tab-Leiste

Dieses Mal schauen wir uns ein Navigationsleisten...

Verwendung des Linux-Dateibefehls

1. Befehlseinführung Der Dateibefehl wird verwend...

Fallstudie zum Vue-Einkaufswagen

Inhaltsverzeichnis 1. Warenkorb-Beispiel 2. Code-...

Einfache Tipps zur Erhöhung der Ladegeschwindigkeit von Webseiten

Die Ladegeschwindigkeit einer Webseite ist ein wic...

Node+Express zum Erzielen eines Paging-Effekts

In diesem Artikel wird der spezifische Code von n...

Beispielcode des Spread-Operators und seiner Anwendung in JavaScript

Der Spread-Operator ermöglicht die Erweiterung ei...

Basierend auf den Sonderzeichen in der URL-Escape-Kodierung

Inhaltsverzeichnis Sonderzeichen in URLs Escapeze...

Realisierung der Echtzeit-Dateisynchronisierung zwischen Linux-Servern

Anwendungsszenarien Bei vorhandenen Servern A und...

So handhaben Sie gleichzeitige Aktualisierungen von MySQL-Daten

Wird UPDATE gesperrt? Wird die SQL-Anweisung gesp...

Detaillierte Erklärung des Unterschieds zwischen tinyint und int in MySQL

Frage: Was ist der Unterschied zwischen int(1) un...

Perfekte Lösung für den Themenwechsel basierend auf CSS-Variablen (empfohlen)

Als Baidu diese Anforderung erhielt, fand das Unt...

Detaillierte Erläuterung der grundlegenden Verwendung von Apache POI

Inhaltsverzeichnis Grundlegende Einführung Erste ...