compliance/docker-build.sh
gongwenxin fa343eb111 .
2025-08-07 15:07:38 +08:00

200 lines
5.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# DMS合规性测试工具 Docker构建脚本
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 配置
IMAGE_NAME="dms-compliance-tool"
IMAGE_TAG="latest"
CONTAINER_NAME="dms-compliance-tool"
echo -e "${BLUE}=== DMS合规性测试工具 Docker构建脚本 ===${NC}"
# 函数:打印带颜色的消息
print_message() {
echo -e "${GREEN}[INFO]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查Docker是否安装
check_docker() {
if ! command -v docker &> /dev/null; then
print_error "Docker未安装请先安装Docker"
exit 1
fi
print_message "Docker已安装: $(docker --version)"
}
# 检查Docker Compose是否安装
check_docker_compose() {
if ! command -v docker-compose &> /dev/null; then
print_warning "Docker Compose未安装将使用docker compose命令"
COMPOSE_CMD="docker compose"
else
COMPOSE_CMD="docker-compose"
print_message "Docker Compose已安装: $(docker-compose --version)"
fi
}
# 停止并删除现有容器
cleanup_existing() {
print_message "清理现有容器..."
if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then
print_message "停止现有容器..."
docker stop $CONTAINER_NAME
fi
if docker ps -aq -f name=$CONTAINER_NAME | grep -q .; then
print_message "删除现有容器..."
docker rm $CONTAINER_NAME
fi
# 删除旧镜像(可选)
if [[ "$1" == "--clean" ]]; then
if docker images -q $IMAGE_NAME:$IMAGE_TAG | grep -q .; then
print_message "删除旧镜像..."
docker rmi $IMAGE_NAME:$IMAGE_TAG
fi
fi
}
# 构建Docker镜像
build_image() {
print_message "构建Docker镜像..."
docker build -f docker/Dockerfile.service -t $IMAGE_NAME:$IMAGE_TAG .
if [ $? -eq 0 ]; then
print_message "镜像构建成功: $IMAGE_NAME:$IMAGE_TAG"
else
print_error "镜像构建失败"
exit 1
fi
}
# 创建必要的目录
create_directories() {
print_message "创建必要的目录..."
mkdir -p test_reports uploads logs config
}
# 运行容器
run_container() {
print_message "启动容器..."
docker run -d \
--name $CONTAINER_NAME \
-p 5050:5050 \
-p 5051:5051 \
-v $(pwd)/test_reports:/app/test_reports \
-v $(pwd)/uploads:/app/uploads \
-v $(pwd)/logs:/app/logs \
-e TZ=Asia/Shanghai \
--restart unless-stopped \
$IMAGE_NAME:$IMAGE_TAG
if [ $? -eq 0 ]; then
print_message "容器启动成功"
print_message "API服务地址: http://localhost:5050"
print_message "历史查看器地址: http://localhost:5051"
else
print_error "容器启动失败"
exit 1
fi
}
# 使用Docker Compose运行
run_with_compose() {
print_message "使用Docker Compose启动服务..."
$COMPOSE_CMD up -d
if [ $? -eq 0 ]; then
print_message "服务启动成功"
print_message "API服务地址: http://localhost:5050"
print_message "历史查看器地址: http://localhost:5051"
else
print_error "服务启动失败"
exit 1
fi
}
# 显示帮助信息
show_help() {
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " --clean 清理旧镜像后重新构建"
echo " --compose 使用Docker Compose启动"
echo " --build-only 仅构建镜像,不启动容器"
echo " --help 显示此帮助信息"
echo ""
echo "示例:"
echo " $0 # 构建并启动容器"
echo " $0 --clean # 清理后重新构建并启动"
echo " $0 --compose # 使用Docker Compose启动"
echo " $0 --build-only # 仅构建镜像"
}
# 主函数
main() {
case "$1" in
--help)
show_help
exit 0
;;
--clean)
check_docker
cleanup_existing --clean
create_directories
build_image
run_container
;;
--compose)
check_docker
check_docker_compose
create_directories
$COMPOSE_CMD down
$COMPOSE_CMD build
run_with_compose
;;
--build-only)
check_docker
cleanup_existing
build_image
print_message "镜像构建完成,使用以下命令启动容器:"
print_message "docker run -d --name $CONTAINER_NAME -p 5050:5050 $IMAGE_NAME:$IMAGE_TAG"
;;
"")
check_docker
cleanup_existing
create_directories
build_image
run_container
;;
*)
print_error "未知选项: $1"
show_help
exit 1
;;
esac
print_message "完成!"
}
# 执行主函数
main "$@"