Dockerfile 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # 使用基于 Alpine 的 Go 镜像
  2. FROM golang:1.23-alpine AS builder
  3. # 设置工作目录
  4. WORKDIR /app
  5. # 替换国内镜像源
  6. RUN echo "https://mirrors.aliyun.com/alpine/v3.16/main" > /etc/apk/repositories && \
  7. echo "https://mirrors.aliyun.com/alpine/v3.16/community" >> /etc/apk/repositories
  8. # 安装 SQLite 的开发依赖
  9. RUN apk add --no-cache gcc g++ musl-dev sqlite-dev
  10. # 设置 Go 模块代理(可选,用于国内环境)
  11. ENV GOPROXY=https://goproxy.cn,direct
  12. # 将 go.mod 和 go.sum 复制到容器中
  13. COPY go.mod go.sum ./
  14. # 下载依赖
  15. RUN go mod download
  16. # 将项目代码复制到容器中
  17. COPY . .
  18. # 启用 CGO,并针对 Linux 平台编译二进制文件
  19. RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o main cmd/main.go
  20. # 使用轻量级的运行镜像
  21. FROM alpine:3.16
  22. # 替换国内镜像源
  23. RUN echo "https://mirrors.aliyun.com/alpine/v3.16/main" > /etc/apk/repositories && \
  24. echo "https://mirrors.aliyun.com/alpine/v3.16/community" >> /etc/apk/repositories
  25. # 安装 SQLite 的运行时依赖
  26. RUN apk add --no-cache sqlite-libs ca-certificates
  27. # 设置工作目录
  28. WORKDIR /app
  29. # 从构建阶段复制二进制文件
  30. COPY --from=builder /app/main .
  31. COPY config.yaml .
  32. COPY data/json_files ./data/json_files
  33. # 确保二进制文件可执行
  34. RUN chmod +x main
  35. # 暴露服务端口
  36. EXPOSE 8080
  37. # 设置默认启动命令
  38. CMD ["./main", "server"]