Docker网络

docker网络

  • 容器网络的类型介绍

    • none网络:该模式关闭了容器的通信功能

      • 应用场景:对于一些安全性较高的应用并且不需要进行互联网的应用可以使用none网络。比如某个容器的唯一用途是生成随机密码,就可以放到none网络中避免密码被盗窃

    • host网络

      • 介绍:网络不会虚拟化出自己的网卡、设置IP,而是使用宿主机的IP和端口。使用--network=host指定使用host网络

      • 应用场景:使用host网络的最大好处就是性能,如果容器对网络传输效率有较高的要求,则可以使用host网络模式。不便之处就是牺牲灵活性,比如需要考虑端口冲突问题。另一个用途就是直接配置host网路

    • bridge网络

      • 介绍:此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟机网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信

    • 用户自定义网络

      • 用户可以自定义的类型包括:bridge、overlay、macvlan。后两者主要用户跨主机之间的通信

      docker network create --driver bridge my_net
      #用户可以自定义子网IP和网管
      docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2
      docker run -it --network=my_net2 busybox
      #用户可以自定义静态IP
      docker run -it --network=my_net2 --ip 172.22.16.8 busybox

      • 当前的网络拓扑

      • 用户如果想使用新的网络可以使用--network指定

    同一网关之间是可以进行通信的

  • 如何实现httpd和busybox通信

    • 为httpd容器添加一块net_my2的网卡,通过docker network connect命令实现

    # 3fak3werwq为httpd容器ID
    docker network connect my_net2 3fak3werwq

  • 容器之间是如何通信的

    • IP通信

      • 两个容器要能通信,必须要有属于同一个网络的网卡。满足这个条件后,容器就可进行IP交互了。具体的做法就是通过--network指定相应的网络,或者通过docker network connect将现有的容器加入指定网络

    • Docker DNS Server

      • 只能在user-defined网络中使用。也就是说,默认的bridge网络无法使用DNS

    • joined容器

      • joined容器是另一种实现容器之间通信的方式,它可以使两个或者多个容器共享一个网络栈,共享网卡和配置信息

        docker run -d -it --name=web1 httpd
        #通过--network=容器:web1 指定join容器为web1
        docker run -it --network=container:web1 busybox
      • 落地场景:

        • 不同的容器希望通过loopback高效地通信,比如web server与app server

        • 希望监控其他容器的网络流量,比如运行在独立容器中的网络监控程序

  • 容器和外界是如何进行通信的

    • 容器访问外部世界

      • 容器默认就能访问外部世界

    • 外部世界访问容器‘

      • 端口映射

      #通过-p参数映射端口
      docker run -d -p 80 httpd
      docker port {容器ID}
      • Lib network & CNM

        • Libnetwork 是 docker 容器网络库,最核心的内容是其定义的Container Network Model这个模型对容器网络进行了抽象,由以下三类组件组成

        • sandbox

          • sandbox是容器的网络栈,包含容器的interface,路由表和DNS设置。

        • endpoint

          • endpoint的作用是将sandbox接入Network

        • network

          • network 包含一组endpoint,同一network的endpoint可以直接通信

      • overlay

        docker overlay 需要一个key-value数据库用于保存网络的状态信息,包括network、endpoint、IP等。Consul、Etcd和ZooKeeper都是Docker支持的key-value软件。

        • 连通性:docker为每个overlay网络创建一个独立的network namespace,其中会有一个linux bridge br0,endpoint还是由veth pair实现,一端连接到容器中,另一端连接到namespace的br0上。br0除了连接所有的endpoint,还会连接一个vxlan设备,用于和其他host建立vxlan tunnel。容器之间就是通过和这个tunnel通信的。

        • 隔离性:不同的overlay网络之间是隔离的

        • IPAM:docker默认为overlay网络分配24位子网掩码(10.0.X.0/24),所有主机共享这个subnet,容器启动时会顺序从空间分配IP,当然我们也可以通过--subnet指定IP空间

      • macvlan

        macvlan本身是linux kernel 模块,其功能是允许同一个物理网卡配置多个MAC地址,即多个interface, 每个interface可以配置自己的IP。macvlan本质上是一种网卡虚拟化技术,macvlan的最大优点是性能极好,相比其他实现,macvlan不需要创建Linux bridge,而是直接通过以太interface连接到物理网络。

      docker 跨主机通信

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值