ANALYSIS
创建容器化部署管理脚本 docker_manager.sh
PRTCL // BASH
#!/bin/bash
# 配置:Docker 项目参数(可按需修改)PROJECT_NAME="myapp"COMPOSE_FILE="docker-compose.yml"WORKING_DIR="/var/www/$PROJECT_NAME"BACKUP_DIR="/var/backups/$PROJECT_NAME"DATE=$(date +%Y%m%d_%H%M%S)
# 获取脚本参数ACTION="$1"SERVICE_NAME="$2"
# 检查 Docker 和 Docker Compose 是否已安装if ! command -v docker &> /dev/null; then echo "错误:Docker 未安装" exit 1fi
if ! command -v docker-compose &> /dev/null; then echo "错误:Docker Compose 未安装" exit 1fi
# 创建备份目录mkdir -p "$BACKUP_DIR"
# 定义各种操作case "$ACTION" in "deploy") echo "开始部署 $PROJECT_NAME..." cd $WORKING_DIR docker-compose pull docker-compose up -d echo "部署完成!" ;;
"update") echo "开始更新 $PROJECT_NAME..." cd $WORKING_DIR
# 创建当前运行版本的备份 docker-compose config > "$BACKUP_DIR/${PROJECT_NAME}_config_$DATE.yml" docker images --format "table {{.Repository}}:{{.Tag}}\t{{.CreatedAt}}" > "$BACKUP_DIR/${PROJECT_NAME}_images_$DATE.txt"
# 拉取最新镜像并重新部署 docker-compose pull docker-compose up -d --remove-orphans echo "更新完成!" ;;
"rollback") echo "回滚功能需要预先配置备份,此功能需根据具体情况实现" # 这里可以实现基于备份的回滚逻辑 ;;
"logs") if [ -n "$SERVICE_NAME" ]; then docker-compose logs -f $SERVICE_NAME else docker-compose logs fi ;;
"status") docker-compose ps ;;
"stop") cd $WORKING_DIR docker-compose down ;;
"clean") echo "清理未使用的 Docker 资源..." docker system prune -f docker volume prune -f docker network prune -f echo "清理完成!" ;;
*) echo "用法: $0 {deploy|update|rollback|logs|status|stop|clean} [service_name]" echo " deploy - 部署应用" echo " update - 更新应用" echo " rollback - 回滚应用" echo " logs - 查看日志 ( 可选: 指定服务名 )" echo " status - 查看容器状态" echo " stop - 停止应用" echo " clean - 清理未使用的 Docker 资源" exit 1 ;;esac作用:
该脚本在执行时会:
- 提供多种容器化应用管理功能;
- 支持部署、更新、回滚、查看日志、查看状态、停止和清理等多种操作;
- 在更新时创建当前运行版本的备份;
- 检查 Docker 和 Docker Compose 是否已安装。
创建 Docker Compose 配置示例 docker-compose.yml
PRTCL // YAML
version: '3.8'
services: web: image: nginx:alpine ports: - "80:80" - "443:443" volumes: - ./html:/usr/share/nginx/html - ./nginx.conf:/etc/nginx/nginx.conf restart: unless-stopped depends_on: - app
app: build: . ports: - "3000:3000" environment: - NODE_ENV=production - DB_HOST=db restart: unless-stopped depends_on: - db
db: image: mysql:8.0 ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: myapp volumes: - db_data:/var/lib/mysql restart: unless-stopped
volumes: db_data:作用:
- 定义多服务容器化应用的配置;
- 包含 Web 服务器、应用服务和数据库服务;
- 配置端口映射、环境变量和数据卷;
- 设置服务重启策略。
创建健康检查脚本 health_check.sh
PRTCL // BASH
#!/bin/bash
# 配置:健康检查参数(可按需修改)PROJECT_NAME="myapp"WORKING_DIR="/var/www/$PROJECT_NAME"HEALTH_LOG="/var/log/$PROJECT_NAME/health.log"
# 检查容器状态cd $WORKING_DIRCONTAINER_STATUS=$(docker-compose ps --status --quiet)HEALTHY_SERVICES=$(echo "$CONTAINER_STATUS" | wc -l)
# 检查服务可用性WEB_HEALTH=$(curl -s -o /dev/null -w "%{http_code}" http://localhost 2>/dev/null)APP_HEALTH=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/health 2>/dev/null)
# 记录健康检查结果TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')echo "[$TIMESTAMP] Healthy Services: $HEALTHY_SERVICES" >> "$HEALTH_LOG"
if [ "$WEB_HEALTH" = "200" ]; then echo "[$TIMESTAMP] Web 服务正常 - HTTP $WEB_HEALTH" >> "$HEALTH_LOG"else echo "[$TIMESTAMP] Web 服务异常 - HTTP $WEB_HEALTH" >> "$HEALTH_LOG"fi
if [ "$APP_HEALTH" = "200" ]; then echo "[$TIMESTAMP] App 服务正常 - HTTP $APP_HEALTH" >> "$HEALTH_LOG"else echo "[$TIMESTAMP] App 服务异常 - HTTP $APP_HEALTH" >> "$HEALTH_LOG"fi
# 如果服务异常,可选择发送告警(这里省略邮件告警的实现)if [ "$WEB_HEALTH" != "200" ] || [ "$APP_HEALTH" != "200" ]; then echo "[$TIMESTAMP] 发现服务异常,可能需要采取恢复措施" >> "$HEALTH_LOG" # 在这里可以添加自动重启或告警逻辑fi作用:
- 检查容器的运行状态;
- 通过 HTTP 请求验证服务可用性;
- 记录健康检查结果到日志文件;
- 在发现异常时可触发告警或自动恢复机制。
设置定时任务(crontab)
PRTCL // BASH
# 添加到用户 crontab(替换 YOUR_USERNAME 为实际用户名)# 每 5 分钟检查一次容器健康状态*/5 * * * * /home/YOUR_USERNAME/scripts/health_check.sh >> /home/YOUR_USERNAME/logs/health_cron.log 2>&1
# 每天凌晨 3 点清理 Docker 资源0 3 * * * /home/YOUR_USERNAME/scripts/docker_manager.sh clean >> /home/YOUR_USERNAME/logs/clean_cron.log 2>&1作用:
- 定期执行健康检查;
- 定期清理 Docker 资源;
- 将脚本的标准输出和错误追加写入
cron.log,便于排查问题; - 注意:crontab 不识别
~,必须使用绝对路径。
赋予脚本执行权限(执行一次即可)
PRTCL // SH
chmod +x ~/scripts/docker_manager.shchmod +x ~/scripts/health_check.shR P
Rhine Lab Pioneer Division
Auth_Verified: 2026.04.06
Auth_Verified: 2026.04.06
