通过自定义网络来实现容器互联
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的容器,可以用--ip来具体设置容器在mynet里的IP
[root@localhost dockerfile]# docker run -d -P --name tomcat-net-01 --net mynet --ip 10.10.0.3 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----不同的集群使用不同的网络,保证集群的安全和健康
网络连通
那不同的网络下的怎么连通呢?比如docker0下面的容器,和Mynet下面的容器如何连通?
[root@localhost dockerfile]# docker network inspect 65f61d1d236d
[
{
"Name": "bridge",
"Id": "65f61d1d236de31ba89654b1cb9e718394a8cc60a678e0f98528576b140cba89",
"Created": "2022-01-28T06:16:18.252096262+08:00",
"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": {
"26f2cf7b24c297403a5578494099a86648ae0f2fcc0573985c066da4f9864f6c": {
"Name": "tomcat02",
"EndpointID": "dfa7a3ae39230a9267b080741bbd4d3ebf0483759a59fc00683ede673a216a38",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
},
"42fc0ed69939a50f511770c9209e3b8827baa195db6cd9954e7953d40033dbf6": {
"Name": "tomcat01",
"EndpointID": "f79340292ce9a1139ebfb9ba95cd6af9711c6b4c2e8eaf30380053a257a862c9",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"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": {}
}
]
[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": {}
}
]
[root@localhost dockerfile]#
用docker network connect命令直接连通了tomcat01和mynet,这样tomcat01就有了两个IP。
[root@localhost dockerfile]# docker network connect mynet tomcat01
[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": ""
},
"42fc0ed69939a50f511770c9209e3b8827baa195db6cd9954e7953d40033dbf6": {
"Name": "tomcat01",
"EndpointID": "284f3fdf5ff02b7f041ffb274e046ec71fcb2b1fdcf8f8c2a1688b33448eaac0",
"MacAddress": "02:42:0a:0a:00:04",
"IPv4Address": "10.10.0.4/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通
docker exec -it tomcat01 ping tomcat-net-01