Es ist ein Netzwerk, das in einem einzelnen Docker-Host konfiguriert ist und beim Erstellen einer relativ kleinen Netzwerkkonfiguration verwendet wird.
-#Erstellen eines Docker-Hosts
% docker-machine create nw-vm1
-#Melden Sie sich mit ssh bei der virtuellen Maschine an
% docker-machine ssh nw-vm
-#Suchen Sie nach vorhandenen Netzwerken
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
94ade5c5f1ae bridge bridge local
3723c4561df4 host host local
105e9024e5d5 none null local
Die Funktionsweise des Netzwerks hängt vom Typ des "TREIBERS" ab. Drei sind standardmäßig gemacht. Der Container gehört standardmäßig zum "Bridge" -Netzwerk.
-#Docker-Netzwerk Überprüfen Sie den Namen des Treibers
$ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "94ade5c5f1aed16a3637a2c40bed82ac50d51b8814737c5e9942d0f8e0a1fd4c",
"Created": "2020-09-04T11:31:43.470419246Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
Sie können das Netzwerk-Subnetz und die Standard-Gateway-ID in der Spalte Config überprüfen. Mit dem Brückennetzwerk verbundene Container erhalten in diesem Netzwerk IP-Adressen. Die IP des Gateways ist die IP, die der Schnittstelle "docker0" zugewiesen ist.
##SSH-Verbindung zum Docker-Host
$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:78:70:eb brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe78:70eb/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:ae:f1:12 brd ff:ff:ff:ff:ff:ff
inet 192.168.99.101/24 brd 192.168.99.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:feae:f112/64 scope link
valid_lft forever preferred_lft forever
4: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/sit 0.0.0.0 brd 0.0.0.0
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:77:b5:fe:32 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
Sie können die IP der Schnittstelle von Docker0 überprüfen.
$ docker run -itd —name alpine1 alpine /bin/sh
$ docker inspect bridge
Sie können sehen, dass der Container von alpine1 in der Spalte "Container" vorhanden ist und die IP zugewiesen ist. Im Standardbrückennetzwerk ist es möglich, mit Containern zu kommunizieren, die im selben Netzwerk vorhanden sind, indem die IP-Adresse angegeben wird.
-#Starten Sie einen Container für "alpine 2" basierend auf alpine
$ docker run -itd —name alpine2 alpine /bin/sh
-#Befestigen Sie es am Container und überprüfen Sie die IP.
$ docker attach alpine2
# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
link/sit 0.0.0.0 brd 0.0.0.0
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
ip wird am 172.17.0.3 alpine2 zugewiesen.
# ping -w 3 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.389 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.140 ms
64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.116 ms
--- 172.17.0.2 ping statistics ---
4 packets transmitted, 3 packets received, 25% packet loss
round-trip min/avg/max = 0.116/0.215/0.389 ms
Es kann bestätigt werden, dass eine Kommunikation mit alpine1 möglich ist.
Im Standardnetzwerk kann der Docker-Daemon kein DNS bereitstellen, sodass keine Kommunikation über den Containernamen möglich ist. Dies kann mithilfe eines benutzerdefinierten Brückennetzwerks behoben werden.
-#Docker-Netzwerk Netzwerknamen erstellen
$ docker network create my_nw
Jetzt können Sie ein Brückennetzwerk mit dem Namen "my_nw" erstellen.
-#Docker-Netzwerkverbindung Netzwerkname Containername
$ docker network connect my_nw alpine1
$ docker network connect my_nw alpine2
Oben sind die Container "alpine1" und "alpine2" mit dem Netzwerk "my_nw" verbunden.
-# docker run -itd --name Neuer Containername--Netzwerk Netzwerkname Originalcontainer
$ docker run -itd --name alpine3 --network my_nw alpine
Wenn Sie im Argument --network das Netzwerk angeben, zu dem Sie eine Verbindung herstellen möchten, beginnt es von vorne, während es mit diesem Netzwerk verbunden ist. Wenn Sie ein Netzwerk angeben und starten, wird es übrigens gestartet, ohne mit dem Standard-Bridge-Netzwerk verbunden zu sein.
-#Mit alpine2 anbringen
$ docker attach alpine2
-#Ergebnisse weggelassen
# Ping -w 3 alpine1
# Ping -w 3 alpine3
Es kann bestätigt werden, dass eine Kommunikation mit dem Containernamen möglich ist. In einem benutzerdefinierten Brückennetzwerk wird das integrierte DNS des Docker-Dämons gestartet und der Name mit dem Containernamen aufgelöst. Der Container kann mit mehreren Netzwerken verbunden sein.
-#Docker-Netz trennen Netzwerkname Containername
$ docker network disconnect bridge alpine2
-#Details und Bestätigung von alpine2
$ docker inspect alpine2
Das "Bridge" -Netzwerk ist nicht verbunden und nur das "my_nw" -Netzwerk ist verbunden. Das Brückennetzwerk kann ins Internet gehen, aber standardmäßig ist es ein Netzwerk, das nicht für die Außenwelt offen ist. Durch Freigeben des durch -p angegebenen Ports kann von außen auf den angegebenen Port des Containers zugegriffen werden.
Ein Netzwerk, in dem der Treiber "null" ist. Der mit dem "Null" -Treiber verbundene Container hat keine andere Netzwerkschnittstelle als die Loopback-Schnittstelle. Bei Containern, die keine Netzwerke verbinden, müssen andere Netzwerke getrennt sein.
Netzwerk mit dem "Host" -Treiber. Mit dem Host-Netzwerk verbundene Container haben dasselbe Netzwerk wie der Docker-Host. Wenn Sie den Webserver in einem Container im Host-Netzwerk starten, verhält er sich genauso wie das Abhören auf IP 80 des Host-Computers. Sie können eine Verbindung zu Port 80 des Containers herstellen, indem Sie auf die IP 80 des Docker-Hosts zugreifen, indem Sie den Container ohne Verwendung von -p starten.
-#Überprüfen Sie die IP des Docker-Hosts
% docker-machine ip nw-vm1
-#SSH-Verbindung
% docker-machine ssh nw-vm1
-#Starten Sie nginx über das "Host" -Netzwerk
$ docker run -d —name web —network host nginx
Sie können mit der IP-Adresse darauf zugreifen und bestätigen, dass nginx ausgeführt wird.
Recommended Posts