Docker跨主机网络(overlay)的实现

2020-06-17 07:19:02易采站长站整理

2.2 创建 overlay 网络

创建 overlay 网络与之前创建 bridge 网络基本相同,唯一不同的是将-d参数设置为overlay。如下:

docker network create -d overlay ov_net2

docker network create -d overlay ov_net3 –subnet 172.19.0.0/24 –gateway 172.19.0.1

只需要在一个节点中进行上述创建过程,其他节点自动会识别到该网络,原因正是在于consul的服务发现功能。

之后创建容器的时候只需要指定–network参数为ov_net2即可。

docker run –network ov_net2 busybox

这样即使在不同的主机上使用同一 overlay 网络创建的容器,相互之间也能够直接访问。

2.3 overlay 网络原理

再创建完一个overlay网络之后,通过docker network ls可以看到网络中不仅多了一个我们创建的 ov_net2 (类型为overlay、scope为global),还能看到一个名为 docker_gwbridge (类型为bridge、scope为local)。这其实就是 overlay 网络的工作原理所在。

通过brctl show可以看出,每创建一个网络类型为overlay的容器,则docker_gwbridge下都会挂载一个vethxxx,这说明确实overlay容器是通过此网桥进行对外连接的。

简单的说 overlay 网络数据还是从 bridge 网络docker_gwbridge出去的,但是由于consul的作用(记录了overlay网络的endpoint、sandbox、network等信息),使得docker知道了此网络是 overlay 类型的,这样此overlay网络下的不同主机之间就能够相互访问,但其实出口还是在docker_gwbridge网桥。

none、bridge网络前面已经介绍。bridge就是网桥,虚拟交换机,通过veth连接其与sandbox。

三,让外网能否访问容器的端口映射方法:

[root@localhost ~]# ss -lnt
//查看一下套接字(IP地址和端口)

1)手动指定端口映射关系

[root@localhost ~]# docker pull nginx

[root@localhost ~]# docker pull busybox


[root@localhost ~]# docker run -itd nginx:latest
//不加任何参数开启一台nginx虚拟机
[root@localhost ~]# docker ps
//查看容器信息


[root@localhost ~]# docker inspect vigorous_shannon
//查看容器详细信息(现在看IP)

[root@localhost ~]# curl 172.17.0.2