[Docker][Docker NetWork][上]详细讲解


1.为什么需要网络管理

  • 容器的网络默认与宿主机及其他容器都是相互隔离, 但同时也要考虑以下问题, 比如:
    • 多个容器之间是如何通信的
    • 容器和宿主机是如何通信的
    • 容器和外界主机是如何通信的
    • 容器中要运行一些网络应用(如 nginx、web应用、数据库等),如果要让外部也可以访问这些容器内运行的网络应用应该如何实现
    • 容器不想让它的网络与宿主机、与其他容器隔离应该如何实现
    • 容器根本不需要网络的时候应该如何实现
    • 容器需要更高的定制化网络(如定制特殊的集群网络、定制容器间的局域网)应该如何实现

2.Docker 网络架构简介

0.铺垫说明

  • Docker容器网络是为应用程序所创造的虚拟环境的一部分
  • 它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP协议栈、端口套接字、IP路由表、防火墙等等与网络相关的模块
  • Docker为实现容器网络,主要采用的架构由三部分组成:CNM、Libnetwork 和 驱动

1.CNM

  • Docker网络架构采用的设计规范是CNM(Container Network Model)
  • CNM中规定了Docker网络的基础组成要素
    • Sandbox
      • 提供了容器的虚拟网络栈
        • 即:端口、套接字、IP路由表、防火墙、 DNS配置等内容
      • 主要用于隔离容器网络与宿主机网络,形成了完全独立的容器网络环境
    • Network:Docker内部的虚拟子网,使得网络内的参与者能够进行通讯
    • Endpoint
      • 虚拟网络的接口,就像普通网络接口一样,Endpoint的主要职责是负责创建连接
      • Endpoint类似于常见的网络适配器,那也就意味着一个Endpoint只能接入某一个网络, 当容器需要接入到多个网络,就需要多个Endpoint
  • 如下图所示,容器B有两个Endpoint并且分别接入Networkd A和Network B。那么容器A和容器B之间是可以实现通信的,因为都接入了NetworkA。但是容器A和容器C不可以通过容器B的两个Endpoint通信
    请添加图片描述

2.Libnetwork

  • Libnetwork是CNM的一个标准实现
  • Libnetwork是开源库,采用Go语言编写(跨平台的),也是Docker所使用的库,Docker网络架构的核心代码都在这个库中。 Libnetwork实现了CNM中定义的全部三个组件,此外它还实现了本地服务发现、基于Ingress的容器负载均衡,以及网络控制层和管理层等功能

3.驱动

  • 驱动主要负责实现数据层相关内容
    • 例如:网络的连通性和隔离性是由驱动来处理的
  • 驱动通过实现特定网络类型的方式扩展了Docker网络栈
    • 例如:桥接网络和覆盖网络
  • Docker内置了若干驱动,通常被称作原生驱动或者本地驱动
    • 例如:Bridge Driver、Host Driver、Overlay Driver、MacVLan Driver、IPVLan Driver、None Driver等等
    • 每个驱动负责创建其上所有网络资源的创建和管理

3.常见网络类型

1.bridge 网络

  • bridge驱动会在Docker管理的主机上创建一个Linux网桥
    • 默认情况下,网桥上的容器可以相互通信
    • 也可以通过bridge驱动程序配置,实现对外部容器的访问
  • Docker容器的默认网络驱动,当需要多个容器在同一个Docker主机上通信时,桥接网络是最佳选择
  • 另外,在Docker安装时,会自动安装一块Docker网卡称为docker0,它是一个网桥设备,主要用于Docker各容器及宿主机的网络通信

2.host 网络

  • 对于独立容器,移除容器和Docker主机之间的网络隔离,并直接使用主机的网络
  • 当网络堆栈不应该与Docker主机隔离,但是希望容器的其他资源被隔离时,主机网络是最佳选择

3.container 网络

  • 这个模式指定新创建的容器和已经存在的一个容器共享一个网络 ,而不是和宿主机共享
  • 新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP,端口等
  • 两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的
    • 两个容器的进程可以通过IO网卡设备通信

4.none 网络

  • Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置
    • 也就是说,这个Docker容器没有网卡、IP、路由等信息
  • 容器网络完全隔离

5.overlay 网络

  • 借助Docker集群模块Docker Swarm搭建的跨Docker Daemon网络,将多个Docker守护进程连接在一起,使集群服务能够相互通信
  • 当需要运行在不同Docker主机上的容器进行通信时,或者当多个应用程序使用集群服务协同工作时,覆盖网络是最佳选择
    请添加图片描述

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DieSnowK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值