【Docker】8. Docker网络

这是我参与8月更文挑战的第8天,活动详情查看:8月更文挑战

【Docker】8. Docker网络

宿主机 ip a

docker 是如何处理容器网络访问的?

在这里插入图片描述

查看容器的内部网络地址 ip addr , 发现容器启动的时候会得到一个 eth0@if60 ip地址,docker分配的

image-20210728194019965

思考:linux能不能 ping 通容器内部? (能)

image-20210728194659314

原理

我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0,桥接模式,使用的技术是evth-pair技术!

再次测试ip add

在这里插入图片描述

再启动一个容器 发现又多了一对网卡

在这里插入图片描述

我们发现这个容器带来网卡,都是一对对的(宿主机的网卡)

veth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一端连着协>议,一端彼此相连
正因为有这个特性 veth-pair 充当一个桥梁,连接各种虚拟网络设备的OpenStac,Docker容器之间的连接,OVS的连接,都是使用evth-pair技术

在这里插入图片描述

tomcat01 和 tomcat02 是共用一个路由器,docker0。

所有的容器不指定网络的情况下,都是通过docker0路由的,docker会给我们的容器分配一个默认的可用IP

所以容器和容器之间是可以互相ping通的:==容器1→Docker0→容器2==

20210131140833

docker中的所有网络接口都是虚拟的 ,转发效率高。删除容器后,对应的网桥也随之删除。

自定义网络(推荐)

查看所有的docker网络

docker network ls
复制代码

image-20210728195841557

网络模式

  • bridge :桥接 docker(默认,自己创建也是用bridge模式)

  • none :不配置网络,一般不用

  • host :和宿主机共享网络

  • container :容器网络连通(用得少!局限很大)

docker run 命令默认带有一个参数–net bridge,此处的bridge指的就是docker0。如果我们不想使用docker0,那如何创建一个新的网络呢?

创建新的网络,这个在安装ES的时候有提到

docker  network create --driver 网络模式 --subnet 子网ip --gateway 网关 网络名      
复制代码

image-20210728195841557

查看网络详细信息

我们不仅在docker network ls命令下发现了这个新创建的网络newnet,还可以使用docker network inspect命令查看其详细信息,包括了我们创建时定义的子网ip和网关:

image-20210728201008123

只要两个容器启动时都通过 –net,选用了同一个已创建的网络,不同容器间即可通过ip地址或容器名/id连通:

20201212203023

网络联通

20201212204434

对于建立在不同网络下(docker0, newnet)的两个容器tomcat01和tomcat02,他们的网段不同,因此是无法彼此ping通容器内部的:

20201212204311

这时我们需要通过docker network connect命令打通容器与网络之间的连接:

docker network connect 网络名 容器名/id
复制代码

20201212203803

这个功能类似于将一个容器赋予多个ip地址,同样可以用docker network inspect命令查看网络连通后,该网络的变化:

20201212204235

原本newnet网络中只含有tomcat02,现在增加了tomcat01,因此可以连通。

我们自定义的网络,docker为我们维护好了对应的关系,推荐我们平时这样使用网络!

好处:

redis – 不同的集群使用不同的网络,保证集群是健康和安全的

mysql – 不同的集群使用不同的网络,保证集群是健康安全的

在这里插入图片描述

在这里插入图片描述

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享