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
# =============================================================================
ARG NODE_IMAGE=node:24-alpine
ARG GOLANG_IMAGE=golang:1.25-alpine
ARG ALPINE_IMAGE=alpine:3.19
# -----------------------------------------------------------------------------
# Stage 1: Frontend Builder
# -----------------------------------------------------------------------------
FROM node:24-alpine AS frontend-builder
FROM ${NODE_IMAGE} AS frontend-builder
WORKDIR /app/frontend
@@ -24,7 +28,7 @@ RUN npm run build
# -----------------------------------------------------------------------------
# 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)
ARG VERSION=docker
@@ -56,7 +60,7 @@ RUN CGO_ENABLED=0 GOOS=linux go build \
# -----------------------------------------------------------------------------
# Stage 3: Final Runtime Image
# -----------------------------------------------------------------------------
FROM alpine:3.19
FROM ${ALPINE_IMAGE}
# Labels
LABEL maintainer="Wei-Shaw <github.com/Wei-Shaw>"

View File

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