驻马店网站建设费用,泰州网站建设制作工作室,南京个人网站建设模板,什么网站做风险投资1.docker0的基本理解
安装完docker服务后#xff0c;我们首先查看一下宿主机的网络配置
ifconfig我们可以看到#xff0c;docker服务会默认在宿主机上创建一个虚拟网桥docker0#xff0c;该网桥网络的名字称为docker0。它在内核层连通了其他物理或者虚拟网卡#xff0c;这…1.docker0的基本理解
安装完docker服务后我们首先查看一下宿主机的网络配置
ifconfig我们可以看到docker服务会默认在宿主机上创建一个虚拟网桥docker0该网桥网络的名字称为docker0。它在内核层连通了其他物理或者虚拟网卡这就可以将所有容器和宿主机都放在了同一个物理网络。Docker默认指定了docker0接口的IP和子网掩码让宿主机和容器之间可以通过网桥相互通信。
2.使用默认的bridge演示容器网路的相互连通
这里我们使用之前构建的一个tomcat镜像来演示可以参考之前的文章 8.使用Dockerfile构建centos7jdk8tomcat8镜像
2.1 测试容器与宿主机的网络互通
2.1.1 启动一个tomcat容器
先启动一个tomcat容器t1,对映射的端口为8901
docker run -d -p 8901:8080 --name t1 donkey/tomcat8:1.0.02.1.2 查看容器的网络
docker exec -it t1 ip addr可以看到容器的ip为172.17.0.2
2.1.3 查看宿主机的ip 可以看到宿主机的ip 10.0.16.9
2.1.4 测试宿主机能够连通容器
ping 172.17.0.22.1.5 测试宿主机能够连通容器
# 先进入容器内部
docker exec -it t1 /bin/bash
# ping 宿主机
ping 10.0.16.92.2 测试容器与容器的网络互通
2.2.1 再启动一个tomcat容器
docker run -d -p 8902:8080 --name t2 donkey/tomcat8:1.0.02.2.2 查看当前容器t2的ip地址
docker exec -it t2 ip addrt2的ip地址为172.17.0.3
2.1.3 测试容器之间能够连通
2.1.3.1 容器t1来ping容器t2
docker exec -it t1 ping 172.17.0.32.1.3.2 容器t2来ping容器t1
docker exec -it t2 ping 172.17.0.22.1.3.3 小结
通过上面t1和t2两个容器的实例我们可以看到使用默认的网络bridge容器之间是可以网络互通的
3.bridge模式容器网路的相互连通的原理
前面我们提到只要服务器上安装了docker,那么宿主机上就会安装一个虚拟的docker0网卡。我们每启动一个docker容器docker就会给容器分配一个ip。如我们启动的t1、t2两个容器 他们都有自己的分配的一个ip。 然后使用evth-pair技术利用桥接模式内部容器与外部宿主机进行连通。那什么是evth-pair技术呢 evth-pair就是一对虚拟设备接口他们都是成对出现的一段连着协议一段彼此相连。正因为有有了这个特性充当一个桥梁连接各种虚拟网络设备。 以容器t1为例我们查看他的ip地址 t1容器有个72号ip地址eth0if73 再看宿主机 有个73号ip,vethd926bf2if72,这样容器t1的72绑定了宿主机上的73,宿主机上的73绑定了容器上的72这样容器和宿主机组成了一对。也就是说启动一个容器会生成一对一对的网卡也就是虚拟技术接口。 我们再看下容器t2是不是也是这样呢 容器t2的ip地址有个74号eth0if75 再看宿主机有个有个75号vethe12ed59if74 也是成对出现的。我们以一张图来更加直观的说明一下。
4.使用默认的bridge模式的弊端
通过上面的实例我们看到使用默认的bridge网络模式很容易的解决了我们网络互通的问题看着已经很完美了但其实不然。 容器一旦删除网卡也就消失了容器再次重启ip会变化同时每次docker容器启动我都要查看这个容器的ip然后才能进行连接这样就导致连接非常不好用如果能够像微服务那样能够屏蔽掉IP地址在这里直接使用服务名连接就好了。那我们使用容器名试一下行不行。 很不幸ping不通那怎么解决这个问题呢之前可以使用–link来实现但已经作废了现在一般是采用自定义网络来实现。这个我们后续的博客再来单独分享吧。