From 37b6716a2ac460e596bc842d7fce13ab9a14876e Mon Sep 17 00:00:00 2001 From: zhouyonggao <1971162852@qq.com> Date: Sat, 20 Dec 2025 16:04:53 +0800 Subject: [PATCH] =?UTF-8?q?build(docker):=20=E4=BC=98=E5=8C=96Docker?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E6=B5=81=E7=A8=8B=E4=B8=8E=E9=95=9C=E5=83=8F?= =?UTF-8?q?=E5=9F=BA=E7=A1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 基础镜像更换为带Go环境的golang:1.25-alpine,支持容器启动时编译 - 配置Alpine镜像源为阿里云,提升依赖安装速度 - 安装git包,满足源码及依赖管理需求 - 在构建阶段分步复制go.work和mod文件,通过go work sync优化依赖管理 - 复制grpc生成代码及server源码,改进镜像组织结构 - 添加并授权启动脚本docker-entrypoint.sh,实现容器启动时编译运行 - 替换ENTRYPOINT为启动脚本,完成容器的动态构建与启动过程 - 保留时区和CA证书安装,确保运行环境完整 --- Dockerfile | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4762838..0479869 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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"]