Files
java-template/switch-dockerfile.sh
T
2025-11-28 13:49:45 +08:00

205 lines
5.4 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
# 一键切换 Dockerfile:原版 ↔ 优化版
# 用途:快速启用或禁用优化的 Dockerfile
set -e
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
MODE="${1:-status}"
print_info() {
echo -e "${BLUE}ℹ ${NC}$1"
}
print_success() {
echo -e "${GREEN}✅${NC} $1"
}
print_warning() {
echo -e "${YELLOW}⚠️${NC} $1"
}
print_error() {
echo -e "${RED}❌${NC} $1"
}
# Dockerfile 路径
BOOT_DOCKERFILE="ljwx-boot/ljwx-boot-admin/Dockerfile.prod"
BIGSCREEN_DOCKERFILE="ljwx-bigscreen/bigscreen/Dockerfile.prod"
# 检查当前使用的版本
check_status() {
echo -e "${BLUE}=========================================${NC}"
echo -e "${BLUE}📊 Dockerfile 状态检查${NC}"
echo -e "${BLUE}=========================================${NC}"
echo ""
# Boot
if [ -L "$BOOT_DOCKERFILE" ]; then
BOOT_TARGET=$(readlink "$BOOT_DOCKERFILE")
echo -e "Boot: ${GREEN}使用软链接 → $BOOT_TARGET${NC}"
elif grep -q "BuildKit cache mount" "$BOOT_DOCKERFILE" 2>/dev/null; then
echo -e "Boot: ${GREEN}使用优化版${NC}"
else
echo -e "Boot: ${YELLOW}使用原版${NC}"
fi
# Bigscreen
if [ -L "$BIGSCREEN_DOCKERFILE" ]; then
BIGSCREEN_TARGET=$(readlink "$BIGSCREEN_DOCKERFILE")
echo -e "Bigscreen: ${GREEN}使用软链接 → $BIGSCREEN_TARGET${NC}"
elif grep -q "BuildKit cache mount" "$BIGSCREEN_DOCKERFILE" 2>/dev/null; then
echo -e "Bigscreen: ${GREEN}使用优化版${NC}"
else
echo -e "Bigscreen: ${YELLOW}使用原版${NC}"
fi
echo ""
}
# 切换到优化版
switch_to_optimized() {
echo -e "${BLUE}=========================================${NC}"
echo -e "${BLUE}🚀 切换到优化版 Dockerfile${NC}"
echo -e "${BLUE}=========================================${NC}"
echo ""
# Boot
print_info "处理 Boot Dockerfile..."
if [ ! -f "${BOOT_DOCKERFILE}.original" ]; then
cp "$BOOT_DOCKERFILE" "${BOOT_DOCKERFILE}.original"
print_success "已备份原版到 ${BOOT_DOCKERFILE}.original"
fi
if [ -f "${BOOT_DOCKERFILE}.optimized" ]; then
cp "${BOOT_DOCKERFILE}.optimized" "$BOOT_DOCKERFILE"
print_success "已切换到优化版"
else
print_error "未找到 ${BOOT_DOCKERFILE}.optimized"
print_info "请先运行基础镜像构建: cd docker/base-images && ./build-base-images.sh"
exit 1
fi
# Bigscreen
print_info "处理 Bigscreen Dockerfile..."
if [ ! -f "${BIGSCREEN_DOCKERFILE}.original" ]; then
cp "$BIGSCREEN_DOCKERFILE" "${BIGSCREEN_DOCKERFILE}.original"
print_success "已备份原版到 ${BIGSCREEN_DOCKERFILE}.original"
fi
if [ -f "${BIGSCREEN_DOCKERFILE}.optimized" ]; then
cp "${BIGSCREEN_DOCKERFILE}.optimized" "$BIGSCREEN_DOCKERFILE"
print_success "已切换到优化版"
else
print_error "未找到 ${BIGSCREEN_DOCKERFILE}.optimized"
exit 1
fi
echo ""
print_success "所有 Dockerfile 已切换到优化版"
echo ""
print_warning "重要提示:"
echo " 1. 首次使用需要先构建基础镜像:"
echo " cd docker/base-images && ./build-base-images.sh"
echo ""
echo " 2. 确保启用 BuildKit:"
echo " export DOCKER_BUILDKIT=1"
echo ""
echo " 3. 构建时会自动使用缓存,第二次构建会明显加快"
echo ""
}
# 切换回原版
switch_to_original() {
echo -e "${BLUE}=========================================${NC}"
echo -e "${BLUE}🔄 恢复到原版 Dockerfile${NC}"
echo -e "${BLUE}=========================================${NC}"
echo ""
# Boot
if [ -f "${BOOT_DOCKERFILE}.original" ]; then
cp "${BOOT_DOCKERFILE}.original" "$BOOT_DOCKERFILE"
print_success "Boot Dockerfile 已恢复原版"
else
print_warning "未找到 Boot 原版备份"
fi
# Bigscreen
if [ -f "${BIGSCREEN_DOCKERFILE}.original" ]; then
cp "${BIGSCREEN_DOCKERFILE}.original" "$BIGSCREEN_DOCKERFILE"
print_success "Bigscreen Dockerfile 已恢复原版"
else
print_warning "未找到 Bigscreen 原版备份"
fi
echo ""
print_success "已恢复到原版 Dockerfile"
echo ""
}
# 显示帮助
show_help() {
cat <<EOF
Dockerfile 切换工具
用法:
$0 [命令]
命令:
status 查看当前使用的 Dockerfile 版本(默认)
optimized 切换到优化版(使用 BuildKit cache + 基础镜像)
original 恢复到原版
help 显示帮助信息
示例:
# 查看状态
$0 status
# 切换到优化版
$0 optimized
# 恢复原版
$0 original
优化版优势:
✅ 使用预构建基础镜像(Maven/Python)
✅ BuildKit cache mount 缓存依赖
✅ 分层构建,最大化缓存利用
✅ 第二次构建速度提升 5-10 倍
注意事项:
1. 首次使用优化版需要先构建基础镜像
2. 需要启用 DOCKER_BUILDKIT=1
3. 原版会自动备份到 .original 文件
EOF
}
# 主逻辑
case "$MODE" in
status)
check_status
;;
optimized)
switch_to_optimized
check_status
;;
original)
switch_to_original
check_status
;;
help|--help|-h)
show_help
;;
*)
print_error "未知命令: $MODE"
echo ""
show_help
exit 1
;;
esac