通过自定义网络来实现容器互联
name表示网络模式
bridge:桥接
none:不配置网络
host:和宿主机共享网络
container:容器网络连通(用得少!)
[root@localhost dockerfile]# docker network ls
NETWORK ID NAME DRIVER SCOPE
65f61d1d236d bridge bridge local
7997a9ebd537 host host local
ba70c8c166a2 none null local
测试:
我们默认启动的是--net bridge,这个bridge指的就是docker0,不写也是--net bridge
[root@localhost dockerfile]# docker run -d -P --name tomcat01 --net bridge tomcat
42fc0ed69939a50f511770c9209e3b8827baa195db6cd9954e7953d40033dbf6
[root@localhost dockerfile]#
创建了一个自定义网络。
[root@localhost dockerfile]# docker network create --driver bridge --subnet 10.10.0.0/16 --gateway 10.10.0.1 mynet
6427032687c1c324b6ec97a8ae517d94d25809e67d2482321dba77a27c1a3339
[root@localhost dockerfile]# docker network ls
NETWORK ID NAME DRIVER SCOPE
65f61d1d236d bridge bridge local
7997a9ebd537 host host local
6427032687c1 mynet bridge local
ba70c8c166a2 none null local
创建完会显示如下信息
[root@localhost dockerfile]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.100.1 0.0.0.0 UG 100 0 0 ens33
10.10.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-00f465c933dc
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.100.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
[root@localhost dockerfile]# ip addr
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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:71:6e:65 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.177/24 brd 192.168.100.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::740c:b13c:7ae:d319/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:43:fe:4b:6c 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
inet6 fe80::42:43ff:fefe:4b6c/64 scope link
valid_lft forever preferred_lft forever
59: veth228ab55@if58: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 7e:c5:5e:93:7e:64 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::7cc5:5eff:fe93:7e64/64 scope link
valid_lft forever preferred_lft forever
61: br-00f465c933dc: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:cf:d7:61:f9 brd ff:ff:ff:ff:ff:ff
inet 10.10.0.1/16 brd 10.10.255.255 scope global br-00f465c933dc
valid_lft forever preferred_lft forever
[root@localhost dockerfile]# docker network ls
NETWORK ID NAME DRIVER SCOPE
65f61d1d236d bridge bridge local
7997a9ebd537 host host local
00f465c933dc mynet bridge local
ba70c8c166a2 none null local
[root@localhost dockerfile]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "00f465c933dc1ebb1aa7bf26874fdacbe307ea254d5b70972936da1b43b4b3af",
"Created": "2022-01-31T15:59:51.915435714+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "10.10.0.0/16",
"Gateway": "10.10.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
在自己设置的网络里启动两个tomcat的容器
[root@localhost dockerfile]# docker run -d -P --name tomcat-net-01 --net mynet tomcat
1db7e1496c33ef21203f0e5a87b5394520b55d115b485d9f4ca91c2e23a68da4
[root@localhost dockerfile]# docker run -d -P --name tomcat-net-02 --net mynet tomcat
在我自己的网络里就存在了这两个container
[root@localhost dockerfile]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "00f465c933dc1ebb1aa7bf26874fdacbe307ea254d5b70972936da1b43b4b3af",
"Created": "2022-01-31T15:59:51.915435714+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "10.10.0.0/16",
"Gateway": "10.10.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"1db7e1496c33ef21203f0e5a87b5394520b55d115b485d9f4ca91c2e23a68da4": {
"Name": "tomcat-net-01",
"EndpointID": "0aa3531657bc88fce947068bc6821460d2bf883a4b7466d7b5059ac34d22aaf6",
"MacAddress": "02:42:0a:0a:00:02",
"IPv4Address": "10.10.0.2/16",
"IPv6Address": ""
},
"58789ef7b755da750fb0466224304125eae135c1f644c1128f22192036b7f71f": {
"Name": "tomcat-net-02",
"EndpointID": "d14eba00e674b68b5ed9e3a19c720c708721cad51d69263575f8feee3a411413",
"MacAddress": "02:42:0a:0a:00:03",
"IPv4Address": "10.10.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
这个时候再去ping tomcat-net-01 直接就可以ping了,而且ping IP也是可以的。
[root@localhost dockerfile]# docker exec -it tomcat-net-02 ping tomcat-net-01
好处:
redis----不同的集群使用不同的网络,保证集群的安全和健康
mysql----不同的集群使用不同的网络,保证集群的安全和健康