用途:为 Go 应用编写或审查 Dockerfile,选择 scratch、distroless、Alpine 等基础镜像,解决 CGO 与静态链接问题,并按最小权限原则加固容器。
主要能力:静态编译(CGO_ENABLED=0)、用 ldflags 剥离符号与调试信息(-w -s)、-trimpath 去除路径、多阶段构建、scratch/distroless 运行阶段、HTTPS 所需 CA 证书处理,以及 CGO 场景下的 Alpine 方案。资料给出从 846MB 到 2.5MB 的优化路径:完整 Debian 基础(846MB)→ Alpine(312MB)→ 多阶段构建(15MB)→ 剥离与优化构建参数(8MB)→ scratch 或 distroless(2.5MB 或约 4-5MB)。
使用方式:构建阶段用 golang:1.23-alpine,先复制 go.mod/go.sum 并 go mod download,再复制源码;构建命令示例:CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags="-w -s" -trimpath -o main .;运行阶段用 FROM scratch 并复制 CA 证书与二进制,或使用 gcr.io/distroless/static-debian12。可用 ldd 验证静态链接,用 docker history 查看层大小。
适用场景:生产服务优先 scratch/distroless;含 C 依赖(如 mattn/go-sqlite3)时用 Alpine 并开启 CGO;开发调试用 Alpine 以便进入 shell。
限制:使用 CGO 时无法用 scratch;scratch 无 shell、无包管理器,调试不便;资料未提供具体收费、价格或平台支持信息。