docker(5、网络1) 网络的几种类型 和网络互通添加网卡

Docker 提供的几种原生网络

Docker 安装时会自动在 host 上创建三个网络,我们可用 docker network ls 命令查看:

none 网络

在容器创建时,不指定任何网络模式。由用户自己在适当的时候去指定。手动使用none模式来实现两个容器之间的互通

封闭隔离,对安全性要求高并且不需要联网的应用。某个容器的唯一用途是生成随机密码

 host 网络

Host模式顾名思义就是共用主机的网络,它的网络命名空间和主机是同一个,使用宿主机Namespace、IP和端口。

可以通过 --network=host 指定使用 host 网络

在容器中可以看到 host 的所有网卡,并且连 hostname 也是 host 的

Docker host 容器可以直接配置 host 网路。最大的好处就是性能,如果容器对网络传输效率有较高要求,则可以选择 host 网络。
缺点就是牺牲一些灵活性,端口冲突问题,Docker host 上已经使用的端口就不能再用

bridge 网络

Docker 安装时会创建一个 命名为 docker0 的 linux bridge。如果不指定--network,创建的容器默认都会挂到 docker0 上

当前 docker0 上没有任何其他网络设备

 

一个新的网络接口 vethaa1ec79 被挂到了 docker0 上,vethaa1ec79就是新创建容器的虚拟网卡

实际上 eth0@if37和 vethaa1ec79  是一对 veth pair。veth pair 是一种成对出现的特殊网络设备

eth0@if37已经配置了 IP 172.17.0.2,通过 docker network inspect bridge 看一下 bridge 网络的配置信息:

bridge 网络配置的 subnet 就是 172.17.0.0/16,并且网关是 172.17.0.1  就是 docker0

  也可以看到容器的网络信息

容器网络拓扑结构如图 

 

 自定义网络

根据业务需要可通过 bridge 驱动创建类似前面默认的 bridge 网络

1、自定义网络自动分配IP段

docker network create --driver bridge my-net  # my-net 是我创建的桥

新增了一个网桥 br-85d4990932b8,这里 85d4990932b8 正好新建 bridge 网络 my_net 的短 id。

执行 docker network inspect 查看一下 my_net 的配置信息: 这里 172.18.0.0/16 是 Docker 自动分配的 IP 网段

1、自定义网络手动分配IP段

创建网段时指定 --subnet 和 --gateway 参数

docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my-net2

新的 bridge 网络 my_net2,网段为 172.22.16.0/24,网关为 172.22.16.1

1、容器要使用新的网络自动分配ip,需要在启动时通过 --network 指定:

docker run -it --network my-net2 busybox

容器的 IP 都是 docker 自动从 subnet 中分配 

2、容器要使用新的网络手动分配ip  

注:只有使用 --subnet 创建的网络才能指定静态 IP。(my-net不能手动指定会报错,my-net2可以)

(my-net不能手动指定会报错,my-net2可以)报错如下

容器之间互通

同一网桥下的容器可以ping 通 ,不同网桥上的容器如何互通, 解决方法就是在容器上添加一块另一个网桥的网卡

如上图 容器1 是ping不通容器2和容器3的  容器2 和容器3 是可以互通的

如何解决互通容器1ping通容器2和容器3  ,解决方案就是在容器1 上加上容器2和3 的网络

docker network connect   my-net2  容器1

发布了62 篇原创文章 · 获赞 10 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/cojn52/article/details/104650060