Docker网络
原理
-
我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0 桥接模式,使用的技术是veth-pair技术!
-
每启动一个容器就会给容器分配一个网卡,发现网卡都是成对出现,这就是veth-pair技术,是一对虚拟设备接口,一段连着协议,一段彼此相连。veth-pair充当一个桥梁,连接各种虚拟网络设备。
-
openstack,Docker容器之间的连接,OVS的连接,都是使用veth-pair技术
-
容器之间可以通过ip地址相互 ping 通。
-
docker0的网络模型图
![]()
tomcat01和tomcat02是用的一个公用的路由器:docker0.
s所有容器不指定网络下,都是使用docker0,docker会给容器分配一个默认的可用ip
小结
Docker使用的是linux的桥接,宿主机中是一个Docker容器的网桥 docker0 。
![]()
Docker中所有的网络接口都是虚拟的,虚拟的转发效率高!(内网传递文件!)
只要容器删除,对应的一对网桥就没有了。
![]()
--link
Docker中两个容器不用ip,直接用容器名进行 ping ,这是 ping 不通的。
1 [root@VM-0-14-centos ~]# docker ps 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3 345cdedafc19 tomcat "catalina.sh run" 12 seconds ago Up 12 seconds 0.0.0.0:9001->8080/tcp tomcat02 4 61537737e9c0 tomcat "catalina.sh run" 20 seconds ago Up 19 seconds 0.0.0.0:9000->8080/tcp tomcat01 5 [root@VM-0-14-centos ~]# docker exec -it tomcat02 ping tomcat01 6 ping: tomcat01: Name or service not known 7 #这里发现直接 ping 容器名字是 ping 不通,通过 --link 就能解决了 8 [root@VM-0-14-centos ~]# docker run -d -P --name tomcat03 --link tomcat01 tomcat 9 bc26e16b083d3ea1e52a4d8ee5762d31a4023e3dd72e476b600588678bb1e3a9 10 [root@VM-0-14-centos ~]# docker exec -it tomcat03 ping tomcat01 11 PING tomcat01 (172.17.0.2) 56(84) bytes of data. 12 64 bytes from tomcat01 (172.17.0.2): icmp_seq=1 ttl=64 time=0.153 ms 13 64 bytes from tomcat01 (172.17.0.2): icmp_seq=2 ttl=64 time=0.113 ms 14 64 bytes from tomcat01 (172.17.0.2): icmp_seq=3 ttl=64 time=0.108 ms 15 64 bytes from tomcat01 (172.17.0.2): icmp_seq=4 ttl=64 time=0.112 ms 16 #反向是不可以 ping 通的 17 [root@VM-0-14-centos ~]# docker exec -it tomcat01 ping tomcat03 18 ping: tomcat03: Name or service not known
-
-
这里显示创建容器docker自动给容器分配的ip
![]()
在建立tomcat03时候就已经配置了和tomcat02连通的配置。如何查看配置?
#查看hosts配置 [root@VM-0-14-centos ~]# docker exec -it tomcat03 cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 tomcat01 61537737e9c0 172.17.0.4 bc26e16b083d
--link 就是在hosts配置中增加了一个172.17.0.2 tomcat01 61537737e9c0 绑定了
不建议使用--link太笨了。建议使用自定义网络。
自定义网络
查看所有docker网络 docker network ls
![]()
网络模式
bridge : 桥接模式 docker上面搭桥(默认)(自己创建也是使用桥接模式)
none : 不配置网络
host : 和宿主机共享网络
container :容器网络连通(用得少)
测试
#我们直按启动的命令 --net bridge,而这个就是我们的docker0,默认是--net bridge docker run -d -p --name tomcat01 tomcat docker run -d -p --name tomcat01 --net bridge tomcat # docker0特点:默认,域名不能访同, --link可以打通连接! # 我们可以自定义一个网络! #—-driver bridge #——subnet 192.168.0.0/16 #—-gateway 192.168.0.1 [root@VM-0-14-centos ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 47053a6c6ad25977b5ccaca5996e7582e49a0ec0a361078505a805fb15ebe716 [root@VM-0-14-centos ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 1a796e623d62 bridge bridge local 07b2cb229c0e host host local 47053a6c6ad2 mynet bridge local ee79b9f66b12 none null local 7f0e24ce21ca redis bridge local [root@VM-0-14-centos ~]# docker run -d -P--name tomcat-net-01 --net mynet tomcat unknown shorthand flag: '-' in ---name See 'docker run --help'. [root@VM-0-14-centos ~]# docker run -d -P --name tomcat-net-01 --net mynet tomcat 3cbdd9de3925fdb41cae22e761267697eec8faf67159ac8fa23ff4330ed5d6d5 [root@VM-0-14-centos ~]# docker run -d -P --name tomcat-net-02 --net mynet tomcat 46b69f2c19844bbc1a136cc71dacf15e0d283c9be192c1f5ac794d5e662a3974 [root@VM-0-14-centos ~]# docker network inspect mynet [ { "Name": "mynet", "Id": "47053a6c6ad25977b5ccaca5996e7582e49a0ec0a361078505a805fb15ebe716", "Created": "2020-09-17T14:34:12.808558135+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": { "3cbdd9de3925fdb41cae22e761267697eec8faf67159ac8fa23ff4330ed5d6d5": { "Name": "tomcat-net-01", "EndpointID": "126b689de44ddc3dbcfa2bd2fa952f54203a4233ec505b2b72193f8a56a6ba24", "MacAddress": "02:42:c0:a8:00:02", "IPv4Address": "192.168.0.2/16", "IPv6Address": "" }, "46b69f2c19844bbc1a136cc71dacf15e0d283c9be192c1f5ac794d5e662a3974": { "Name": "tomcat-net-02", "EndpointID": "b517ac34133f8653230f86814c835e1eb1d897b5e83b95600dc7a234d2805a33", "MacAddress": "02:42:c0:a8:00:03", "IPv4Address": "192.168.0.3/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ] # 再次测试 ping 连接 [root@VM-0-14-centos ~]# docker exec -it tomcat-net-01 ping 192.168.0.3 PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data. 64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.160 ms 64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.112 ms 64 bytes from 192.168.0.3: icmp_seq=3 ttl=64 time=0.086 ms ^C --- 192.168.0.3 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.086/0.119/0.160/0.031 ms # 不使用--link也可以直接 ping 通 [root@VM-0-14-centos ~]# docker exec -it tomcat-net-01 ping tomcat-net-02 PING tomcat-net-02 (192.168.0.3) 56(84) bytes of data. 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.071 ms 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.156 ms 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.096 ms
自定义的网络docker已经分配好对应的关系。推荐平时这样使用
好处:
redis - 不同的集群使用不同的网络,保证集群是安全和健康的 mysql - 不同的集群使用不同的网络,保证集群是安全和健康的
网络连通
在docker0默认下创建tomcat01和tomcat02,然后用tomcat01去 ping tomcat-net-01是ping不通的

# 测试打通tomcat01 - mynet # 连通之后就是将tomcat01放到了mynet网络下 # 一个容器两个ip地址! # 阿里云服务,公网ip 私网ip

# tomcat01成功连通了mynet网络 [root@VM-0-14-centos ~]# docker exec -it tomcat01 ping tomcat-net-01 PING tomcat-net-01 (192.168.0.2) 56(84) bytes of data. 64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.106 ms 64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.093 ms 64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.111 ms # tomcat02是打不通的 [root@VM-0-14-centos ~]# docker exec -it tomcat02 ping tomcat-net-01 ping: tomcat-net-01: Name or service not known






浙公网安备 33010602011771号