Docker资源限制 与数据卷

目录

一,什么是资源限制

[1.1CPU 资源控制](#1.1CPU 资源控制)

[1.1.1设置 CPU 使用率上限](#1.1.1设置 CPU 使用率上限)

1.2内存使用限制

[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))

1.3.2示例命令

二,数据卷容器 (Data Volumes Containers)

2.1数据卷

2.1.1、数据卷的核心特点

2.1.2在数据卷中写入数据


一,什么是资源限制

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 总限制)的配置规则说明,用于约束容器的内存资源使用,避免容器过度占用宿主机内存,核心规则及解读如下:

  1. 示例配置规则
  • 配置格式:-m 300m --memory-swap=1g
  • 规则解读:
    • -m 300m指定容器可用物理内存上限为 300MB
    • --memory-swap=1g指定容器的物理内存 + swap 总容量上限为 1GB ,因此容器可用 swap 空间为1GB - 300MB = 700MB
  • 实际用途:适用于需要限制容器物理内存,但允许一定 swap 缓冲的场景,避免物理内存不足时容器直接触发 OOM(内存溢出)。
  1. 默认行为规则
  • 规则:仅设置--memory-m)而不指定--memory-swap时,容器可用 swap 通常为--memory值的 2 倍(具体行为可能随 Docker 版本、宿主机配置变化)。
  • 示例:若设置-m 500m,默认 swap 可用量为 1000MB,容器总内存限制(物理 + swap)为 1500MB。
  • 注意:该默认行为并非固定,生产环境建议明确指定--memory-swap,避免资源占用超出预期。
  1. swap 不受限配置
  • 规则:--memory-swap=-1
  • 含义:容器的 swap 使用不受限制,可占用宿主机所有可用的 swap 空间。
  • 适用场景:仅建议在容器需处理大内存临时数据、且宿主机 swap 资源充足的非生产场景使用;生产环境不建议(易导致宿主机内存资源耗尽)。
  1. 禁用 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,磁盘IOblkio / 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、数据卷的核心特点

  1. 持久化存储:容器删除 / 重建后,数据卷中的数据仍保留;
  2. 跨容器共享:多个容器可挂载同一个数据卷,实现数据互通;
  3. 性能更优:直接读写宿主机存储,比容器读写层(UnionFS)效率更高;
  4. 隔离性强:数据卷由 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
相关推荐
小宇的天下2 小时前
Synopsys Skipper 核心功能与使用指南(结构化总结)
运维·服务器
苹果醋32 小时前
24.记录Vue项目iview组件日期获取时间少一天
java·运维·spring boot·mysql·nginx
丁丁丁梦涛2 小时前
nginx在多层服务器代理接口地址的应用
运维·服务器·nginx
有谁看见我的剑了?2 小时前
ESXI 虚机机硬盘类型和硬盘模式学习
运维·学习·云计算
GISer_CV攻城狮2 小时前
MapLibre/Martin 地图服务器docker化安装部署
运维·服务器·docker
tzhou644522 小时前
Docker核心功能解析:网络、资源控制、数据卷与镜像构建
网络·docker·eureka
gsls2008082 小时前
Jenkins pipeline流水线方式部署后端jar
运维·jenkins
旖旎夜光2 小时前
Linux(4)(上)
linux
一个平凡而乐于分享的小比特2 小时前
Linux/Unix系统主流脚本语言--Bash语言
linux·bash·脚本语言