本文目录导读:

为Shell脚本配置容器优化策略,可以从镜像构建、运行时配置和资源限制三个层面入手,以下是具体的Shell脚本实现方案:
镜像构建优化脚本
#!/bin/bash # container_optimize_build.sh - 容器镜像构建优化 # 多阶段构建示例 cat > Dockerfile << 'EOF' # 第一阶段:构建阶段 FROM golang:1.21-alpine AS builder WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o myapp . # 第二阶段:运行阶段 FROM alpine:3.19 RUN apk --no-cache add ca-certificates tzdata WORKDIR /app COPY --from=builder /app/myapp . COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /etc/localtime EXPOSE 8080 USER 1000:1000 CMD ["./myapp"] EOF # 优化构建参数 docker build \ --build-arg BUILDKIT_INLINE_CACHE=1 \ --cache-from myapp:cache \ --tag myapp:latest \ --compress \ --squash \ .
容器资源限制配置
#!/bin/bash
# container_resource_limit.sh - 资源限制管理
container_name="myapp_container"
# CPU限制(使用CFS调度器)
CPU_LIMIT="2" # 核心数
CPU_SHARES="512" # CPU权重(默认1024)
CPU_QUOTA="100000" # 每100ms周期内最多使用100ms
# 内存限制
MEMORY_LIMIT="2g"
MEMORY_SWAP="4g" # 包含swap的总内存限制
MEMORY_RESERVATION="1g" # 预留内存
# 运行容器并设置资源限制
docker run -d \
--name "$container_name" \
--cpus="$CPU_LIMIT" \
--cpu-shares="$CPU_SHARES" \
--cpu-quota="$CPU_QUOTA" \
--memory="$MEMORY_LIMIT" \
--memory-swap="$MEMORY_SWAP" \
--memory-reservation="$MEMORY_RESERVATION" \
--oom-kill-disable=false \
--pids-limit=100 \
myapp:latest
# 验证资源限制
echo "Container resource limits:"
docker inspect "$container_name" --format='{{.HostConfig.CpuShares}} {{.HostConfig.Memory}}'
存储与IO优化
#!/bin/bash
# container_storage_optimize.sh - 存储优化
# 使用overlay2存储驱动,配置存储驱动参数
DOCKER_STORAGE_OPTS="--storage-driver=overlay2 \
--storage-opt overlay2.size=10G \
--storage-opt overlay2.override_kernel_check=1"
# 配置挂载点优化
MOUNTS=(
"-v /data/logs:/app/logs:ro" # 只读日志目录
"-v /data/data:/app/data:rw,z" # 共享数据卷
"--mount type=tmpfs,destination=/tmp,tmpfs-size=1G" # 临时内存文件系统
)
# 限制blkio
BLOCK_IO_OPTS="--blkio-weight=500 \
--device-read-bps=/dev/sda:100mb \
--device-write-bps=/dev/sda:50mb"
# 运行优化后的容器
docker run -d \
--name optimized_container \
${MOUNTS[@]} \
$BLOCK_IO_OPTS \
--read-only \
--tmpfs /run \
--tmpfs /tmp \
myapp:latest
网络与安全优化
#!/bin/bash # container_network_security.sh - 网络与安全策略 # 网络优化参数 NETWORK_OPTS="\ --network=host \ --dns 8.8.8.8 \ --dns 114.114.114.114 \ --sysctl net.core.somaxconn=65535 \ --sysctl net.ipv4.tcp_tw_reuse=1 \ --sysctl net.ipv4.ip_local_port_range=1024 65535" # 安全策略 SECURITY_OPTS="\ --security-opt no-new-privileges:true \ --security-opt apparmor=default \ --cap-drop=ALL \ --cap-add=NET_BIND_SERVICE \ --read-only-rootfs" # 运行安全加固的容器 docker run -d \ --name secure_container \ $NETWORK_OPTS \ $SECURITY_OPTS \ --user 1000:1000 \ --group-add 1001 \ myapp:latest
完整的优化启动脚本
#!/bin/bash
# container_optimized_runner.sh - 综合优化启动
set -euo pipefail
# 配置参数
IMAGE_NAME="myapp:latest"
CONTAINER_NAME="myapp_optimized"
NETWORK_NAME="myapp_network"
VOLUME_NAME="myapp_data"
# 健康检查函数
healthcheck() {
docker run --rm --network container:$CONTAINER_NAME \
curlimages/curl:latest \
--connect-timeout 5 \
--max-time 10 \
http://localhost:8080/health
}
# 创建网络(如果不存在)
docker network inspect "$NETWORK_NAME" >/dev/null 2>&1 || \
docker network create "$NETWORK_NAME"
# 创建数据卷
docker volume inspect "$VOLUME_NAME" >/dev/null 2>&1 || \
docker volume create "$VOLUME_NAME"
# 停止并删除旧容器
docker stop "$CONTAINER_NAME" 2>/dev/null || true
docker rm "$CONTAINER_NAME" 2>/dev/null || true
# 启动优化后的容器
docker run -d \
--name "$CONTAINER_NAME" \
--network "$NETWORK_NAME" \
--restart unless-stopped \
--cpus="2.5" \
--memory="4g" \
--memory-reservation="2g" \
--memory-swap="6g" \
--oom-kill-disable=false \
--pids-limit="200" \
--ulimit nofile=65535:65535 \
--ulimit nproc=4096:4096 \
--read-only \
--tmpfs /tmp:size=500M \
--tmpfs /run:size=100M \
-v "$VOLUME_NAME:/app/data" \
-v /etc/localtime:/etc/localtime:ro \
-p 8080:8080 \
-e "JAVA_OPTS=-Xms1g -Xmx2g -XX:+UseG1GC" \
-e "NODE_OPTIONS=--max-old-space-size=2048" \
--label "traefik.enable=true" \
--label "traefik.http.routers.myapp.rule=Host(\`example.com\`)" \
"$IMAGE_NAME"
# 等待容器就绪
echo "Waiting for container to be healthy..."
for i in {1..30}; do
if healthcheck; then
echo "Container is healthy!"
break
fi
sleep 2
done
# 输出容器状态
echo "Container status:"
docker ps --filter "name=$CONTAINER_NAME" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo "Resource usage:"
docker stats --no-stream "$CONTAINER_NAME"
性能监控与动态调整
#!/bin/bash
# container_perf_adjust.sh - 动态性能调整
CONTAINER_NAME="myapp_optimized"
# 监控函数
monitor_resources() {
local cpu_usage
local mem_usage
cpu_usage=$(docker stats --no-stream --format "{{.CPUPerc}}" "$CONTAINER_NAME" | sed 's/%//')
mem_usage=$(docker stats --no-stream --format "{{.MemPerc}}" "$CONTAINER_NAME" | sed 's/%//')
echo "CPU: ${cpu_usage}% | Memory: ${mem_usage}%"
# 自动调整策略
if (( $(echo "$cpu_usage > 80" | bc -l) )); then
echo "High CPU detected, adjusting limits..."
docker update --cpus="4" "$CONTAINER_NAME"
elif (( $(echo "$cpu_usage < 20" | bc -l) )); then
echo "Low CPU usage, reducing limits..."
docker update --cpus="1" "$CONTAINER_NAME"
fi
}
# 定期执行监控
while true; do
monitor_resources
sleep 60
done
配置文件化策略
#!/bin/bash
# container_policy_config.sh - 策略配置管理
# 创建策略配置文件
cat > /etc/container-policies.d/myapp.conf << 'POLICY'
# 应用优化策略
APP_NAME="myapp"
ENVIRONMENT="production"
# 资源限制
CPU_LIMIT="2.5"
MEMORY_LIMIT="4g"
MEMORY_RESERVATION="2g"
# 存储优化
LOG_ROTATION="daily"
LOG_RETENTION_DAYS="7"
DATA_VOLUME_DRIVER="local"
DATA_VOLUME_OPTS="type=ext4,device=/dev/sdb1"
# 网络优化
MTU_SIZE="9000"
TCP_CONGESTION="bbr"
NETWORK_PRIORITY="high"
# 安全策略
APPARMOR_PROFILE="docker-default"
SECCOMP_PROFILE="default.json"
SELINUX_TYPE="container_t"
# 日志策略
LOG_MAX_SIZE="100m"
LOG_MAX_FILES="3"
LOGGING_DRIVER="json-file"
# 更新策略
UPDATE_STRATEGY="rolling"
UPDATE_PARALLELISM="2"
MAX_UNAVAILABLE="1"
POLICY
# 应用配置
source /etc/container-policies.d/myapp.conf
# 加载配置并启动容器
docker run -d \
--name "$APP_NAME" \
--cpus="$CPU_LIMIT" \
--memory="$MEMORY_LIMIT" \
--memory-reservation="$MEMORY_RESERVATION" \
--log-driver "$LOGGING_DRIVER" \
--log-opt max-size="$LOG_MAX_SIZE" \
--log-opt max-file="$LOG_MAX_FILES" \
--mount "type=volume,source=${APP_NAME}_data,target=/app/data" \
--security-opt "apparmor=$APPARMOR_PROFILE" \
myapp:latest
总结的关键优化点
- 资源限制:合理设置CPU、内存、PID限制
- 存储优化:使用Overlay2驱动,配置挂载点
- 网络调优:调整内核参数,使用Host模式
- 安全加固:最小权限原则,AppArmor/SELinux
- 日志管理:限制日志大小,使用logrotate
- 健康检查:配置liveness/readiness探针
- 动态调整:基于监控指标自动调整限制
- 多阶段构建:减小镜像体积
- 只读根文件系统:提高安全性
- 限制容器能力:使用cap-drop/cap-add
这些脚本可以集成到CI/CD流水线中,实现容器优化的自动化管理。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播