Linux企业运维——Docker(五)网络

Linux企业运维——Docker(五)网络

一、Docker原生网络

Docker自身有4种网络工作方式:

网络模式工作模式
host容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口
Container创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围
None该模式关闭了容器的网络功能
Bridge此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信

docker安装后会自动创建3种原生网络:bridge、host、none。
在这里插入图片描述

1.1、bridge网络

  • bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的。
  • 容器通过宿主机的NAT规则后可以访问外网。
    在这里插入图片描述

docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口

安装查看桥接工具
在这里插入图片描述
在这里插入图片描述

1.2、host网络

  • host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。
    在这里插入图片描述
    关闭harbor仓库,使用host网络模式运行容器
    在这里插入图片描述

1.3、none网络

  • none模式是指禁用网络功能,只有lo接口,在容器创建时使用
    –network=none指定。

使用none网络模式运行容器
在这里插入图片描述

1.4、网络ip分配规则

先运行两个容器
在这里插入图片描述
查看它们分别的ip
在这里插入图片描述
在这里插入图片描述
当容器停掉时,资源会释放,重新启动按照启动顺序分配动态ip
关闭demo1和demo2,再重启,启动顺序为先demo2再demo1
在这里插入图片描述
再次查看他们的网卡
在这里插入图片描述
在这里插入图片描述

二、Docker自定义网络

  • 自定义网络模式,docker提供了三种自定义网络驱动:
    bridge、overlay、macvlan
    bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,overlay和macvlan是用于创建跨主机网络。
  • 建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址。

2.1、自定义网络创建

(1)创建自定义网桥
在这里插入图片描述
(2)使用自定义网络启动容器
在这里插入图片描述
测试可以ping通demo1

2.2、不同网桥的容器如何通信

(1)删除demo1和自定义网络mynet1,使用带参数的方法重新创建新的自定义网络,使用新的自定义网络运行demo容器

  • –subnet: 子网掩码
    镜像信任功能能够保证镜像的安全,只有打了信任标签的镜像才能被拉取
  • –gateway: 网关

在这里插入图片描述
在这里插入图片描述
(2)使用自定义网络再启动busybox镜像容器,测试连通性
在这里插入图片描述
(3)在创建一个新的自定义网络mynet2
在这里插入图片描述
(4)用mynet2启动busybox镜像容器
在这里插入图片描述
此时无法ping通172.20.0.10

(5)为该容器配置第二块网卡
在这里插入图片描述
再查看其ip,已经有了另一网段的ip,且可以ping通了
在这里插入图片描述

三、容器通信

3.1、使用容器名称通信

Container 网络模式是 Docker 中一种较为特别的网络的模式。
Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。
在容器创建时使用–network=container:vm指定(vm指定的是运行的容器名)
在这里插入图片描述

–link 可以用来链接2个容器
–link的格式: –link:alias
name和id是源容器的name和id,alias是源容器在link下的别名。

在这里插入图片描述
重新创建demo容器并进行连接,可以ping通
在这里插入图片描述
查看busybox的容器的域名解析文件,看到demo对应的ip是172.17.0.2
在这里插入图片描述
停掉demo容器,用ngix镜像拉起容器test
在这里插入图片描述
可以看到test的ip是172.17.0.2
在这里插入图片描述
再启动demo,查看ip
在这里插入图片描述
在这里插入图片描述
连接到运行中的busybox的容器
在这里插入图片描述
查看域名解析文件,demo对应的ip变成172.17.0.4了

3.2、容器访问外网

在这里插入图片描述

在这里插入图片描述
查看容器ip
在这里插入图片描述
在这里插入图片描述

3.3、外网访问容器

外网访问容器用到了docker-proxy和iptables DNAT
在这里插入图片描述

删除test和demo容器
在这里插入图片描述
重新生成demo容器,-p指定映射端口
宿主机把80端口映射到Docker容器上,访问宿主机的80端口就相当于访问Docker的80端口
在这里插入图片描述
查看目的地转换规则
在这里插入图片描述
删除第6条
在这里插入图片描述
在这里插入图片描述
访问该容器80端口,可以正常访问
在这里插入图片描述
查看网络状态,杀死docker-proxy进程
在这里插入图片描述
现在外网就无法访问容器了
在这里插入图片描述
恢复目的地转换规则第6条链
在这里插入图片描述
在这里插入图片描述
外网又可以成功访问了
在这里插入图片描述

四、跨主机容器网络

  • 跨主机网络解决方案: docker原生的overlay和macvlan 第三方的flannel、weave、calico
  • 众多网络方案是如何与docker集成在一起的 libnetwork docker容器网络库 CNM (Container Network Model)这个模型对容器网络进行了抽象
  • CNM分三类组件 Sandbox:容器网络栈,包含容器接口、dns、路由表。(namespace) Endpoint:作用是将sandbox接入network (veth pair)
    Network:包含一组endpoint,同一network的endpoint可以通信。

在这里插入图片描述

4.1、跨主机同网段容器通信

  • server1:

网卡监听模式设为混杂模式
在这里插入图片描述
移除两个自定义网络
在这里插入图片描述
创建macvlan1网络
在这里插入图片描述
使用macvlan1网络运行busybox镜像容器
在这里插入图片描述

  • server2:

导入busybox
在这里插入图片描述
创建macvlan1网络,并使用macvlan1网络运行busybox镜像容器
在这里插入图片描述
测试可以相互ping通
在这里插入图片描述
在这里插入图片描述

4.2、跨主机不同网段容器通信

  • macvlan会独占主机网卡,但可以使用vlan子接口实现多macvlan网络
  • vlan可以将物理二层网络划分为4094个逻辑网络,彼此隔离,vlan id取值为1~4094。

server1和server2新加一块网卡eth1
在这里插入图片描述
在这里插入图片描述
新的网卡还没有任何配置
在这里插入图片描述
编写eth1的配置文件
在这里插入图片描述
启用eth1网卡并开启混杂模式
在这里插入图片描述
创建macvlan2网络
在这里插入图片描述
server2也做相同的操作
在这里插入图片描述
再server1和server2上,使用macvlan2网络运行busybox镜像容器
在这里插入图片描述
在这里插入图片描述
可以看到相互都可以ping通

server1将容器以macvlan1网络模式连接到demo容器
在这里插入图片描述
在这里插入图片描述
server2以macvlan1网络模式运行busybox镜像容器,二者可以相互ping通
在这里插入图片描述
查看网络规则表
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值