
docker打包go服务
单体服务
只有go
Dockerfile 文件
shell
# 构建阶段
FROM golang:1.25-alpine AS builder
# 设置国内 Go 代理(关键!)
ENV GOPROXY=https://goproxy.cn,direct
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o main .
# 运行阶段
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
EXPOSE 8888
CMD ["./main"]打包测试
shell
# 构建镜像
docker build -t go-web-demo .
# 运行容器(映射 8080 端口)
docker run -d -p 8888:8888 --name my-go-app go-web-demo
# 测试
curl http://localhost:8888
# 输出: {"hello":"world"}最佳实践
因为go编译出来的是一个可执行文件,在服务器上是不需要安装go环境的。但是有的情况例外,可能需要c的依赖。但是我们可以在编译的时候避免
静态编译 + Alpine(最省心):既然选择了 Go,充分发挥其静态编译优势是最好的做法。
编译:强制禁用 CGO,生成一个完全静态的二进制文件。
shell
CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-s -w' -o myapp .打包:使用最小的 scratch 或者兼容性更好的 alpine 镜像。
shell
FROM alpine:latest
COPY --from=builder /app/myapp /myapp
CMD ["/myapp"]
