# ============ 构建阶段 ============ FROM golang:1.22-bookworm AS builder ARG VERSION=dev ARG GIT_COMMIT=unknown ARG BUILD_TIME=unknown WORKDIR /build # 安装 gojieba 依赖 RUN apt-get update && apt-get install -y gcc g++ cmake && rm -rf /var/lib/apt/lists/* # 先复制依赖文件,利用缓存 COPY go.mod go.sum ./ RUN go mod download # 复制源码 COPY . . # 编译 RUN CGO_ENABLED=1 go build \ -ldflags "-X xiaji-go/version.Version=${VERSION} \ -X xiaji-go/version.GitCommit=${GIT_COMMIT} \ -X xiaji-go/version.BuildTime=${BUILD_TIME}" \ -o xiaji-go cmd/main.go # ============ 运行阶段 ============ FROM debian:bookworm-slim RUN apt-get update && apt-get install -y ca-certificates tzdata && rm -rf /var/lib/apt/lists/* ENV TZ=Asia/Shanghai WORKDIR /app # 从构建阶段复制 COPY --from=builder /build/xiaji-go . COPY --from=builder /build/templates/ ./templates/ COPY --from=builder /build/config.yaml.example ./config.yaml.example # gojieba 词典文件 COPY --from=builder /go/pkg/mod/github.com/yanyiwu/gojieba@v1.3.0/dict/ /app/dict/ # 数据目录 VOLUME ["/app/data"] EXPOSE 9521 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost:9521/health || exit 1 ENTRYPOINT ["./xiaji-go"]