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
相关推荐
极客先躯22 分钟前
如何自动提取Git指定时间段的修改文件?Win/Linux双平台解决方案
linux·git·elasticsearch
C_心欲无痕38 分钟前
nginx - 实现域名跳转的几种方式
运维·前端·nginx
suijishengchengde1 小时前
****LINUX时间同步配置*****
linux·运维
幻云20101 小时前
AI自动化编排:从入门到精通(基于Dify构建AI智能系统)
运维·人工智能·自动化
qiuqyue1 小时前
基于虹软Linux Pro SDK的多路RTSP流并发接入、解码与帧级处理实践
linux·运维·网络
切糕师学AI2 小时前
Linux 操作系统简介
linux
C_心欲无痕2 小时前
Docker 本地部署 CSR 前端项目完整指南
前端·docker·容器
南烟斋..2 小时前
GDB调试核心指南
linux·服务器
爱跑马的程序员2 小时前
Linux 如何查看文件夹的大小(du、df、ls、find)
linux·运维·ubuntu
飞翔沫沫情4 小时前
MinIO 新版本 Docker 部署指南:告别 Web 控制台,拥抱 CLI 管理
docker·容器·docker-compose·对象存储·minio