12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- # 构建阶段(使用新版官方镜像)
- FROM golang:1.21-alpine3.19 AS builder
- # 设置工作目录
- WORKDIR /app
- # 配置Alpine镜像源(使用新版)
- RUN echo -e "https://mirrors.aliyun.com/alpine/v3.19/main\nhttps://mirrors.aliyun.com/alpine/v3.19/community" > /etc/apk/repositories
- # 安装构建依赖(添加upgrade确保索引最新)
- RUN apk add --no-cache --upgrade \
- gcc \
- g++ \
- musl-dev \
- sqlite-dev \
- make
- # 配置Go环境
- ENV GOPROXY=https://goproxy.cn,direct \
- CGO_ENABLED=1 \
- GOOS=linux \
- GOARCH=amd64
- # 复制依赖文件先进行缓存
- COPY go.mod go.sum ./
- RUN go mod download
- # 复制项目代码
- COPY . .
- # 构建可执行文件(添加-ldflags优化)
- RUN go build -ldflags="-w -s" -o /app/main cmd/main.go
- # 运行时阶段
- FROM alpine:3.19
- # 配置镜像源和基础依赖
- RUN echo -e "https://mirrors.aliyun.com/alpine/v3.19/main\nhttps://mirrors.aliyun.com/alpine/v3.19/community" > /etc/apk/repositories \
- && apk update \
- && apk add --no-cache --upgrade \
- sqlite-libs \
- libc6-compat \
- ca-certificates \
- tzdata
- # 设置容器时区
- ENV TZ=Asia/Shanghai
- # 创建专用用户
- RUN addgroup -S appgroup && adduser -S appuser -G appgroup
- # 设置工作目录并转移所有权
- WORKDIR /app
- RUN mkdir -p /app/data/json_files
- COPY --from=builder --chown=appuser:appgroup /app/main .
- COPY --chown=appuser:appgroup config.yaml .
- COPY --chown=appuser:appgroup data/json_files ./data/json_files
- # 设置权限
- RUN chmod 755 /app/main \
- && chmod 644 config.yaml \
- && chmod -R 755 /app/data
- # 切换到非root用户
- USER appuser
- # 健康检查
- HEALTHCHECK --interval=30s --timeout=3s \
- CMD wget --spider http://localhost:8080/healthz || exit 1
- # 暴露端口
- EXPOSE 8080
- # 启动命令
- ENTRYPOINT ["./main"]
- CMD ["server"]
|