- scripts/docker-build.sh: Docker镜像构建脚本 - 支持单模块构建、全部构建、docker-compose构建 - 支持镜像源配置、镜像推送、清理功能 - doc/Docker部署指南.md: 完整部署文档 - 环境要求、镜像源配置 - 镜像构建方法、服务端口规划 - 启动停止命令、故障排查
240 lines
5.3 KiB
Bash
Executable File
240 lines
5.3 KiB
Bash
Executable File
#!/bin/bash
|
||
# ============================================================
|
||
# 资金服务平台 - Docker 镜像构建脚本
|
||
# ============================================================
|
||
|
||
set -e
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 项目根目录
|
||
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
cd "$PROJECT_DIR"
|
||
|
||
# 版本号
|
||
VERSION="${VERSION:-0.0.1-SNAPSHOT}"
|
||
|
||
# 日志函数
|
||
log_info() {
|
||
echo -e "${GREEN}[INFO]${NC} $1"
|
||
}
|
||
|
||
log_warn() {
|
||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||
}
|
||
|
||
log_error() {
|
||
echo -e "${RED}[ERROR]${NC} $1"
|
||
}
|
||
|
||
# 检查 Docker 是否安装
|
||
check_docker() {
|
||
if ! command -v docker &> /dev/null; then
|
||
log_error "Docker 未安装,请先安装 Docker"
|
||
exit 1
|
||
fi
|
||
log_info "Docker 版本: $(docker --version)"
|
||
}
|
||
|
||
# 配置 Docker 镜像源(需要 sudo)
|
||
configure_mirror() {
|
||
log_info "配置 Docker 镜像源..."
|
||
|
||
if [ -f /etc/docker/daemon.json ]; then
|
||
log_warn "/etc/docker/daemon.json 已存在,跳过配置"
|
||
return
|
||
fi
|
||
|
||
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
|
||
{
|
||
"registry-mirrors": [
|
||
"https://docker.m.daocloud.io",
|
||
"https://dockerhub.icu",
|
||
"https://hub.rat.dev"
|
||
]
|
||
}
|
||
EOF
|
||
|
||
log_info "重启 Docker 服务..."
|
||
sudo systemctl restart docker
|
||
log_info "镜像源配置完成"
|
||
}
|
||
|
||
# 构建单个模块
|
||
build_module() {
|
||
local module=$1
|
||
local tag="${2:-latest}"
|
||
|
||
log_info "构建模块: $module"
|
||
|
||
docker build \
|
||
--build-arg MODULE="$module" \
|
||
--build-arg VERSION="$VERSION" \
|
||
-t "$module:$VERSION" \
|
||
-t "$module:$tag" \
|
||
-f Dockerfile \
|
||
.
|
||
|
||
if [ $? -eq 0 ]; then
|
||
log_info "✓ $module 构建成功: $module:$tag"
|
||
else
|
||
log_error "✗ $module 构建失败"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 构建所有模块
|
||
build_all() {
|
||
local modules=(
|
||
"fund-gateway"
|
||
"fund-sys"
|
||
"fund-cust"
|
||
"fund-proj"
|
||
"fund-req"
|
||
"fund-exp"
|
||
"fund-receipt"
|
||
"fund-report"
|
||
"fund-file"
|
||
)
|
||
|
||
log_info "开始构建所有模块..."
|
||
|
||
local success=0
|
||
local failed=0
|
||
|
||
for module in "${modules[@]}"; do
|
||
if build_module "$module"; then
|
||
((success++))
|
||
else
|
||
((failed++))
|
||
fi
|
||
done
|
||
|
||
echo ""
|
||
log_info "构建完成: 成功 $success, 失败 $failed"
|
||
|
||
if [ $failed -gt 0 ]; then
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 使用 docker-compose 构建
|
||
build_with_compose() {
|
||
log_info "使用 docker-compose 构建所有服务..."
|
||
docker-compose build --no-cache
|
||
log_info "docker-compose 构建完成"
|
||
}
|
||
|
||
# 推送镜像到仓库
|
||
push_images() {
|
||
local registry="${1:-}"
|
||
|
||
if [ -z "$registry" ]; then
|
||
log_error "请指定镜像仓库地址,例如: push_images registry.example.com"
|
||
return 1
|
||
fi
|
||
|
||
local modules=(
|
||
"fund-gateway"
|
||
"fund-sys"
|
||
"fund-cust"
|
||
"fund-proj"
|
||
"fund-req"
|
||
"fund-exp"
|
||
"fund-receipt"
|
||
"fund-report"
|
||
"fund-file"
|
||
)
|
||
|
||
for module in "${modules[@]}"; do
|
||
log_info "推送 $module..."
|
||
docker tag "$module:$VERSION" "$registry/$module:$VERSION"
|
||
docker push "$registry/$module:$VERSION"
|
||
done
|
||
|
||
log_info "所有镜像推送完成"
|
||
}
|
||
|
||
# 清理镜像
|
||
clean_images() {
|
||
log_info "清理未使用的镜像..."
|
||
docker image prune -f
|
||
log_info "清理完成"
|
||
}
|
||
|
||
# 显示帮助
|
||
show_help() {
|
||
echo "资金服务平台 - Docker 镜像构建脚本"
|
||
echo ""
|
||
echo "用法: $0 [命令] [参数]"
|
||
echo ""
|
||
echo "命令:"
|
||
echo " check 检查 Docker 环境"
|
||
echo " mirror 配置 Docker 镜像源(需要 sudo)"
|
||
echo " build <模块> 构建指定模块"
|
||
echo " build-all 构建所有模块"
|
||
echo " compose 使用 docker-compose 构建"
|
||
echo " push <仓库> 推送镜像到仓库"
|
||
echo " clean 清理未使用的镜像"
|
||
echo " help 显示帮助信息"
|
||
echo ""
|
||
echo "示例:"
|
||
echo " $0 build fund-sys # 构建 fund-sys 模块"
|
||
echo " $0 build-all # 构建所有模块"
|
||
echo " $0 compose # 使用 docker-compose 构建"
|
||
echo " $0 push registry.example.com # 推送到私有仓库"
|
||
echo ""
|
||
echo "环境变量:"
|
||
echo " VERSION 镜像版本号,默认: 0.0.1-SNAPSHOT"
|
||
}
|
||
|
||
# 主函数
|
||
main() {
|
||
local command="${1:-help}"
|
||
|
||
case "$command" in
|
||
check)
|
||
check_docker
|
||
;;
|
||
mirror)
|
||
configure_mirror
|
||
;;
|
||
build)
|
||
check_docker
|
||
if [ -z "$2" ]; then
|
||
log_error "请指定要构建的模块"
|
||
exit 1
|
||
fi
|
||
build_module "$2" "${3:-latest}"
|
||
;;
|
||
build-all)
|
||
check_docker
|
||
build_all
|
||
;;
|
||
compose)
|
||
check_docker
|
||
build_with_compose
|
||
;;
|
||
push)
|
||
push_images "$2"
|
||
;;
|
||
clean)
|
||
clean_images
|
||
;;
|
||
help|--help|-h)
|
||
show_help
|
||
;;
|
||
*)
|
||
log_error "未知命令: $command"
|
||
show_help
|
||
exit 1
|
||
;;
|
||
esac
|
||
}
|
||
|
||
main "$@"
|