本文目录导读:

在Shell脚本中配置容器资源配额,主要针对Docker容器进行CPU、内存、磁盘IO等资源的限制,以下是详细的配置方法:
CPU资源配额配置
限制CPU使用数量
# 限制容器只能使用1.5个CPU核心 docker run -d --cpus="1.5" --name container1 nginx # 限制容器使用特定CPU核心(0和1号核心) docker run -d --cpuset-cpus="0,1" --name container2 nginx # CPU份额(相对权重,默认1024) docker run -d --cpu-shares=512 --name container3 nginx
CPU配额脚本示例
#!/bin/bash # CPU限制脚本 CONTAINER_NAME="web-app" CPU_LIMIT="2.0" # 限制2个CPU核心 CPU_SHARES="512" # CPU份额 docker run -d \ --name $CONTAINER_NAME \ --cpus="$CPU_LIMIT" \ --cpu-shares=$CPU_SHARES \ nginx:latest
内存资源配额配置
限制内存使用
# 限制最大内存为512MB docker run -d --memory="512m" --name container4 nginx # 限制内存+swap总大小为1GB docker run -d --memory="512m" --memory-swap="1g" --name container5 nginx # 禁用swap(只使用物理内存) docker run -d --memory="512m" --memory-swap="512m" --name container6 nginx # 设置内存软限制(可以超过此值但会被限制) docker run -d --memory-reservation="256m" --name container7 nginx
内存限制脚本
#!/bin/bash # 内存限制配置 CONTAINER_NAME="database" MEM_LIMIT="1g" # 最大内存 MEM_RESERVATION="512m" # 内存软限制 SWAP_LIMIT="2g" # 内存+swap总大小 docker run -d \ --name $CONTAINER_NAME \ --memory="$MEM_LIMIT" \ --memory-reservation="$MEM_RESERVATION" \ --memory-swap="$SWAP_LIMIT" \ mysql:8.0
磁盘IO限制
限制读写速度
# 限制读取速度为10MB/s docker run -d --device-read-bps /dev/sda:10mb --name container8 nginx # 限制写入速度为5MB/s docker run -d --device-write-bps /dev/sda:5mb --name container9 nginx # 限制读取IOPS为100 docker run -d --device-read-iops /dev/sda:100 --name container10 nginx # 限制写入IOPS为50 docker run -d --device-write-iops /dev/sda:50 --name container11 nginx
完整的资源配额脚本
#!/bin/bash
# 完整的资源配额配置脚本
set -e
# 配置参数
read -p "请输入容器名称: " CONTAINER_NAME
read -p "请输入CPU限制(核心数,如1.5): " CPU_LIMIT
read -p "请输入内存限制(如512m或1g): " MEM_LIMIT
read -p "是否限制磁盘IO? (y/n): " LIMIT_IO
# 构建docker run命令
DOCKER_CMD="docker run -d --name $CONTAINER_NAME"
# 添加CPU限制
if [ -n "$CPU_LIMIT" ]; then
DOCKER_CMD="$DOCKER_CMD --cpus=\"$CPU_LIMIT\""
fi
# 添加内存限制
if [ -n "$MEM_LIMIT" ]; then
DOCKER_CMD="$DOCKER_CMD --memory=\"$MEM_LIMIT\""
fi
# 磁盘IO限制
if [ "$LIMIT_IO" = "y" ]; then
read -p "请输入读取速度限制(如10mb): " READ_SPEED
read -p "请输入写入速度限制(如5mb): " WRITE_SPEED
DOCKER_CMD="$DOCKER_CMD --device-read-bps /dev/sda:$READ_SPEED"
DOCKER_CMD="$DOCKER_CMD --device-write-bps /dev/sda:$WRITE_SPEED"
fi
# 添加镜像
DOCKER_CMD="$DOCKER_CMD nginx:latest"
# 执行命令
echo "执行命令: $DOCKER_CMD"
eval $DOCKER_CMD
# 检查容器状态
if [ $? -eq 0 ]; then
echo "容器 $CONTAINER_NAME 创建成功"
docker stats --no-stream $CONTAINER_NAME
else
echo "容器创建失败"
exit 1
fi
资源配额验证脚本
#!/bin/bash
# 验证容器资源限制
verify_limits() {
local container_name=$1
echo "=== 容器资源限制信息 ==="
# CPU限制
echo "CPU限制:"
docker inspect $container_name --format='{{.HostConfig.CpusetCpus}}'
docker inspect $container_name --format='{{.HostConfig.CpuShares}}'
# 内存限制
echo "内存限制:"
docker inspect $container_name --format='{{.HostConfig.Memory}}'
docker inspect $container_name --format='{{.HostConfig.MemorySwap}}'
# 查看实时资源使用
echo "实时资源使用:"
docker stats --no-stream $container_name
}
# 使用示例
verify_limits "web-app"
批量配置资源配额
#!/bin/bash
# 批量创建受限容器
CONTAINERS=("app1" "app2" "app3")
CPU_LIMITS=("1.0" "2.0" "0.5")
MEM_LIMITS=("256m" "512m" "128m")
for i in "${!CONTAINERS[@]}"; do
docker run -d \
--name "${CONTAINERS[$i]}" \
--cpus="${CPU_LIMITS[$i]}" \
--memory="${MEM_LIMITS[$i]}" \
nginx:latest
echo "容器 ${CONTAINERS[$i]} 已创建"
done
# 查看所有容器资源使用
echo "所有容器资源使用情况:"
docker stats --no-stream ${CONTAINERS[@]}
注意事项
- 资源限制不严格:内存限制是硬限制,CPU限制相对灵活
- 主机资源考虑:所有容器的资源限制总和不应超过主机可用资源
- 内核版本要求:某些限制功能需要较新的Linux内核版本
- CGroup版本:Docker 20.10+默认使用cgroup v2,配置方式略有不同
这个脚本提供了从单容器到批量配置的完整解决方案,可以根据实际需求调整参数。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播