40 lines
1.0 KiB
Docker
40 lines
1.0 KiB
Docker
# ==== 第一阶段: 编译打包层 ====
|
||
FROM golang:1.21-alpine AS builder
|
||
|
||
# 配置国内高速 Go 代理环境,开启跨平台交叉编译所需变量
|
||
ENV GO111MODULE=on \
|
||
CGO_ENABLED=0 \
|
||
GOOS=linux \
|
||
GOARCH=amd64 \
|
||
GOPROXY=https://goproxy.cn,direct
|
||
|
||
WORKDIR /app
|
||
|
||
# 优先缓存和下载项目依赖
|
||
COPY go.mod go.sum ./
|
||
RUN go mod download
|
||
|
||
# 载入完整代码并执行剥离调试信息的极限压缩静态编译 (-ldflags="-w -s")
|
||
COPY . .
|
||
RUN go build -ldflags="-w -s" -o imagehost ./cmd/main.go
|
||
|
||
# ==== 第二阶段: 纯净运行环境层 ====
|
||
FROM alpine:latest
|
||
|
||
# 123云盘采用硬 TLS 协议,必须拉取 ca-certificates,否则网络连接拦截报错
|
||
# TZdata 用于纠正容器运行内的时间对齐,保障授权握手不过期
|
||
RUN apk --no-cache add ca-certificates tzdata
|
||
|
||
ENV TZ=Asia/Shanghai
|
||
|
||
WORKDIR /app
|
||
|
||
# 将上一阶段萃取好的精华可执行程序抓取过来
|
||
COPY --from=builder /app/imagehost .
|
||
|
||
# 暴露对外的 HTTP 接口
|
||
EXPOSE 8080
|
||
|
||
# 触发点火
|
||
CMD ["./imagehost"]
|