docker网络模式:
1、bridge :默认网络驱动程序。如果未指定驱动程序,则创建的bridge网络类型.当您需要多个容器在同一个Docker主机上进行通信时,用户定义的桥接网络是最佳选择。
2、host :对于独立容器,删除容器和Docker主机之间的网络隔离,并直接使用主机的网络。host 仅适用于Docker 17.06及更高版本的swarm服务.当网络堆栈不应与Docker主机隔离时,主机网络是最好的
3、overlay:覆盖网络将多个Docker守护程序连接在一起,并使群集服务能够相互通信。您还可以使用覆盖网络来促进群集服务和独立容器之间的通信,或者在不同Docker守护程序上的两个独立容器之间进行通信。此策略消除了在这些容器之间执行OS级别路由的需要.当您需要在不同Docker主机上运行的容器进行通信时,或者当多个应用程序使用swarm服务协同工作时,覆盖网络是最佳选择
4、macvlan:Macvlan网络允许您为容器分配MAC地址,使其显示为网络上的物理设备。Docker守护程序通过其MAC地址将流量路由到容器。macvlan 在处理期望直接连接到物理网络的传统应用程序时,使用驱动程序有时是最佳选择,而不是通过Docker主机的网络堆栈进行路由.当您从VM设置迁移或需要容器看起来像网络上的物理主机时,Macvlan网络是最佳的,每个主机都具有唯一的MAC地址
5、none:对于此容器,禁用所有网络。通常与自定义网络驱动程序一起使用。none不适用于群组服务。
6、network plugins:您可以使用Docker安装和使用第三方网络插件。这些插件可从 Docker Hub 或第三方供应商处获得。第三方网络插件允许您将Docker与专用网络堆栈集成
下面是两种常用的网络模式:
bridge分为默认网桥和用户定义网桥。创建容器没有指定网络时会创建默认网桥,用户可以通过docker network create来定义桥接网络。
docker network create/rm/inspect my-net
docker network prune/ls
docker run -d --name nginx-1 --network my-net -p 80:80 nginx:latest #172.18.0.2
docker run -d --name nginx-2 nginx:latest #172.17.0.2
docker network connect my-net nginx-2
docker inspect nginx-2 #172.18.0.4
docker network disconnect my-net nginx-1
docker inspect nginx-1 #"IPAddress": ""
overlay网络:
需要以下端口打开来往于覆盖网络上参与的每个Docker主机的流量:
1、用于集群管理通信的TCP端口2377
2、TCP和UDP端口7946用于节点之间的通信
3、UDP端口4789用于覆盖网络流量
创建overlay网络之前,要将docker初始化为集群管理器swarm manager或者将docker加入到现有的集群中
docker swarm init
docker swarm join --token SWMTKN-1-0whgl9p83b3ws54oc150588d3v7sc638a1b3z2aeitao7z4xly-7r70wxzaa22y2hf2mug5fipkb 172.27.0.3:2377#加入集群
docker swarm join-token manager #为集群加入manager
docker network create -d overlay my-overlay #创建用于swarm服务的overlay
docker network create -d overlay --attachable my-att-overlay #创建可由集群服务或独立容器用于在其他docker或其他独立容器相互通信的overlay
docker network create -d overlay --attachable --opt encrypted my-att-overlay2 #--opt 加密overlay上的数据传送。在vxlan级别启用IPSEC加密,会产生性能损失,管理器节点每12小时自动旋转密钥。