在CentOS系统中,Docker资源分配主要涉及CPU、内存、磁盘I/O、存储空间及网络五大类,可通过命令行参数、配置文件或编排工具实现精细化管控。
CPU资源分配的核心是限制容器对CPU核心的使用数量及优先级,常用方法如下:
--cpus参数指定容器可使用的CPU核心数(支持小数,如1.5表示1.5个核心)。例如,限制容器使用2个核心:docker run --cpus=2 my_image。--cpuset-cpus参数将容器绑定到特定CPU核心(如0,2表示仅使用核心0和2),避免多容器竞争同一核心。例如:docker run --cpuset-cpus="0,2" my_image。--cpu-shares参数设置CPU时间分配比例(默认1024,值越大优先级越高)。例如,设置权重为512(较低优先级):docker run --cpu-shares=512 my_image。内存分配需兼顾物理内存与交换空间(Swap),防止容器过度占用导致宿主机内存耗尽:
-m或--memory参数设置容器最大物理内存(如512m表示512MB)。例如:docker run -m 512m my_image。--memory-swap参数限制“物理内存+交换空间”的总大小(如--memory=512m --memory-swap=1g表示物理内存512MB+交换空间512MB,总计1GB)。若仅设置--memory-swap(如--memory-swap=1g),则交换空间为物理内存的1倍。通过--device-read-bps(读取带宽限制)和--device-write-bps(写入带宽限制)参数,限制容器对指定设备(如/dev/sda)的I/O速度:
/dev/sda的写入速度为1MB/s:docker run --device-write-bps=/dev/sda:1mb my_image;限制读取速度为2MB/s:docker run --device-read-bps=/dev/sda:2mb my_image。存储资源分配可通过容器级别(限制单容器磁盘使用)或宿主机级别(调整Docker数据目录大小)实现:
--storage-opt size=1g参数限制容器最大磁盘空间(如docker run --storage-opt size=1g my_image)。systemctl stop docker),使用dd命令调整数据池大小(如扩展至20GB),再通过docker info验证。/new/docker),复制旧数据(rsync -a /var/lib/docker/ /new/docker/),修改/etc/docker/daemon.json中的data-root为新路径,重启Docker。网络资源分配主要包括带宽限制与网络模式配置:
tc(Traffic Control)工具结合cgroups实现(如tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms)。--network参数设置网络模式(如bridge默认模式、host共享宿主机网络、none无网络),并通过-p参数映射端口(如-p 8080:80将容器80端口映射到宿主机8080端口)。使用Docker Compose管理多容器时,可在docker-compose.yml文件中通过deploy.resources字段定义资源限制:
version: '3'
services:
web:
image: nginx:latest
deploy:
resources:
reservations: # 预留资源(保证容器启动的最小资源)
cpus: '0.5' # 预留0.5个CPU核心
memory: 256M # 预留256MB内存
limits: # 最大资源限制
cpus: '1' # 最多使用1个CPU核心
memory: 512M # 最多使用512MB内存
该配置确保web服务启动时至少获得0.5核CPU和256MB内存,运行时最多使用1核CPU和512MB内存。
docker stats命令查看所有运行中容器的CPU、内存、网络等资源使用情况(如docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}")。--cpus值;内存使用率低则减少--memory限制)。以上方法覆盖了CentOS系统下Docker资源分配的主要场景,可根据应用需求选择合适的方式实现精细化管控。