Skip to content
鼓励作者:欢迎打赏犒劳

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"]

如有转载或 CV 的请标注本站原文地址