# 查看所有的网络[root@iZbp10cl07degikl645xkmZ ~]# docker network lsNETWORK ID NAME DRIVER SCOPEce272e32269e bridge bridge local298aa0e71be8 host host localbaf8682c0d16 none null local[root@iZbp10cl07degikl645xkmZ ~]#
网络模式
bridge :桥接 docker(默认)
none :不配置网络
host :和宿主机共享网络
container : 容器网络连通!(用的少!局限很大)
测试
# 我们直接启动的命令 -net bridge ,而这个就是我们的docker0
docker run -d -P --name redis01 redis
等价于下面
docker run -d -P --name redis01 --net bridge redis
#docker0特点:默认域名不能访问,--link可以打通连接!
# 我们可以自定义一个网络
[root@s4801841 /]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
9690939da110307195d7a6e4f8492f53e4d237b0a38d80e6e980dd8509f8c44a
[root@s4801841 /]# docker network ls
NETWORK ID NAME DRIVER SCOPE
d46e1d6232eb bridge bridge local
90ae387162f8 host host local
9690939da110 mynet bridge local
d5191bc49335 none null local
[root@s4801841 /]#
# 这样我们的网络就创建成功了
[root@s4801841 /]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "9690939da110307195d7a6e4f8492f53e4d237b0a38d80e6e980dd8509f8c44a",
"Created": "2020-11-30T17:39:58.140998293+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
[root@s4801841 /]#
测试
# 自用自己刚刚创建的网络mynet创建两个容器
[root@s4801841 /]# docker run -d -P --name redis03 --net mynet redis
a4470f0d93958b9229a42341440f9c59a392c18f183ada9032383bd7e0558111
[root@s4801841 /]# docker run -d -P --name redis04 --net mynet redis
85060a17c380482fd1c7f117cca8c96140bfe0accd59dd8a87027c85ed0ebded
[root@s4801841 /]#
# 查看结果
[root@s4801841 /]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "9690939da110307195d7a6e4f8492f53e4d237b0a38d80e6e980dd8509f8c44a",
"Created": "2020-11-30T17:39:58.140998293+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": { //这里就可以看到你刚刚通过这个网络所创建的容器了
"85060a17c380482fd1c7f117cca8c96140bfe0accd59dd8a87027c85ed0ebded": {
"Name": "redis04",
"EndpointID": "7f958c1451c6f8295a40902f18a80fc03c679ca838149db93ebb2a1372fcbea6",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/16",
"IPv6Address": ""
},
"a4470f0d93958b9229a42341440f9c59a392c18f183ada9032383bd7e0558111": {
"Name": "redis03",
"EndpointID": "c3a29e0c468e003cee8711776488a09d7a8f58592aeab68f54e7d48da02a34ed",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
[root@s4801841 /]#
# 再次测试ping连接(用redis好像不像这里我换成了tomcat的镜像)
# 现在不使用--link也可以ping名字了!
[root@s4801841 /]# docker exec -it tomcat01 ping tomcat02
PING tomcat02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.151 ms
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.126 ms
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.113 ms
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=4 ttl=64 time=0.099 ms
^C
--- tomcat02 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 0.099/0.122/0.151/0.020 ms
[root@s4801841 /]# ^C
我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络
好处:
redis-不同的集群使用不同的网络,保证集群是安全和健康的
mysql-不同的集群使用不同的网络,保证集群是安全和健康的
网络连通(将一个网络中的容器和另外一个网络打通)
# redis01 在bridge这个网络中
[root@s4801841 /]# docker network connect mynet redis01
#这样的话就实现了将bridge中的redis01容器与mynet网络打通
# 相当于一个容器两个ip
[root@s4801841 /]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "9690939da110307195d7a6e4f8492f53e4d237b0a38d80e6e980dd8509f8c44a",
"Created": "2020-11-30T17:39:58.140998293+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"abde9abf6faba5c4aeb971c47e5605d7c7dd011d364c36ef5a2f59b7a8e833a2": {
"Name": "redis01",
"EndpointID": "79be417e2624d938b79b1a2a4092bf992d4aed4df446fb274d6956d929def286",
"MacAddress": "02:42:c0:a8:00:04",
"IPv4Address": "192.168.0.4/16",
"IPv6Address": ""
},
"c27c76ffa895af56721b359d38228f7ee248b175b3709cdf2ae3e68603319e9b": {
"Name": "tomcat02",
"EndpointID": "6bb353e88f7f343096c66697d4e10039e20da96b202d201a969b1f9b63b88b41",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/16",
"IPv6Address": ""
},
"e722b385bf24e3605ce74955cdbee1ebfce2af3fff5777b81fa438623b93b5d7": {
"Name": "tomcat01",
"EndpointID": "81c46bb9b3099a91f350f9bc18ca793f1518c8a602b7e325a77111544aa0053a",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
[root@s4801841 /]#
结论:
假设要跨网络操作别人。就需要使用docker network connect 连通
