docker - 网络模式详解

一、分类

docker 大致分为4种网络模式

  • 桥接网络:bridge
    • 默认桥接模式
    • 自定义桥接模式<比默认桥接模式多dns解析功能>
  • 主机网络:host
  • 无网络:none

二、使用

2.1 查看

查看网络列表

image

查看详情

image


2.2 创建

自定义桥接网络

  • 新建网络会生成一个新的网桥设备,类似 docker0
  • 自定义网桥模式的网络支持使用容器的主机名或容器名进行通信,默认的网桥模式不支持
  • 容器使用的子网是在新建网络时指定的,容器挂在该网络下会自动应用该网络的配置
  • 容器的IP是根据使用网络的子网分配的,子网是在新建网络时指定的

image

使用macvlan

  • 首先macvlan,就是在网卡上虚拟网卡,模拟不同ip,不同mac的场景进行通信,这样在二层网络中,就都可以通过mac地址进行通信,避免数据包的封装。
  • docker 的 macvlan 只支持 bridge 模式(macvlan有四种模式,其中一种是bridge,和这章一直说的桥接bridge不是一回事)
  • 一块物理网卡只能绑定一个 macvlan 的网络
  • 网卡必须开启混杂模式

image


2.3 删除

image


2.4 绑定和解除

image


三、模式说明

3.1 桥接模式

创建逻辑

image

  1. 创建主机后,生成 lo 和 etho 两个网卡设备(注意序号)
    image

  2. 安装并启动 docker 后,创建 docker0 网卡(注意序号)
    image

  3. 通过 docker 创建容器后,容器内部创建网卡设备 eth0,同时 docker 会在 docker0 下建立虚拟网络设备 veth(从宿主机看只能看到 veth),两块网卡设备后边的@ifx分别声明了对方(x是对方的序号),意思是这两块网卡是互联的。只要启动容器,eth和veth就是成对出现的,docker0就是我们常说的网桥设备
    image

  4. 我们启动两个容器来验证联通性

优缺点

  1. 默认的桥接模式,是无法通过主机名和容器名直接进行互相访问的,但是自定义的桥接模式可以
    image
    image

  2. 无论是默认的桥接模式还是自定义的桥接模式,外部访问的时候都需要以端口映射的方式暴露端口

  3. 实际上是通过nat后才能通信,所以在性能上没有主机网络好


3.2 主机模式

  • 这个模式无法自定义创建,创建容器时也无法指定端口映射
  • 由于不需要处理数据包,性能最好
  • 容器在这个网络模式下,共享宿主机的端口,需要考虑端口冲突的问题
  • 启动容器时使用--network host指定

image


3.3 无网络

  • 创建容器时通过 --network none 指定
  • 进入容器后能发现只有本地回环网卡,无法访问任何网络,纯粹的单机

image

posted @ 2024-06-19 21:17  难德糊涂  阅读(366)  评论(0)    收藏  举报