惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
云风的 BLOG
云风的 BLOG
Microsoft Security Blog
Microsoft Security Blog
博客园 - 司徒正美
Y
Y Combinator Blog
Stack Overflow Blog
Stack Overflow Blog
雷峰网
雷峰网
小众软件
小众软件
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
MyScale Blog
MyScale Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
A
About on SuperTechFans
宝玉的分享
宝玉的分享
WordPress大学
WordPress大学
B
Blog RSS Feed
G
Google Developers Blog
量子位
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 三生石上(FineUI控件)

卡卡罗特

eino实现Agent eino整合RAG eino整合Tools go整合向量数据库ChromaDB langchainjs langchain实现Agent ollama调用各大模型 spring-ai 自定义一个MCP openCV初体验 01-Bing每日一图接口 02-腾讯API高清QQ头像https调用接口 01-获取指定网站的所有的链接 context.Context是什么? RWMutex读写锁 SyncMap的使用 defer的使用 go字符串工具类 go生成UUID go正则表达式 最后代码 | 卡卡罗特 swagger文档 | 卡卡罗特 react脚手架开发 | 卡卡罗特 python的对象增强 | 卡卡罗特 langchain实现Agent | 卡卡罗特 03.python列表集合元组字典 | 卡卡罗特 python依赖打包 | 卡卡罗特 python的异步 | 卡卡罗特 python的生成器 | 卡卡罗特 eino整合Tools | 卡卡罗特
docker打包go服务 | 卡卡罗特
2026-05-17 · via 卡卡罗特

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