首页 > 其他 > 详细

Docker网络

时间:2020-11-26 13:40:50      阅读:32      评论:0      收藏:0      [点我收藏+]

理解docker0

首先清空所有镜像,保证干净环境。

docker rmi -f $(docker images -a -q)

lo: #本机回环地址

eth0: #本机网卡地址

docker0:docker0地址
技术分享图片
docker是如何处理容器网络访问的?

测试

docker run -d -P --name tomcat01 tomcat

技术分享图片
查看容器内部的网络地址

docker exec -it tomcat01 ip addr
[root@localhost ~]# docker exec -it tomcat01 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
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@localhost ~]#

发现容器启动的时候会得到一个docker分配的eth0@if5 网卡。
技术分享图片
linux宿主机能不能ping通容器内的IP地址?

测试

结果:linux主机可以ping通容器内部
技术分享图片
容器内是否可以ping通linux主机?

测试

结果:容器内否可以ping通linux主机。
技术分享图片
docker0相当于家庭中的路由器,负责给网段内的主机分配IP地址。

docker0原理

1.我们每启动一个docker容器, docker就会给docker容器分配一个ip, 我们只要安装了docker, 就会有一个网卡docker 0 ,采用桥接模式, 使用的技术是ev th-pair技术!
技术分享图片
2.启动容器再次测试ipaddr,发现多了一个网卡。

结论:启动一个容器linux宿主机会多出1个对应的网卡。
技术分享图片
3.容器内和容器外网卡是相互绑定的。

容器内:
技术分享图片
容器外:
技术分享图片
4.再启动一个容器进行测试。
技术分享图片
结论:启动N个容器linux宿主机会多出N个对应的网卡。

#我们发现这个容器带来网卡,都是相互绑定的。 
#veth-pair就是一对的虚拟设备接口, 他们都是相互绑定出现的, 一段连着协议, 一段彼此相连 
#正因为有这个特性, veth-pair充当一个桥梁, 连接各种虚拟网络设备的 
#OpenStak,Docker容器之间的连接,ovS的连接,都是使用veth-pair技术. 

容器间通信

测试容器之间是否可以互相通信?

tomcat01
技术分享图片
tomcat02
技术分享图片
测试ping
技术分享图片
技术分享图片
都能互相ping通。

知识:

可以不进入容器来ping。

docker exec -it tomcat02 ping 172.17.0.2

技术分享图片
结论:容器和容器间是可以互相ping通的!

Docker0网络模型图:
技术分享图片
结论:Docker使用的是Linux的桥接, 宿主机中是一个Dokcer容器的网桥docker0。
技术分享图片
虚拟网卡,Docker中的所有的网络接口都是虚拟的。虚拟的转发效率高! (内网传递文件!)

移除容器查看网卡

移除容器后网卡自动消失

测试
技术分享图片
注:只要删除容器,对应的网卡就会删除!

场景:容器IP变更,不影响通信,以docker容器名称进行ping通信。

启动容器tomcat01和tomcat02
技术分享图片
测试:用容器名称ping测试通信。

docker exec -it tomcat01 ping tomcat02

技术分享图片

解决容器名称互通

如何可以解决?

再启动一个容器tomcat03,增加--link参数,测试通信。

docker run -d -P --name tomcat03 --link tomcat02 tomcat

技术分享图片
测试用容器名称ping

docker exec -it tomcat03 ping tomcat02

技术分享图片

反向ping测试

[坑]反向ping测试
技术分享图片

docker network究竟

[root@localhost ~]# docker network --help

Usage:	docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

技术分享图片
查看docker0 bridge网卡详细信息

docker0网卡

docker network inspect 991190b12345

技术分享图片
容器分配的地址信息
技术分享图片
查看容器tomcat03的详细信息
技术分享图片

docker inspect fc39850d8b31

技术分享图片
拓展:

docker inspect conID|grep tomcat03 -n

技术分享图片
查看tomcat03容器的hosts文件

docker exec -it fc39850d8b31 cat /etc/hosts

技术分享图片
本质探究:--link就是我们在hosts配置文件中增加了1个tomcat02的映射。

不建议使用--link,因为--link需要相互绑定才能互相通信。

docker0问题:不支持容器名互相连接访问!

Docker网络

原文:https://www.cnblogs.com/lwenwu/p/14041690.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!