build(docker): 优化Docker构建流程与镜像基础

- 基础镜像更换为带Go环境的golang:1.25-alpine,支持容器启动时编译
- 配置Alpine镜像源为阿里云,提升依赖安装速度
- 安装git包,满足源码及依赖管理需求
- 在构建阶段分步复制go.work和mod文件,通过go work sync优化依赖管理
- 复制grpc生成代码及server源码,改进镜像组织结构
- 添加并授权启动脚本docker-entrypoint.sh,实现容器启动时编译运行
- 替换ENTRYPOINT为启动脚本,完成容器的动态构建与启动过程
- 保留时区和CA证书安装,确保运行环境完整
This commit is contained in:
zhouyonggao 2025-12-20 16:04:53 +08:00
parent 743e2bc4d2
commit 37b6716a2a
1 changed files with 29 additions and 7 deletions

View File

@ -62,17 +62,39 @@ WORKDIR /app/server
RUN go build -ldflags="-w -s" -trimpath -o /out/server ./cmd/server/main.go && \
chmod +x /out/server
# 使用最小化的 alpine 镜像(包含时区支持,应用需要 loc=Local
FROM alpine:3.19
# 使用带Go环境的镜像支持容器启动时编译
FROM golang:1.25-alpine
ENV CGO_ENABLED=0
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,https://goproxy.io,https://mirrors.aliyun.com/goproxy/,direct
# 配置 Alpine 国内镜像源(阿里云)
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 安装运行时必需的包:时区和 CA 证书
RUN apk add --no-cache ca-certificates tzdata && \
# 安装运行时必需的包:时区、CA 证书和 git
RUN apk add --no-cache ca-certificates tzdata git && \
mkdir -p /app/storage/export /app/log
WORKDIR /app
COPY --from=builder /out/server /app/server
# 复制 go.work 和依赖文件
COPY go.work go.work.sum* ./
COPY server/go.mod server/go.sum ./server/
COPY grpc/user/userv1/go.mod grpc/user/userv1/go.sum* ./grpc/user/userv1/
# 下载依赖(利用缓存)
RUN go work sync
# 复制 grpc 生成的代码
COPY --from=builder /app/grpc/ ./grpc/
# 复制 server 源代码
COPY server/ ./server/
# 复制前端静态文件
COPY web/ ./web/
# 复制启动脚本
COPY scripts/docker-entrypoint.sh /app/docker-entrypoint.sh
RUN chmod +x /app/docker-entrypoint.sh
EXPOSE 8077
# 使用 root 用户运行
ENTRYPOINT ["/app/server"]
# 容器启动时编译并运行
ENTRYPOINT ["/app/docker-entrypoint.sh"]