在 Ubuntu 上用 Go(Golang)打 Docker 包,一般有两种常见做法:
优点:镜像小、干净、只含二进制
mkdir go-docker && cd go-docker
go mod init go-docker
main.go 示例:
package main
import "fmt"
func main() {
fmt.Println("Hello Docker")
}
# 构建阶段
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN go build -o main .
# 运行阶段
FROM debian:bookworm-slim
WORKDIR /app
COPY --from=builder /app/main .
CMD ["./main"]
也可以用
FROM alpine或FROM gcr.io/distroless/static
docker build -t go-docker:latest .
docker run --rm go-docker
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o main .
FROM scratch
COPY --from=builder /app/main /
CMD ["/main"]
构建:
docker build -t go-scratch .
✅ 镜像只有几 MB
❗ 不能 debug、没有 shell
sudo apt update
sudo apt install -y docker.io golang-go
sudo systemctl enable --now docker
| 问题 | 解决 |
|---|---|
| 编译慢 | 用 go mod download 缓存 |
| 跨平台 | GOOS=linux GOARCH=amd64 |
| 权限问题 | sudo usermod -aG docker $USER |
如果你愿意,我可以:
你现在是打 CLI 工具 还是 Web 服务?