2025-04-04 09:57:40 +08:00
|
|
|
# 使用官方 Go 镜像作为构建阶段
|
|
|
|
FROM golang:1.22 AS builder
|
|
|
|
|
|
|
|
# 个别 go mod 依赖,换源获取。
|
|
|
|
ENV GOPROXY=https://goproxy.cn,direct
|
|
|
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
|
|
|
# 复制 go.mod 和 go.sum 文件
|
|
|
|
COPY go.mod go.sum ./
|
|
|
|
RUN go mod download
|
|
|
|
|
|
|
|
# 复制源代码并构建
|
|
|
|
COPY . .
|
|
|
|
|
|
|
|
# 设置环境变量以确保静态编译
|
|
|
|
ENV CGO_ENABLED=0 GOOS=linux GOARCH=amd64
|
|
|
|
# 构建静态链接的二进制文件
|
2025-04-05 17:26:48 +08:00
|
|
|
RUN go build -ldflags="-s -w" -a -o myapp .
|
2025-04-04 09:57:40 +08:00
|
|
|
|
|
|
|
# 使用轻量级的 Alpine 镜像作为最终镜像
|
|
|
|
FROM alpine:latest
|
|
|
|
|
|
|
|
WORKDIR /root/
|
|
|
|
|
|
|
|
# 安装必要的运行时库(如果需要)
|
|
|
|
# 对于完全静态的二进制文件,这一步可以省略
|
|
|
|
# 但是为了保险起见,可以安装一些基本工具
|
|
|
|
# RUN apk add --no-cache ca-certificates # 这一步无权
|
|
|
|
|
|
|
|
# 复制构建好的二进制文件
|
|
|
|
COPY --from=builder /app/myapp .
|
|
|
|
|
|
|
|
# 需要的文件夹
|
|
|
|
COPY ./config ./config
|
|
|
|
RUN mkdir -p store/logs && mkdir -p public
|
|
|
|
|
|
|
|
# 确保二进制文件具有可执行权限
|
|
|
|
RUN chmod +x myapp
|
|
|
|
|
|
|
|
# 暴露 端口
|
|
|
|
EXPOSE 20201
|
|
|
|
|
|
|
|
# 运行应用
|
|
|
|
CMD ["./myapp"]
|
|
|
|
|
|
|
|
# TEST 挂起效果,测试用
|
|
|
|
# CMD ["tail", "-f", "/dev/null"]
|