MarketingSystemDataExportTool/Dockerfile

48 lines
1.6 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

FROM golang:1.21-alpine AS builder
ENV CGO_ENABLED=0
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct
# 只安装构建所需的工具
RUN apk add --no-cache git
WORKDIR /app
# 复制 go.work 文件(用于工作区配置,必须在项目根目录)
COPY go.work go.work.sum* ./
# 复制 server 模块的依赖文件(先复制依赖文件以利用 Docker 缓存)
COPY server/go.mod server/go.sum ./server/
WORKDIR /app/server
RUN go mod download
# 复制 grpc/user/userv1 模块的依赖文件
WORKDIR /app
COPY grpc/user/userv1/go.mod grpc/user/userv1/go.sum ./grpc/user/userv1/
WORKDIR /app/grpc/user/userv1
RUN go mod download
# 复制所有源代码(包括生成的 proto 文件)
# 注意:必须在 go.work 所在的目录下构建,才能正确识别工作区
WORKDIR /app
COPY server/ ./server/
COPY grpc/user/userv1/ ./grpc/user/userv1/
# 构建应用在项目根目录go.work 会自动生效)
# 使用 -ldflags 减小二进制文件大小,移除调试信息
WORKDIR /app/server
RUN go build -ldflags="-w -s" -trimpath -o /out/server ./cmd/server/main.go
# 使用最小化的 alpine 镜像(包含时区支持,应用需要 loc=Local
FROM alpine:3.19
# 只安装运行时必需的包:时区和 CA 证书(用于可能的 HTTPS 连接)
RUN apk add --no-cache ca-certificates tzdata && \
# 创建非 root 用户
addgroup -g 1000 appuser && \
adduser -D -u 1000 -G appuser appuser && \
# 清理缓存
rm -rf /var/cache/apk/*
WORKDIR /app
COPY --from=builder /out/server /app/server
EXPOSE 8077
USER appuser:appuser
ENTRYPOINT ["/app/server"]