chore(docker): 更新 Dockerfile 以优化构建流程和依赖管理
- 将基础镜像版本更新至 golang:1.25-alpine,确保与最新的 Go 语言特性兼容。 - 确保 PATH 包含 Go bin 目录,以便 protoc 能找到插件。 - 复制所有模块的 go.mod 文件以利用 Docker 缓存,并在项目根目录执行 go mod download。 - 使用临时工作目录安装 protoc 插件,避免影响项目目录。 - 在生成 proto 文件后更新依赖,确保项目依赖的准确性和完整性。
This commit is contained in:
parent
c2eb997511
commit
122f7deb5d
24
Dockerfile
24
Dockerfile
|
|
@ -1,7 +1,9 @@
|
||||||
FROM golang:1.21-alpine AS builder
|
FROM golang:1.25-alpine AS builder
|
||||||
ENV CGO_ENABLED=0
|
ENV CGO_ENABLED=0
|
||||||
ENV GO111MODULE=on
|
ENV GO111MODULE=on
|
||||||
ENV GOPROXY=https://goproxy.cn,direct
|
ENV GOPROXY=https://goproxy.cn,direct
|
||||||
|
# 确保 PATH 包含 Go bin 目录,以便 protoc 能找到插件
|
||||||
|
ENV PATH=$PATH:/go/bin
|
||||||
# 安装构建所需的工具:git、protoc、make
|
# 安装构建所需的工具:git、protoc、make
|
||||||
RUN apk add --no-cache git protobuf make
|
RUN apk add --no-cache git protobuf make
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
@ -9,19 +11,18 @@ WORKDIR /app
|
||||||
# 复制 go.work 文件(用于工作区配置,必须在项目根目录)
|
# 复制 go.work 文件(用于工作区配置,必须在项目根目录)
|
||||||
COPY go.work go.work.sum* ./
|
COPY go.work go.work.sum* ./
|
||||||
|
|
||||||
# 复制 server 模块的依赖文件(先复制依赖文件以利用 Docker 缓存)
|
# 复制所有模块的 go.mod 文件(先复制所有依赖文件以利用 Docker 缓存)
|
||||||
|
# 需要先复制所有 go.mod,因为 go.work 引用了它们
|
||||||
COPY server/go.mod server/go.sum ./server/
|
COPY server/go.mod server/go.sum ./server/
|
||||||
WORKDIR /app/server
|
COPY grpc/user/userv1/go.mod grpc/user/userv1/go.sum* ./grpc/user/userv1/
|
||||||
RUN go mod download
|
|
||||||
|
|
||||||
# 复制 grpc/user/userv1 模块的依赖文件
|
# 在项目根目录执行 go mod download(go.work 会自动处理所有模块)
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY grpc/user/userv1/go.mod grpc/user/userv1/go.sum ./grpc/user/userv1/
|
RUN go work sync
|
||||||
WORKDIR /app/grpc/user/userv1
|
|
||||||
RUN go mod download
|
|
||||||
|
|
||||||
# 安装 protoc 插件(需要在有 go.mod 的环境中安装)
|
# 安装 protoc 插件(需要在有 go.mod 的环境中安装)
|
||||||
WORKDIR /app
|
# 使用临时工作目录安装插件,避免影响项目目录
|
||||||
|
WORKDIR /tmp
|
||||||
RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@latest && \
|
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 google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest && \
|
||||||
go install github.com/envoyproxy/protoc-gen-validate@latest && \
|
go install github.com/envoyproxy/protoc-gen-validate@latest && \
|
||||||
|
|
@ -29,12 +30,17 @@ RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@latest && \
|
||||||
go install github.com/go-kratos/kratos/cmd/protoc-gen-go-errors@latest
|
go install github.com/go-kratos/kratos/cmd/protoc-gen-go-errors@latest
|
||||||
|
|
||||||
# 复制 grpc 目录(包括 proto 文件和 Makefile)
|
# 复制 grpc 目录(包括 proto 文件和 Makefile)
|
||||||
|
WORKDIR /app
|
||||||
COPY grpc/ ./grpc/
|
COPY grpc/ ./grpc/
|
||||||
|
|
||||||
# 在容器内生成 proto 文件
|
# 在容器内生成 proto 文件
|
||||||
WORKDIR /app/grpc
|
WORKDIR /app/grpc
|
||||||
RUN make generate
|
RUN make generate
|
||||||
|
|
||||||
|
# 生成 proto 后,更新依赖(proto 生成的文件可能需要额外的依赖)
|
||||||
|
WORKDIR /app/grpc/user/userv1
|
||||||
|
RUN go mod tidy
|
||||||
|
|
||||||
# 复制 server 源代码
|
# 复制 server 源代码
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY server/ ./server/
|
COPY server/ ./server/
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue