# syntax=docker/dockerfile:1.7 # # cdrop-base — 重型依赖的预热镜像。 # 只有 go.mod/go.sum 或 web/package*.json 变动时才需要重建;改源码后构建 # cdrop:latest 就只需要复制源 + 编译,省掉 npm ci 与 go mod download 的耗时。 # # 同时安装 Go 工具链与 Node 运行时,让最终的应用 Dockerfile 不再需要 multi-stage # 切换基础镜像。 # # 构建(一次或随依赖更新;走宿主原生 arch 即可): # docker buildx build -f docker/Dockerfile.base -t cdrop-base:latest --load . FROM --platform=$BUILDPLATFORM golang:1.26-alpine AS base # Node.js + npm,覆盖 web 端依赖;ca-certificates 给 go mod download 用 HTTPS RUN apk add --no-cache nodejs npm ca-certificates git WORKDIR /src # Go modules 缓存层。GOPROXY 可经 --build-arg 覆盖——受限网络(如构建 VM 连不上 # proxy.golang.org)时传入区域镜像即可,默认仍是官方代理,不在仓库内固化任何区域值。 ARG GOPROXY=https://proxy.golang.org,direct ENV GOPROXY=${GOPROXY} COPY go.mod go.sum ./ RUN go mod download # npm 缓存层 WORKDIR /src/web COPY web/package.json web/package-lock.json ./ RUN npm ci --no-audit --no-fund WORKDIR /src