205 lines
5.4 KiB
Bash
Executable File
205 lines
5.4 KiB
Bash
Executable File
#!/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
|