docker network manager

docker结合负载实现网站高可用

使用之前的服务

通过包含名称互联

即在同一容器上可以通过一个容器上显示的名称,在一个前端的业务容器中使用nginx,是tomcat,启动它内部的IP是DHCP分配的,所以如果通过内部经常访问的话,自定义名称是相对固定比较的,因此适用于平时比较固定的场景
此方式最少需要两个容器之间操作

先创建第一个容器,企业会使用到这个名称

查看当前主机文件内容

创建第二个容器

查看第二个容器的hosts文件内容

检测通信

通过自定义域名互联

自定义的容器可能会发生变化,因此,如果名称发生变化,程序之间无法自行发生变化,但可以通过程序通过容器进行服务调用,包含名称发生变化之后再使用之前的名称是肯定会发生变化的调用成功,每次都进行更改的话又比较了,因此可以使用自定义别名的方式解决,即包含名称可以随意变更,只要不更改别名自动麻烦

启动第三个容器

查看当前容器的 hosts 文件

别名通信

查看当前dock的网卡信息

主机网络使用方式

通过网络换机互联

验证:同一个机器之间可以直接访问的是通信的,如果这两个机器之间是一个容器呢?

docker 网络类型

Docker 的网络有四种类型,下面将介绍每一种类型的具体工作方式: Bridge 模式,使用参数 –net=bridge 指定,不指定默认就是 bridge 模式

Host 模式

使用参数 –net=host 指定 启动的容器如果指定了使用 host 模式,那么新创建的容器不会创建自己的虚拟网卡,而是直接使用宿主机的网卡和 IP 地址,因此在容器里面查看到的 IP 信息就是宿主机的信息,访问容器的时候直接使用宿主机 IP+容器端口即可,不过容器的其他资源们必须文件系统、系统进程等还是和宿主机保持隔离。 此模式的网络性能最高,但是各容器之间端口不能相同,适用于运行容器端口比较固定的业务。

为避免端口冲突,先删除所有的容器

访问宿主机验证

none 模式

使用参数 –net=none 指定 在使用 none 模式后,Docker 容器不会进行任何网络配置,其没有网卡、没有 IP也没有路由,因此默认无法与外界通信,需要手动添加网卡配置 IP 等,所以极少使用

Container 模式

使用参数 –net=container:名称或 ID 指定 使用此模式创建的容器需指定和一个已经存在的容器共享一个网络,而不是和宿主机共享网,新创建的容器不会创建自己的网卡也不会配置自己的 IP,而是和一个已经存在的被指定的容器东西 IP 和端口范围,因此这个容器的端口不能和被指定的端口冲突,除了网络之外的文件系统、进程信息等仍然保持相互隔离,两个容器的进程可以通过 lo 网卡进行通信

bridge 模式

docker 的默认模式即不指定任何模式就是 bridge 模式,也是使用比较多的模式,此模式创建的容器会为每一个容器分配自己的网络 IP 等信息,并将容器连接到一个虚拟网桥与外界通信

docker 夸主机互联之简单实现

夸主机互联是说 A 宿主机的容器可以访问 B 主机上的容器,但是前提是保证各宿主机之间的网络是可以相互通信的,然后各容器才可以通过宿主机访问到对方的容器,实现原理是在宿主机做一个网络路由就可以实现 A 宿主机的容器访问 B 主机的容器的目的,复杂的网络或者大型的网络可以使用 google 开源的k8s 进行互联

修改各宿主机网段

Docker 的默认网段是 172.17.0.x/24,而且每个宿主机都是一样的,因此要做路由的前提就是各个主机的网络不能一致 为避免影响,先在各服务器删除之前穿件的所有容器 docker rm -fv $(docker ps -a -q)

服务器 A 更改网段

重启 docker 服务并验证网卡

服务器 B 更改网段:

验证网卡

在两个宿主机分别启动一个实例

添加静态路由

在各宿主机添加静态路由,网关指向对方的 IP

抓包分析

测试容器间互联

宿主机 A 到宿主机 B 容器测试
宿主机 B 到宿主机 A 容器测试

小结

bridge 报文先转发docker0网口,默认地址是172.17.0.1 然后在转转给宿主主机 中间经过了转发,此模式常用 host 性能要好一点 一般用于redis mysql服务 启动用之前是映射宿主主机端口,缺点,端口会冲突 none 模式使用的不多,一般用于容器测试,打包后测试容器运行
Loading...