当前位置: 首页 > news >正文

Docker 40个自动化管理脚本-2 (40/40)

文章目录

      • 21. 智能容器启停控制脚本
      • 22. 条件式容器清理脚本
      • 24. 容器配置自动更新脚本
      • 25. 容器依赖关系启动脚本
      • 26. 智能镜像垃圾回收脚本
      • 27. 磁盘空间预警清理脚本
      • 28. 按策略保留备份脚本
      • 29. 资源使用限制检查脚本
      • 30. 容器资源配额调整脚本
      • 31. 容器综合监控仪表脚本
      • 33. 容器网络连通性测试脚本
      • 34. 容器资源阈值报警脚本
      • 35. 容器安全漏洞扫描脚本
      • 36. 容器数据增量备份脚本
      • 37. 容器数据库自动转储脚本
      • 38. 容器数据一致性检查脚本
      • 39. 跨主机容器数据同步脚本
      • 40. 容器数据加密备份脚本

21. 智能容器启停控制脚本

脚本通过参数化设计实现了对容器状态的精确控制,可以根据传入参数决定是启动、停止还是重启容器集群。相比简单的批量操作,增加了状态检查逻辑,确保操作的安全性和可靠性。

# 参数: start|stop|restart
ACTION=$1case $ACTION instart)echo "启动所有停止的容器..."docker start $(docker ps -aq --filter "status=exited");;stop)echo "停止所有运行中的容器..."docker stop $(docker ps -q);;restart)echo "重启所有容器..."docker restart $(docker ps -q);;*)echo "用法: $0 {start|stop|restart}"exit 1
esac

22. 条件式容器清理脚本

传统的清理脚本往往一刀切地删除所有停止的容器,而这个增强版脚本可以基于时间条件进行清理,保留最近使用过的容器。

# 清理超过7天未使用的停止容器
docker ps -a --filter "status=exited" --format '{{.ID}} {{.CreatedAt}}' | while read -r id date; doif [[ $(date -d "$date" +%s) -lt $(date -d "7 days ago" +%s) ]]; thendocker rm $idecho "已删除容器 $id (创建于 $date)"fi
done
  1. 容器健康状态重启脚本

脚本会定期检查容器的健康状态,当检测到容器异常时自动重启,特别适合用于关键业务容器。

CONTAINER_NAME=$1# 获取容器健康状态
HEALTH=$(docker inspect --format='{{.State.Health.Status}}' $CONTAINER_NAME)if [ "$HEALTH" != "healthy" ]; thenecho "$(date) - 容器 $CONTAINER_NAME 状态异常 ($HEALTH),执行重启..."docker restart $CONTAINER_NAME
fi

24. 容器配置自动更新脚本

当容器配置发生变化时,脚本可以自动检测并重新创建容器,确保配置及时生效。

CONTAINER_NAME="my_app"
CONFIG_FILE="/path/to/app.conf"
CONFIG_HASH=$(md5sum $CONFIG_FILE | awk '{print $1}')# 检查配置是否变化
if [ "$CONFIG_HASH" != "$(docker inspect --format='{{.Config.Labels.config_hash}}' $CONTAINER_NAME)" ]; thenecho "检测到配置变化,重新创建容器..."docker stop $CONTAINER_NAMEdocker rm $CONTAINER_NAMEdocker run -d --name $CONTAINER_NAME --label config_hash=$CONFIG_HASH -v $CONFIG_FILE:/etc/app.conf my_app_image
fi

25. 容器依赖关系启动脚本

对于有启动顺序要求的容器组,脚本确保依赖容器先启动,解决了复杂微服务架构中的启动顺序问题。

# 定义容器启动顺序
CONTAINERS=("db" "redis" "app" "nginx")for container in "${CONTAINERS[@]}"; doecho "启动容器 $container..."docker start $container# 等待容器健康检查通过while [ "$(docker inspect --format='{{.State.Health.Status}}' $container)" != "healthy" ]; dosleep 1done
done

26. 智能镜像垃圾回收脚本

脚本不仅删除悬空镜像,还能根据使用频率和大小智能保留常用镜像。

# 删除超过30天未被使用的悬空镜像
docker images --filter "dangling=true" --format "{{.ID}} {{.CreatedSince}}" | while read -r id time; doif [[ $time == *"months"* ]] || [[ $time == *"weeks"* ]]; thendocker rmi $idecho "已删除悬空镜像 $id (创建于 $time)"fi
done

27. 磁盘空间预警清理脚本

当Docker磁盘使用率达到阈值时,自动触发清理操作,防止磁盘写满导致服务中断。

THRESHOLD=80
USAGE=$(df --output=pcent /var/lib/docker | tr -dc '0-9')if [ "$USAGE" -gt "$THRESHOLD" ]; thenecho "Docker磁盘使用率已达 ${USAGE}%,执行清理..."docker system prune -af --volumes
fi

28. 按策略保留备份脚本

在清理前自动备份重要容器数据,确保不会因清理操作导致数据丢失。

BACKUP_DIR="/docker_backups/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# 备份所有运行中容器的数据卷
docker ps --format '{{.Names}}' | while read -r name; dodocker inspect --format='{{range .Mounts}}{{.Destination}} {{end}}' $name | tr ' ' '\n' | while read -r vol; do[ -n "$vol" ] && docker cp $name:$vol $BACKUP_DIR/${name}_$(echo $vol | tr '/' '_')done
done# 执行清理
docker system prune -af

29. 资源使用限制检查脚本

检查容器资源限制配置,防止单个容器占用过多资源影响系统稳定性。

# 检查没有设置内存限制的容器
docker ps --format '{{.Names}}' | while read -r name; doif [ -z "$(docker inspect --format='{{.HostConfig.Memory}}' $name)" ]; thenecho "警告: 容器 $name 没有设置内存限制!"fi
done

30. 容器资源配额调整脚本

根据当前系统负载动态调整容器资源配额,实现资源的弹性分配。

CONTAINER_NAME=$1
# 获取系统可用内存
AVAIL_MEM=$(free -m | awk '/Mem:/ {print $7}')
# 分配可用内存的50%给容器
MEM_LIMIT=$((AVAIL_MEM / 2))mecho "调整容器 $CONTAINER_NAME 内存限制为 $MEM_LIMIT"
docker update --memory=$MEM_LIMIT --memory-swap=$MEM_LIMIT $CONTAINER_NAME

31. 容器综合监控仪表脚本

脚本提供了一个简洁的监控面板,展示所有容器的关键指标,比单纯的 docker stats 更直观。


echo "容器综合监控仪表板"
echo "===================="docker ps --format "{{.Names}}" | while read -r name; doCPU=$(docker stats --no-stream --format "{{.CPUPerc}}" $name)MEM=$(docker stats --no-stream --format "{{.MemPerc}}" $name)STATUS=$(docker inspect --format "{{.State.Status}}" $name)HEALTH=$(docker inspect --format "{{.State.Health.Status}}" $name 2>/dev/null || echo "N/A")printf "%-20s %-10s %-10s %-10s %-10s\n" "$name" "$STATUS" "$HEALTH" "$CPU" "$MEM"
done32. 异常日志实时报警脚本监控容器日志,当检测到错误关键词时立即触发报警,支持多种报警方式。#!/bin/bash
CONTAINER_NAME=$1
KEYWORDS="error|fail|exception|timeout"docker logs --since 5m --follow $CONTAINER_NAME | while read -r line; doif echo "$line" | grep -qE "$KEYWORDS"; thenecho "$(date) - 检测到异常日志: $line"# 这里可以集成邮件、钉钉、Slack等报警方式fi
done

33. 容器网络连通性测试脚本

定期检查容器间的网络连通性,及时发现网络分区等异常情况。

# 测试所有容器之间的网络连通性
CONTAINERS=$(docker ps --format "{{.Names}}")for src in $CONTAINERS; dofor dst in $CONTAINERS; doif [ "$src" != "$dst" ]; thenif docker exec $src ping -c 1 $dst >/dev/null 2>&1; thenecho "$src -> $dst: 连通"elseecho "$src -> $dst: 不通"fifidone
done

34. 容器资源阈值报警脚本

当容器资源使用超过阈值时发送报警,支持动态调整阈值。

CONTAINER_NAME=$1
CPU_THRESHOLD=80
MEM_THRESHOLD=80while true; doCPU=$(docker stats --no-stream --format "{{.CPUPerc}}" $CONTAINER_NAME | tr -d '%')MEM=$(docker stats --no-stream --format "{{.MemPerc}}" $CONTAINER_NAME | tr -d '%')if (( $(echo "$CPU > $CPU_THRESHOLD" | bc -l) )); thenecho "$(date) - CPU使用率过高: ${CPU}%"fiif (( $(echo "$MEM > $MEM_THRESHOLD" | bc -l) )); thenecho "$(date) - 内存使用率过高: ${MEM}%"fisleep 60
done

35. 容器安全漏洞扫描脚本

定期检查运行容器使用的镜像是否存在已知漏洞,提升环境安全性。

# 检查所有运行中容器使用的镜像
docker ps --format "{{.Image}} {{.Names}}" | while read -r image name; doecho "扫描容器 $name (使用镜像 $image)..."docker scan --file Dockerfile $image# 检查镜像更新时间CREATED=$(docker inspect --format '{{.Created}}' $image)if [[ $(date -d "$CREATED" +%s) -lt $(date -d "6 months ago" +%s) ]]; thenecho "警告: 容器 $name 使用的镜像超过6个月未更新!"fi
done

36. 容器数据增量备份脚本

相比简单的全量备份,这个脚本实现了增量备份策略,节省存储空间。

CONTAINER_NAME=$1
BACKUP_DIR="/backups/$CONTAINER_NAME"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)# 创建备份目录
mkdir -p $BACKUP_DIR# 使用rsync实现增量备份
docker exec $CONTAINER_NAME sh -c "tar cf - /data" | \rsync --archive --backup --backup-dir=$BACKUP_DIR/$TIMESTAMP - /backups/latest/# 保留最近7天的备份
find $BACKUP_DIR -type d -mtime +7 | xargs rm -rf

37. 容器数据库自动转储脚本

针对数据库容器的备份方案,支持MySQL、PostgreSQL等常见数据库。

DB_CONTAINER=$1
DB_TYPE=$2 # mysql or postgres
BACKUP_FILE="/backups/${DB_CONTAINER}_$(date +%Y%m%d).sql"case $DB_TYPE inmysql)docker exec $DB_CONTAINER sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > $BACKUP_FILE;;postgres)docker exec $DB_CONTAINER sh -c 'pg_dumpall -U postgres' > $BACKUP_FILE;;*)echo "不支持的数据库类型"exit 1
esacecho "数据库备份完成: $BACKUP_FILE"

38. 容器数据一致性检查脚本

验证备份数据的完整性和一致性,确保备份可恢复。

BACKUP_FILE=$1# 模拟恢复备份并检查关键文件
TEMP_CONTAINER=$(docker run -d --rm busybox tail -f /dev/null)
docker cp $BACKUP_FILE $TEMP_CONTAINER:/backup.tar
docker exec $TEMP_CONTAINER tar xf /backup.tar# 检查关键文件是否存在
CHECK_FILES=("etc/passwd" "etc/group" "data/app.conf")
for file in "${CHECK_FILES[@]}"; doif docker exec $TEMP_CONTAINER [ -f "/$file" ]; thenecho "检查通过: /$file 存在"elseecho "警告: /$file 不存在!"fi
donedocker stop $TEMP_CONTAINER

39. 跨主机容器数据同步脚本

实现容器数据在多主机间的同步,支持灾备和多活部署。

SOURCE_CONTAINER=$1
DEST_HOST=$2
DEST_CONTAINER=$3# 创建数据快照并同步到远程主机
docker exec $SOURCE_CONTAINER tar cf - /data | ssh $DEST_HOST "docker exec -i $DEST_CONTAINER tar xf - -C /"echo "数据同步完成: $SOURCE_CONTAINER -> $DEST_HOST:$DEST_CONTAINER"

40. 容器数据加密备份脚本

在备份时自动加密敏感数据,确保数据安全。

CONTAINER_NAME=$1
BACKUP_FILE="/backups/${CONTAINER_NAME}_$(date +%Y%m%d).tar.gpg"
ENCRYPT_KEY="your_encryption_key"# 备份并加密数据
docker exec $CONTAINER_NAME tar cf - /data | \gpg --batch --yes --passphrase "$ENCRYPT_KEY" --symmetric --cipher-algo AES256 -o $BACKUP_FILEecho "加密备份完成: $BACKUP_FILE"

在这里插入图片描述


“人的一生会经历很多痛苦,但回头想想,都是传奇”。


http://www.dtcms.com/a/355477.html

相关文章:

  • 【动态规划】子数组、子串问题
  • 国产芯力量!贴片式SD卡搭载北京君正Rk瑞芯微,打造嵌入式存储低延迟+高可靠黄金组合​
  • MongoDB 文档模型设计:JSON 结构的灵活性与陷阱
  • Mac训练大模型:MLX-LM框架LoRA训练Qwen3并集成SwanLab进行可视化
  • 基于mac的智能语音处理与应用开发-环境部署
  • 【LangGraph】核心概念速通:State/Node/Edge、通道、事件与流式输出
  • Java8-21的核心特性以及用法
  • FPGA位宽调整模块
  • 跨语言 UDP 聊天程序实现:Go 客户端与 Python 服务端[超简单 入门级聊天程序 包含完整源码]
  • 线段树 (Segment Tree)
  • 理解AI智能体:智能体记忆
  • day04-kubernetes(k8s)
  • 微动开关-电竞鼠标核心!5000万次寿命微动开关评测
  • windows PowerToys之无界鼠标:一套键鼠控制多台设备
  • 【详细教程】如何将SQLBot的MCP服务集成到n8n
  • Linux_详解线程池
  • 【mysql】SQL HAVING子句详解:分组过滤的正确姿势
  • SystemVerilog学习【六】功能覆盖率详解
  • OpenCV 4.9+ 进阶技巧与优化
  • Shell编程(一)
  • 流线型(2型)通风排烟天窗/TPC-A2
  • LoRA modules_to_save解析及卸载适配器(62)
  • C语言学习-24-柔性数组
  • 科技守护古树魂:古树制茶行业的数字化转型之路
  • TikTok 在电脑也能养号?网页端多号养号教程
  • 损失函数,及其优化方法
  • [Ai Agent] 从零开始搭建第一个智能体
  • 麒麟操作系统挂载NAS服务器
  • 搜维尔科技核心产品矩阵涵盖从硬件感知到软件渲染的全产品供应链
  • 12KM无人机高清图传通信模组——打造未来空中通信新高度