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