200 lines
5.0 KiB
Bash
Executable File
200 lines
5.0 KiB
Bash
Executable File
#!/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 "$@"
|