前言
本文主要讲docker网络的五种网络模式,其中包括docker安装后默认会生成的三种网络模式(bridge、host和none)以及需要手动定义的两种网络模式(container和自定义)。
容器的网络模式分类
- bridge(默认模式)
- 容器拥有自己的虚拟网卡、虚拟IP、虚拟网关等网络资源,它们通过docker0这个虚拟网卡与宿主机的网卡(eth0或者ens33)进行网络交互,从而实现与外界的网络通信。
- 容器启动命令:
-
docker run -d --name <容器名> --net=bridge <镜像名>:<版本号>
-
- 特点:相同网络模式下的容器,只可以使用虚拟IP相互通信,不可使用容器别名或容器名相互通信。
- host
- 容器没有自己的任何网络资源(比如:容器的IP、网卡、网关和端口等),完全是和宿主机共享网络空间。
- 容器启动命令:
-
docker run -d --name <容器名> --net=host <镜像名>:<版本号>
-
- none
- 容器既没有自己的任何网络资源,又不能共享宿主机的网络空间,处于完全隔离状态,无法与外界进行网络通信。
- 容器启动命令:
-
docker run -d --name <容器名> --net=none <镜像名>:<版本号>
-
- container
- 差不多属于bridge和host的结合体。
- 容器没有自己的任何网络资源,它们需要共享以bridge模式启动的容器的网络资源,若与之共享的容器消失,它们便无法与外界进行通信。
- 容器启动命令:
-
docker run -d --name <容器名> --net=container:<网络模式为bridge的容器名> <镜像名>:<版本号>
-
- 自定义
- 容器与外界的通信方式和bridge相同,创建自定义网络模式时,可以通过 -d 指定网络模式,可以是bridge和overlay,其中overlay功能更为强大,可以指定多个subnet子网网段。
- 创建自定义网络模式
-
docker network create -d bridge --subnet 172.25.0.0/16 mybridge #自定义名字为mybridge的网络模式 docker network create -d overlay --subnet 172.25.0.0/16 --subnet 172.26.0.0/16 myoverlay #自定义名字为myoverlay的网络模式 #上述命令中 -d 可指定bridge或者overlay,--subnet 指定子网网段(不能与其他网卡的网段重叠) #使用--subnet选项创建子网而言,bridge网络只能指定一个子网,而overlay网络支持多个子网。
- 特点:相同网络模式下的容器,不仅可以使用虚拟IP相互通信,还可使用容器别名或容器名相互通信。