初识Docker网络

本文深入探讨了Docker的网络配置,包括默认的bridge模式、Container模式、host模式和None模式,分析了各自的优缺点。重点介绍了自定义网络的创建与使用,强调了其在网络隔离性和服务定制上的优势。此外,还详细阐述了如何使不同网络桥接的容器相互通信的步骤和注意事项。
摘要由CSDN通过智能技术生成

初识Docker网络

1.启动测试容器

# 在不指定网络配置时,默认使用 bridge 模式,可以使用 docker network ls 查看网络模式
docker run -d -P --name mytomcat01 fe38b6185261
docker run -d -P --name mytomcat02 fe38b6185261

在这里插入图片描述

2.查看网配置

ip a

在这里插入图片描述

3.测试连通性

# 两个容器之间测试连通性
docker exec -it mytomcat02 ip a     # 查看ip地址
docker exec -it mytomcat01 ping 172.17.0.3      # ping 对应地址

在这里插入图片描述

4.原理图

Docker 网络默认情况下使用 bridge 模式,所以在 mytomcat01 ping mytomcat02 时实际是通过 Docker0 桥接

veth设备的特点

  • veth和其它的网络设备都一样,一端连接的是内核协议栈。
  • veth设备是成对出现的,另一端两个设备彼此相连
  • 一个设备收到协议栈的数据发送请求后,会将数据发送到另一个设备上去。

在这里插入图片描述

在这里插入图片描述

5.–link (不推荐使用,了解即可)

通过容器服务名称 ping 通容器,这样在容器关闭后 ip 地址改变也不影响连接

docker run --name mytomcat03 --link mytomcat02 -d -P mytomcat:2.0
# 通过 --link 将 mytomcat02 绑定在 mytomcat03 实际是在 mytomcat03 中的 /etc/hosts 文件中绑定

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

6.Docker 四种网络模式

  • 查看 docker 网络配置
docker network ls

在这里插入图片描述

bridge

Bridge 桥接模式的实现步骤主要如下:
  • Docker Daemon 利用 veth pair 技术,在宿主机上创建两个虚拟网络接口设备,假设为veth0 和 veth1。而 veth pair 技术的特性可以保证无论哪一个 veth 接收到网络报文,都会将报文传输给另一方。
  • Docker Daemon 将 veth0 附加到 Docker Daemon 创建的 docker0 网桥上。保证宿主机的网络报文可以发往 veth0;
  • Docker Daemon 将 veth1 添加到 Docker Container 所属的 namespace 下,并被改名为 eth0。如此一来,保证宿主机的网络报文若发往 veth0,则立即会被 eth0 接收,实现宿主机到Docker Container 网络的联通性;同时,也保证 Docker Container 单独使用 eth0,实现容器网络环境的隔离性
Bridge桥接模式的缺陷:
  • 最明显的是,该模式下 Docker Container 不具有一个公有 IP,即和宿主机的 eth0 不处于同一个网段。导致的结果是宿主机以外的世界不能直接和容器进行通信。

  • 虽然 NAT 模式经过中间处理实现了这一点,但是 NAT 模式仍然存在问题与不便,如:容器均需要在宿主机上竞争端口,容器内部服务的访问者需要使用服务发现获知服务的外部端口等。

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

  • bridge模式是docker的默认网络模式,不写–net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

Container

Container 网络模式实现过程

在 Docker 容器的 Container 网络模式实现过程中,不涉及网桥,同样也不需要创建
虚拟网卡 veth pair 。完成 Container 网络的创建只需要两个步骤:

  1. 查找 Container (即需要被共享网络环境的容器)的网络命名空间。
  2. 新创建的 Docker 容器的网络命名空间使用其他容器的网络命名空间。
Container网络模式的缺陷:

它并没有改善容器与宿主机以外世界通信的情况(和桥接模式一样,不能连接宿主机以外的其他设备)。
在这里插入图片描述
在这里插入图片描述

host

host优点
  • host 模式是 bridge 桥接模式很好的补充。采用 host 模式的 Docker Container,可以直接使用宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换。
Host 网络模式的缺陷:

当然,有这样的方便,肯定会损失部分其他的特性。

  • 最明显的是 Docker Container 网络环境隔离性的弱化。即容器不再拥有隔离、独立的网络栈。
  • 使用 host 模式的 Docker Container 虽然可以让容器内部的服务和传统情况无差别、无改造的使用,但是由于网络隔离性的弱化,该容器会与宿主机共享竞争网络栈的使用;
  • 另外,容器内部将不再拥有所有的端口资源,原因是部分端口资源已经被宿主机本身的服务占用,还有部分端口已经用以 bridge 网络模式容器的端口映射。
    在这里插入图片描述
    在这里插入图片描述

None

  • 在这种模式下,容器有独立的网络栈,但不包含任何网络配置,只具有lo这个loopback网卡用于进程通信。也就是说,none模式为容器做了最少的网络设置,但是俗话说得好“少即是多”,在没有网络配置的情况下,通过第三方工具或者手工的方式,开发这任意定制容器的网络,提供了最高的灵活性
    在这里插入图片描述

7.自定义网络(推荐使用)

1)自定义网络的好处:

  1. 网络之间相互隔离
  2. 不同服务可以自定义使用不同的网络环境
    在这里插入图片描述
docker network --help
docker network create --help

在这里插入图片描述

2)自定义网络配置

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
# --driver bridge           配置网络模式
# --subnet 192.168.0.0/16   配置子网掩码
# --gateway 192.168.0.1     配置网关
# mynet                     命名

在这里插入图片描述

3)使用自定义网桥创建容器,,自定义ip地址:

docker run -it -d -P --name mytomcat-mynet-03 --net mynet --ip 192.168.0.10 mytomcat:2.0

在这里插入图片描述

# 查看网配置
docker network inspect mynet

在这里插入图片描述

8.相同网桥测试连通性

# 使用自定义网络启动两个容器
docker run -it -d -P --name mytomcat-mynet-01 --net mynet mytomcat:2.0
docker run -it -d -P --name mytomcat-mynet-02 --net mynet mytomcat:2.0

在这里插入图片描述
在这里插入图片描述

docker exec -it mytomcat-mynet-01 ping mytomcat-mynet-02
docker exec -it mytomcat-mynet-02 ping mytomcat-mynet-01
# 自定义网络,直接使用容器名就可以互相 ping 通

在这里插入图片描述

9.使两个不同网桥的容器通信

1) 使用默认 bridge 启动一个容器

# 使用默认 bridge 启动一个容器
docker run -it -d -P --name mytomcat-bridge mytomcat:2.0

在这里插入图片描述

默认使用不同网桥的容器是不可以通讯的

在这里插入图片描述

2) connect(一个容器两个 ip)

  • 将一个容器连接到一个网络上
docker network connect [OPTIONS] NETWORK CONTAINER

docker network connect mynet mytomcat-bridge
# 将一个名为 mytomcat-bridge 的容器添加到 mynet 网络中

在这里插入图片描述
在这里插入图片描述

3) 测试不同网桥之前的连通性

docker exec -it mytomcat-bridge ping mytomcat-mynet-02
docker exec -it mytomcat-mynet-02 ping mytomcat-bridge

在这里插入图片描述

4) 原理图

在这里插入图片描述

5) 注意事项

1) docker的bridge自定义网络之间:双方可以随便添加对方的网卡
2) docker的bridge自定义网络与系统自带的网桥之间:只能是,系统自带的网桥对应的容器添加bridge自定义网络对应的容器的网卡。而反过来会报错。
3) 但是docker的系统自带的网桥之间:是可以通信的,因为是在一个网络桥接上。

 
 
 
 
 
 
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值