复制成功
请遵守本站许可
REPORT
Chapter_Post // Field_Report

Post_Ref: RL-容器化部署管理脚

2026.04.06

容器化部署管理脚本

Echo HaoRan
Echo HaoRan
#ScriptFile
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 1
fi
if ! command -v docker-compose &> /dev/null; then
echo "错误:Docker Compose 未安装"
exit 1
fi
# 创建备份目录
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_DIR
CONTAINER_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
Terminal window
# 添加到用户 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
Terminal window
chmod +x ~/scripts/docker_manager.sh
chmod +x ~/scripts/health_check.sh

R P
Rhine Lab Pioneer Division
Auth_Verified: 2026.04.06
// END OF POST

订阅

通过 RSS 订阅本站,新文章发布时第一时间收到通知。

Follow
Classified
Chapter_06
Protocol_Ref: CC-BY-NC-SA-4.0

容器化部署管理脚本

Author: CHONGXIReleased: 2026.04.06

Licensed under CC BY-NC-SA 4.0

评论

© 2025-2026 EchoSpace
Powered by Astro & echohaoran Non-Collaborative_Entity // Protocol_V.4.21