Dockerfile 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # 构建阶段
  2. FROM golang:1.19-alpine AS builder
  3. # 设置工作目录
  4. WORKDIR /app
  5. # 安装必要的包
  6. RUN apk add --no-cache git ca-certificates tzdata
  7. # 复制go mod文件
  8. COPY go.mod go.sum ./
  9. # 下载依赖
  10. RUN go mod download
  11. # 复制源代码
  12. COPY . .
  13. # 构建应用
  14. RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o server cmd/server/main.go
  15. RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gateway cmd/gateway/main.go
  16. RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o monitor cmd/monitor/main.go
  17. # 运行阶段
  18. FROM alpine:latest
  19. # 安装ca证书和时区数据
  20. RUN apk --no-cache add ca-certificates tzdata
  21. # 创建非root用户
  22. RUN addgroup -g 1001 -S appgroup && \
  23. adduser -u 1001 -S appuser -G appgroup
  24. # 设置工作目录
  25. WORKDIR /app
  26. # 从构建阶段复制二进制文件
  27. COPY --from=builder /app/server .
  28. COPY --from=builder /app/gateway .
  29. COPY --from=builder /app/monitor .
  30. # 复制配置文件和静态资源
  31. COPY --from=builder /app/config ./config
  32. COPY --from=builder /app/web ./web
  33. # 创建必要的目录
  34. RUN mkdir -p logs uploads && \
  35. chown -R appuser:appgroup /app
  36. # 切换到非root用户
  37. USER appuser
  38. # 暴露端口
  39. EXPOSE 8080 8081 8082
  40. # 默认启动服务器
  41. CMD ["./server"]