Docker容器:网络模式与资源控制

目录

一、Docker 网络模式

1、Docker 网络实现原理

2、Docker 网络模式概述

2.1 Host 模式

2.2 Container 模式

2.3 None 模式

2.4 Bridge 模式

2.5 自定义网络(user-defined network)

3、配置 docker 网络模式

3.1 查看网络基础命令

3.1.1 查看 docker 网络列表

3.1.2 搜索指定网络模式的容器

3.1.3 查看容器的进程

3.1.4 查看容器信息(包含配置、环境、网关、挂载、cmd等信息)  

3.1.5 查看网桥bridge信息

3.2 配置 host 网络模式

3.3 配置 container 网络模式

3.4 配置 none 网络模式

3.5 配置 bridge 网络模式

3.6 配置 user-defined network 模式(自定义网络)

二、Docker 资源控制

1、CPU 资源控制

1.1 设置CPU使用率上限 

1.2 设置CPU资源占用比(设置多个容器时才有效)

1.3 设置容器绑定指定的CPU

2、对内存使用的限制

2.1 使用--memory标志

2.2 使用--memory-swap标志

3、对磁盘IO配额控制(blkio)的限制

3.1 限制容器的读写速度 

3.2 限制容器的读写次数

三、Docker 故障造成大量日志导致磁盘爆满故障

四、总结

1、Docker 网络模式

2、Docker 资源控制

2.1 CPU资源控制

2.2 内存资源限制

2.3 磁盘IO配额限制


一、Docker 网络模式

1、Docker 网络实现原理

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信

Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过 Container-IP 访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器

端口映射:

在启动容器的时候,如果不指定对应的端口,在容器外是无法通过网络来访问容器内的服务

端口映射机制将容器内的服务提供给外部网络访问,实质上就是将宿主机的端口映射到容器中,使得外部网络访问宿主机的端口便可访问容器内的服务

docker run -d --name test1 -P nginx	          #随机映射端口(从32768开始)
docker run -d --name test2 -p 9999:80 nginx	  #指定映射端口

docker ps -a   #查看当前所有的容器

浏览器访问:http://172.16.12.12:32768 和 http://172.16.12.12:9999

#查看容器的输出和日志信息
格式:docker logs 容器的ID/名称
如:docker logs test1

#使用 docker run -p 时,docker实际是在iptables做了DNAT规则,实现端口转发功能
iptables -t nat -vnL

2、Docker 网络模式概述

Docker 提供了多种网络模式,用于在容器间和容器与外部网络之间建立通信。这些网络模式可以根据实际需求选择,下面是一些常见的 Docker 网络模式

2.1 Host 模式

  • 相当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址
  • Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等
  • 一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、iptable规则等都与其他的Network Namespace隔离。 一个Docker容器一般会分配一个独立的Network Namespace。 但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口
  • 解决了ip地址不固定的情况

优点:

① 性能优势:由于容器与宿主机共享网络栈,因此在host网络模式下,容器之间的通信不需要经过网络地址转换(NAT),可以提高网络性能

② 简化网络配置:使用host网络模式可以简化网络配置,容器可以直接访问宿主机上的所有网络服务,无需进行端口映射

③ 高吞吐量:由于容器直接使用宿主机的网络接口,可以获得更高的网络吞吐量,适用于对网络性能要求较高的场景

缺点:

① 安全性:由于容器与宿主机共享网络栈,容器之间的隔离性降低,可能会增加一定的安全风险,特别是在多租户环境中

② 端口冲突:在host网络模式下,容器与宿主机共享相同的网络接口,可能会导致端口冲突,需要谨慎管理端口使用

③ 不适用于多主机环境:host网络模式适用于单个主机上的容器,不适用于跨主机通信的场景

2.2 Container 模式

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

 优点

① 容器之间共享同一个网络命名空间,可以直接进行网络通信,无需通过网络层进行路由,提高了网络通信的效率

② 可以方便地实现容器之间的私有网络,适用于需要高度互联的容器组

③ 可以更好地控制容器之间的通信,增强了网络安全性

缺点

① 容器之间共享网络命名空间,可能会导致网络隔离性不足,容器之间的通信可能会相互影响

② 不适合需要完全隔离的场景,因为容器共享网络命名空间,可能会导致安全性问题

③ 可能会增加网络配置和管理的复杂性,特别是在大规模部署时

2.3 None 模式

  • 该模式关闭了容器的网络功能
  • 使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等
  • 这种网络模式下容器 只有lo回环网络,没有其他网卡。 none模式可以在容器创建时通过–network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性
  • 可以安全的储存数据,不会被攻击,可以用来当个仓库

优点

① 提供了最高级别的隔离性,适用于一些需要完全隔离的场景,如测试隔离性等。

② 可以防止容器与外部网络发生意外的通信,增强了安全性。

缺点

① 容器无法与外部网络通信,除非手动配置网络连接或使用其他通信方式,这可能增加了管理和配置的复杂性。

② 不适合一般应用场景,因为容器无法访问外部资源,如互联网或其他容器服务。

2.4 Bridge 模式

  • 此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及iptables nat表配置与宿主之间的关联
  • 当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中
  • 从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看
  • bridge模式是docker的默认网络模式,不写–net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看

优点

① 桥接网络模式是默认的网络模式,易于使用和管理。

② 提供了一定程度的网络隔离,容器之间默认无法直接通信,增强了安全性。

③ 允许容器使用NAT(网络地址转换)来访问外部网络,同时也支持端口映射,方便从外部访问容器内的服务。

缺点

① 需要进行端口映射才能从外部访问容器内的服务,可能会增加管理复杂性。

② 容器之间的通信需要通过桥接网络,可能会影响性能,尤其在大规模部署时。

2.5 自定义网络(user-defined network)

创建自定义的网络模式来满足特定的网络需求。自定义网络模式可以帮助您更好地管理容器之间的通信和隔离

优点:

① 隔离性:自定义网络模式可以帮助实现容器之间的隔离,使它们可以在独立的网络环境中运行

② 灵活性:通过自定义网络模式,您可以根据应用程序需求定制网络配置,实现更灵活的网络管理

③ 安全性:自定义网络模式可以帮助您更好地控制容器之间的通信,提高网络安全性

④ 性能:自定义网络模式可以优化容器之间的通信性能,减少不必要的网络开销

缺点:

① 需要用户自行创建和配置网络,可能增加管理复杂性

3、配置 docker 网络模式

使用docker run创建Docker容器时,可以用 --net 或 --network 选项指定容器的网络模式 

host模式 --net=host 容器和宿主机共享Network namespace
container模式 --net=container:NAME_or_ID 多个容器共享一个Network namespace
none模式 --net=none 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。
bridge模式 --net=bridge 默认为该模式,可省略

3.1 查看网络基础命令

3.1.1 查看 docker 网络列表

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

#查看docker网络列表
docker network ls 或 docker network list			

 3.1.2 搜索指定网络模式的容器
格式:docker ps --filter "network=网络模式"   或者  docker network ls|grep 网络模式
#如:docker ps --filter "network=bridge"  #搜索bridge模式的容器
#如:docker network ls|grep bridge

3.1.3 查看容器的进程
docker inspect -f '{
  
  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值