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:
parent
743e2bc4d2
commit
37b6716a2a
36
Dockerfile
36
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"]
|
||||
|
|
|
|||
Loading…
Reference in New Issue