fix(构建): 支持配置基础镜像仓库

允许通过构建参数/脚本选项切换基础镜像来源,避免镜像源 403 影响构建
This commit is contained in:
yangjianbo
2025-12-29 12:00:33 +08:00
parent bbd6236385
commit 89b1b744f2
2 changed files with 35 additions and 8 deletions

View File

@@ -6,10 +6,14 @@
# Stage 3: Final minimal image # Stage 3: Final minimal image
# ============================================================================= # =============================================================================
ARG NODE_IMAGE=node:24-alpine
ARG GOLANG_IMAGE=golang:1.25-alpine
ARG ALPINE_IMAGE=alpine:3.19
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Stage 1: Frontend Builder # Stage 1: Frontend Builder
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
FROM node:24-alpine AS frontend-builder FROM ${NODE_IMAGE} AS frontend-builder
WORKDIR /app/frontend WORKDIR /app/frontend
@@ -24,7 +28,7 @@ RUN npm run build
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Stage 2: Backend Builder # Stage 2: Backend Builder
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
FROM golang:1.25-alpine AS backend-builder FROM ${GOLANG_IMAGE} AS backend-builder
# Build arguments for version info (set by CI) # Build arguments for version info (set by CI)
ARG VERSION=docker ARG VERSION=docker
@@ -56,7 +60,7 @@ RUN CGO_ENABLED=0 GOOS=linux go build \
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Stage 3: Final Runtime Image # Stage 3: Final Runtime Image
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
FROM alpine:3.19 FROM ${ALPINE_IMAGE}
# Labels # Labels
LABEL maintainer="Wei-Shaw <github.com/Wei-Shaw>" LABEL maintainer="Wei-Shaw <github.com/Wei-Shaw>"

View File

@@ -7,11 +7,12 @@
# ./build_docker.sh [选项] # ./build_docker.sh [选项]
# #
# 选项: # 选项:
# -t, --tag TAG 指定镜像标签 (默认: latest) # -t, --tag TAG 指定镜像标签 (默认: latest)
# -r, --registry REG 指定镜像仓库地址 (默认: 无) # -r, --registry REG 指定镜像仓库地址 (默认: 无)
# -p, --push 构建后推送镜像仓库 # -b, --base-registry REG 指定基础镜像仓库地址 (默认: 使用 docker.io)
# --no-cache 不使用 Docker 构建缓存 # -p, --push 构建后推送镜像到仓库
# -h, --help 显示帮助信息 # --no-cache 不使用 Docker 构建缓存
# -h, --help 显示帮助信息
# #
# 示例: # 示例:
# ./build_docker.sh # 构建 sub2api:latest # ./build_docker.sh # 构建 sub2api:latest
@@ -38,6 +39,7 @@ NC='\033[0m' # No Color
IMAGE_NAME="sub2api" IMAGE_NAME="sub2api"
TAG="latest" TAG="latest"
REGISTRY="" REGISTRY=""
BASE_IMAGE_REGISTRY="${BASE_IMAGE_REGISTRY:-}"
PUSH=false PUSH=false
NO_CACHE="" NO_CACHE=""
@@ -82,6 +84,10 @@ while [[ $# -gt 0 ]]; do
REGISTRY="$2" REGISTRY="$2"
shift 2 shift 2
;; ;;
-b|--base-registry)
BASE_IMAGE_REGISTRY="$2"
shift 2
;;
-p|--push) -p|--push)
PUSH=true PUSH=true
shift shift
@@ -151,6 +157,17 @@ VERSION=$(get_version)
COMMIT=$(get_commit) COMMIT=$(get_commit)
DATE=$(get_date) DATE=$(get_date)
# 解析基础镜像
NODE_IMAGE="node:24-alpine"
GOLANG_IMAGE="golang:1.25-alpine"
ALPINE_IMAGE="alpine:3.19"
if [[ -n "$BASE_IMAGE_REGISTRY" ]]; then
BASE_IMAGE_REGISTRY="${BASE_IMAGE_REGISTRY%/}"
NODE_IMAGE="${BASE_IMAGE_REGISTRY}/library/node:24-alpine"
GOLANG_IMAGE="${BASE_IMAGE_REGISTRY}/library/golang:1.25-alpine"
ALPINE_IMAGE="${BASE_IMAGE_REGISTRY}/library/alpine:3.19"
fi
# 构建完整镜像名称 # 构建完整镜像名称
if [[ -n "$REGISTRY" ]]; then if [[ -n "$REGISTRY" ]]; then
FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${TAG}" FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${TAG}"
@@ -167,6 +184,9 @@ info "镜像名称: ${FULL_IMAGE_NAME}"
info "版本: ${VERSION}" info "版本: ${VERSION}"
info "Commit: ${COMMIT}" info "Commit: ${COMMIT}"
info "构建时间: ${DATE}" info "构建时间: ${DATE}"
if [[ -n "$BASE_IMAGE_REGISTRY" ]]; then
info "基础镜像仓库: ${BASE_IMAGE_REGISTRY}"
fi
if [[ -n "$NO_CACHE" ]]; then if [[ -n "$NO_CACHE" ]]; then
info "缓存: 禁用" info "缓存: 禁用"
fi fi
@@ -181,6 +201,9 @@ docker build \
--build-arg VERSION="${VERSION}" \ --build-arg VERSION="${VERSION}" \
--build-arg COMMIT="${COMMIT}" \ --build-arg COMMIT="${COMMIT}" \
--build-arg DATE="${DATE}" \ --build-arg DATE="${DATE}" \
--build-arg NODE_IMAGE="${NODE_IMAGE}" \
--build-arg GOLANG_IMAGE="${GOLANG_IMAGE}" \
--build-arg ALPINE_IMAGE="${ALPINE_IMAGE}" \
-t "${FULL_IMAGE_NAME}" \ -t "${FULL_IMAGE_NAME}" \
-f Dockerfile \ -f Dockerfile \
. .