FROM golang:1.21 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o /app/main
FROM alpine:latest AS runtime
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
EXPOSE 8080
USER 1000:1000
CMD [“/root/main”]
关键要点:
多阶段构建:最终镜像仅保留二进制与必要证书,常见从 ~1GB 降至 ~10MB 量级。
静态编译:CGO_ENABLED=0 避免外部动态库依赖,便于在各种 Linux 环境运行。
安全:避免 latest 标签;以非 root 用户运行;使用可信基础镜像。
三 构建运行与验证常用命令
构建镜像:docker build -t my-go-app:latest .
运行容器:docker run -d -p 8080:8080 --name my-go-container my-go-app:latest