# ---- 构建阶段 ---- FROM golang:1.26-alpine AS builder WORKDIR /app # 使用国内 Go 代理 ENV GOPROXY=https://goproxy.cn,https://goproxy.io,direct # 先复制依赖清单,利用 Docker 缓存层 COPY go.mod go.sum ./ # --mount=type=cache 复用 Go module 缓存,依赖不变时跳过下载 RUN --mount=type=cache,target=/go/pkg/mod \ go mod download # 复制源码并构建 COPY . . # 复用 module 缓存 + 编译缓存;-ldflags="-s -w" 裁剪符号表减小 ~30% 体积 RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ CGO_ENABLED=0 GOOS=linux \ go build -ldflags="-s -w" -o /camtalk ./cmd/server # ---- 运行阶段 ---- FROM alpine:3.20 RUN apk add --no-cache ca-certificates tzdata WORKDIR /app # 复制二进制和配置文件(敏感配置通过 docker-compose env_file 注入覆盖) COPY --from=builder /camtalk . COPY config/ ./config/ EXPOSE 8080 ENTRYPOINT ["./camtalk"]