MarketingSystemDataExportTool/Dockerfile

61 lines
2.0 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
# 安装构建所需的工具git、protoc、make
RUN apk add --no-cache git protobuf make
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
# 安装 protoc 插件(需要在有 go.mod 的环境中安装)
WORKDIR /app
RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@latest && \
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest && \
go install github.com/envoyproxy/protoc-gen-validate@latest && \
go install github.com/go-kratos/kratos/cmd/protoc-gen-go-http@latest && \
go install github.com/go-kratos/kratos/cmd/protoc-gen-go-errors@latest
# 复制 grpc 目录(包括 proto 文件和 Makefile
COPY grpc/ ./grpc/
# 在容器内生成 proto 文件
WORKDIR /app/grpc
RUN make generate
# 复制 server 源代码
WORKDIR /app
COPY server/ ./server/
# 构建应用在项目根目录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"]