目录
[1.1CPU 资源控制](#1.1CPU 资源控制)
[1.1.1设置 CPU 使用率上限](#1.1.1设置 CPU 使用率上限)
[1.2.1--memory 与 --memory-swap 规则](#1.2.1--memory 与 --memory-swap 规则)
[用docker stats实时观察](#用docker stats实时观察)
[1.3,磁盘 IO(blkio / io)控制](#1.3,磁盘 IO(blkio / io)控制)
[1.3.1、常用 Docker 参数(blkio)](#1.3.1、常用 Docker 参数(blkio))
二,数据卷容器 (Data Volumes Containers)
一,什么是资源限制
Docker 资源限制用于控制容器对宿主机 CPU、内存、磁盘 IO 等资源的占用,避免单个容器耗尽宿主机资源,核心涵盖 CPU、内存、磁盘 IO 三类限制,
1.1CPU****资源控制
Docker 的 CPU 资源控制是通过Linux 内核的 CFS 调度器(Completely Fair Scheduler,完全公平调度器) 实现的,核心是限制容器对 CPU 的占用比例、核心绑定及优先级,避免单个容器耗尽宿主机 CPU 资源。
1.1.1设置CPU使用率上限
查看cpu命令:lscpu
启动带 CPU 限制的容器(2 核主机适配)

在容器内安装 CPU 压力测试工具后测试

1.1.2,设置 CPU 占用比(权重 --- -- cpu - shares )
docker run -itd --name c1 --cpu-shares 512 centos:7
docker run -itd --name c2 --cpu-shares 1024 centos:7
验证 :运行压力程序( stress - c N )后用 docker stats 观察 CPU % 倾向于 1:2 (随系统负载
和核心数而变化)。
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
xxxxxxxxxxxx c1 ~33.3% 2.05MiB / 1.937GiB 0.1% 0B / 0B 0B / 0B 4
yyyyyyyyyyyy c2 ~66.7% 2.07MiB / 1.937GiB 0.1% 0B / 0B 0B / 0B 4
1.2内存使用限制
1.2.1**--memory 与--memory-**swap 规则
Docker 中--memory(物理内存限制)与--memory-swap(物理内存 + swap 总限制)的配置规则说明,用于约束容器的内存资源使用,避免容器过度占用宿主机内存,核心规则及解读如下:
- 示例配置规则
- 配置格式:
-m 300m --memory-swap=1g - 规则解读:
-m 300m指定容器可用物理内存上限为 300MB;--memory-swap=1g指定容器的物理内存 + swap 总容量上限为 1GB ,因此容器可用 swap 空间为1GB - 300MB = 700MB。
- 实际用途:适用于需要限制容器物理内存,但允许一定 swap 缓冲的场景,避免物理内存不足时容器直接触发 OOM(内存溢出)。
- 默认行为规则
- 规则:仅设置
--memory(-m)而不指定--memory-swap时,容器可用 swap 通常为--memory值的 2 倍(具体行为可能随 Docker 版本、宿主机配置变化)。 - 示例:若设置
-m 500m,默认 swap 可用量为 1000MB,容器总内存限制(物理 + swap)为 1500MB。 - 注意:该默认行为并非固定,生产环境建议明确指定
--memory-swap,避免资源占用超出预期。
- swap 不受限配置
- 规则:
--memory-swap=-1 - 含义:容器的 swap 使用不受限制,可占用宿主机所有可用的 swap 空间。
- 适用场景:仅建议在容器需处理大内存临时数据、且宿主机 swap 资源充足的非生产场景使用;生产环境不建议(易导致宿主机内存资源耗尽)。
- 禁用 swap 配置
- 规则:
--memory-swap与--memory(-m)值相同(如-m 400m --memory-swap=400m)。 - 含义:容器无法使用 swap 空间,当物理内存占用达到上限时,会直接触发 OOM 并终止。
- 适用场景:适用于对性能敏感的容器(swap 读写速度远低于物理内存),强制容器仅使用物理内存,避免 swap 导致的性能下降。
5.验证与观察
# 创建neicun8(物理内存512M,swap默认2倍)
docker run -itd --name neicun8 -m 512m centos:7 /bin/bash
用docker stats实时观察

建议与注意
为生产服务设置合理内存限制,避免单容器把宿主机内存耗尽。
对于内存敏感的应用,建议同时设置 - m 与 -- memory - swap ,并配合健康检查 / 重启策略。
在 cgroup v2 环境下内存控制文件名 / 行为可能与 v1 略有不同(检查 /sys/fs/cgroup 结构)。
1.3,磁盘IO(blkio / io)控制
Docker 通过 cgroups 的 blkio 控制器,实现对容器所使用块设备(如宿主机磁盘)的 ** 读写带宽、IOPS(每秒 IO 操作数)** 的限制,避免单个容器过度占用磁盘资源,保障宿主机及其他容器的磁盘性能稳定。
1.3.1、常用 Docker 参数(blkio)
以下参数用于限制容器对指定块设备的 IO 资源,格式为 "参数 + 目标设备 + 限制值":
--device-read-bps /dev/sda:1M:限制容器对/dev/sda设备的读带宽为 1MB / 秒;--device-write-bps /dev/sda:1M:限制容器对/dev/sda设备的写带宽为 1MB / 秒;--device-read-iops /dev/sda:100:限制容器对/dev/sda设备的读 IOPS为 100 次 / 秒;--device-write-iops /dev/sda:100:限制容器对/dev/sda设备的写 IOPS为 100 次 / 秒。
1.3.2示例命令
docker run -it --name iocesi --device-write-bps /dev/sda:1MB centos:7 /bin/bash
在容器内执行写入测试,使用 oflag=direct 跳过文件系统缓存:
dd if = /dev/zero of = test.out bs = 1M count = 10 oflag = direct

输出示例说明: 10485760 bytes (10 MB) copied, 10.0025 s, 1.0 MB/s → 写速被限为约 1
MB/s 。
1.4,清理 Docker 占用的磁盘空间
docker system prune -a
该命令会删除停止的容器、未使用的镜像、未使用的网络和构建缓存(要谨慎使用,会删除很
多资源
二,数据卷容器**(Data Volumes Containers)**
2.1数据卷
在 Docker 中,数据卷(Volume)是用于实现容器数据持久化、跨容器数据共享 的独立存储单元,其核心特点是独立于容器生命周期(容器删除后数据不会丢失),同时能避免容器读写层的性能损耗
2.1.1、数据卷的核心特点
- 持久化存储:容器删除 / 重建后,数据卷中的数据仍保留;
- 跨容器共享:多个容器可挂载同一个数据卷,实现数据互通;
- 性能更优:直接读写宿主机存储,比容器读写层(UnionFS)效率更高;
- 隔离性强:数据卷由 Docker 管理(或显式绑定宿主机路径),避免容器内部数据混乱。
2.1.2在数据卷中写入数据
使用 docker run 命令启动一个容器时,可以通过 - v 或 -- mount 选项将宿主机的目录挂载到容器中的
数据卷。下面是一个简单的例子:
docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
- v /var/www:/data1 : 将宿主机上的 /var/www 目录挂载到容器中的 /data1 目录。这样容器内
/data1 的修改会同步到宿主机上的 /var/www 。
-- name web1 : 给容器指定一个名称 web1 。 - it centos:7 /bin/bash : 使用 centos:7 镜像启动容器并进入交互式 shell 。
进入容器后,可以在 /data1 目录下创建文件:
echo "this is web1" > /data1/abc.txt
查看宿主机的数据
cat /var/www/abc.txt
