docker单机网络类型概述
Docker 安装时会自动在 host 上创建三种网络 分别为 bridge host none . 可用 docker network ls 命令查看
none 网络
none 网络就是什么都没有的网络.挂在这个网络下的容器除了 lo,没有其他任何网卡
一些对安全性要求高并且不需要联网的应用可以使用 none 网络
host 网络
连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host 完全一样
在容器中可以看到 host 的所有网卡,并且连 hostname 也是 host 的
直接使用 Docker host 的网络最大的好处就是性能,如果容器对网络传输效率有较高要求,则可以选择 host 网络.
当然不便之处就是牺牲一些灵活性,比如要考虑端口冲突问题,Docker host 上已经使用的端口就不能再用了.
另一个用途是让容器可以直接配置 host 网路.比如某些跨 host 的网络解决方案,其本身也是以容器方式运行的,这些方案需要对网络进行配置,比如管理 iptables.
bridge网络
Docker 安装时会创建一个 命名为 docker0 的 linux bridge. 如果不指定--network,
建的容器默认都会挂到 docker0上
docker0 对宿主机来讲相当于一个单独的网卡设备 对于运行在宿主机上的每个容器来说相当于一个交换机 所有容器的虚拟网线的一端都连接到docker0上
并且docker0还是所有容器的网关
容器的网卡 eth0@if34和宿主机上的brctl show 显示挂载到docker0桥下的veth28c57df是一对 veth pair
veth pair 是一种成对出现的特殊网络设备,可以把它们想象成由一根虚拟网线连接起来的一对网卡,网卡的一头(eth0@if34)在容器中,另一头(veth28c57df)挂在网桥docker0上,其效果就是将eth0@if34也挂在了docker0上
自定义bridge网络
1.创建一个linux 网桥设备 基于Linux 内核支持创建 docker network create --driver bridge
2.启动容器的时候把容器的网卡挂到此桥接设备上 docker run --network
docker通过防火墙规则阻断了所有桥接设备的双向流量 相当于所有的交换机都是隔开的 要想跨网桥之间的容器进行通信 可以为容器添加单独的网卡设备
如为httpd容器执行 docker network connect my_net2 实现的网络拓扑如下