6 Docker容器网络

6 Docker容器网络

6.1 网络模式

  • bridge –net=bridge 默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。

  • host –net=host 容器不会获得一个独立的network namespace,而是与宿主机共用一个。这就意味着容器不会有自己的网卡信息,而是使用宿主机的。容器除了网络,其他都是隔离的。

  • none –net=none 获取独立的network namespace,但不为容器进行任何网络配置,需要我们手动配置。

  • container –net=container:Name/ID 与指定的容器使用同一个network namespace,具有同样的网络配置信息,两个容器除了网络,其他都还是隔离的。

  • 自定义网络 与默认的bridge原理一样,但自定义网络具备内部DNS发现,可以通过容器名容器之间网络通信。

6.2 容器网络访问原理

Docker 容器默认使用 bridge 模式的网络。其特点如下:

  • 使用一个 linux bridge,默认为 docker0

  • 使用 veth 对,一头在容器的网络 namespace 中,一头在 docker0 上

  • 该模式下Docker Container不具有一个公有IP,因为宿主机的IP地址与veth pair的 IP地址不在同一个网段内

  • Docker采用 NAT 方式,将容器内部的服务监听的端口与宿主机的某一个端口port 进行“绑定”,使得宿主机以外的世界可以主动将网络报文发送至容器内部

  • 外界访问容器内的服务时,需要访问宿主机的 IP 以及宿主机的端口 port

  • NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。

  • 容器拥有独立、隔离的网络栈;让容器和宿主机以外的世界通过NAT建立通信

image-20210505160039244

6.3 容器数据包访问流程图

内部→外部

image-20210505160111810

外部→内部

image-20210505160121511

 

posted @ 2021-05-10 16:30  孤独的小人物  阅读(154)  评论(0)    收藏  举报