

新闻资讯
技术学院开发用分阶段Dockerfile+源码挂载+air热重载,生产用多阶段构建精简镜像;docker-compose统一编排依赖服务,通过服务名通信并内置重试机制。
用 Golang 配置 Docker 开发环境,核心是写好 Dockerfile、合理管理依赖、避免重复构建,并让本地开发与容器行为尽量一致。关键不在“能不能跑”,而在“是否高效、可复现、易调试”。
生产镜像追求精简,但开发环境需要快速反馈。推荐分阶段构建 + 本地挂载源码:
golang:1.22-alpine(轻量)或 golang:1.22(兼容性更好)go mod download 提前拉取依赖,利用 Docker 层缓存加速后续构建docker run -v $(pwd):/app -w /app 挂载本地目录air 或 reflex 实现文件变更自动重启:go install github.com/cosmtrek/air@latest
Go 应用常需连数据库、Redis 或其他 HTTP 服务。用 docker-compose.yml 统一编排比手动启停更可靠:
app 服务:基于你的 Go 镜像,挂载代码、暴露端口、设置启动命令为 air
postgres、redis 等服务,用 depends_on 控制启动顺序(注意:它不等就绪,应用内仍需加连接重试)postgres://postgres:5432),Docker 内置 DNS 自动解析同一个项目,开发用挂载+热重载,上线要用静态二进制+最小镜像:
golang 镜像为基础,保留 go 工具链和 air
multi-stage 构建,第一阶段编译,第二阶段用 scratch 或 alpine 打包二进制,无 Go 环境、无源码、体积通常
.dockerignore 排除 go.mod 外的无关文件(如 node_modules、.git),避免误传敏感内容或拖慢构建别只靠 docker logs -f 看输出,遇到问题得进容器查:
docker exec -it sh (Alpine 用 sh,Debian 用 bash)env | grep GO,确认 GOPATH、GOBIN 是否符合预期curl -v http://other-service:8080/
health,确认服务发现和端口映射正常zerolog 或 log/slog),方便后续接入 ELK 或 Loki