不必须。Go语言本身是编译型语言,go build、go run等命令完全不依赖Docker;仅当需容器化能力(如运行依赖服务、构建镜像、复现生产环境或团队统一容器开发)时才需安装Docker。

不必须。Go 语言本身是编译型语言,go build、go run、go test 等命令完全不依赖 Docker。
什么时候才需要在 Go 开发中装 Docker
只有当你的开发流程或项目实际用到容器化能力时,Docker 才成为必要工具:
- 本地运行依赖服务(如
PostgreSQL、Redis、RabbitMQ),且不想手动安装配置——用docker-compose up一键拉起 - 项目要求构建镜像并推送到 registry(比如 CI/CD 流程含
Dockerfile构建步骤) - 需要复现生产环境的网络、文件系统或权限限制(例如
chroot、用户 UID、挂载只读路径) - 团队约定本地开发必须通过容器启动,统一环境行为(避免“在我机器上是好的”问题)
不装 Docker 的 Go 开发完全可行,但要注意这些替代方案
很多 Go 项目纯本地跑得飞快,尤其 CLI 工具、微服务 API 或单元测试密集型项目:
- 用
go mod vendor锁定依赖,避免网络波动影响构建 - 用
sqlite或memcached替代远程 DB/Cache 做快速迭代(配合testify或gomock隔离外部依赖) - 数据库迁移可改用
golang-migrate+ 本地 SQLite 文件,跳过 Docker 启动 PostgreSQL - 若调用其他 HTTP 服务,可用
httptest.Server模拟响应,而非真实容器服务
Docker Desktop 在 macOS / Windows 上的隐性开销容易被低估
它不是轻量级工具,尤其对资源有限的开发机:
立即学习“go语言免费学习笔记(深入)”;
- macOS 上 Docker Desktop 默认占用至少 2GB 内存 + 持续 CPU 轮询,可能拖慢
go test -race运行速度 - Windows WSL2 后端存在文件系统延迟,
go build在挂载卷里执行会比原生路径慢 3–5 倍 -
docker build使用 BuildKit 时若未显式关闭(export DOCKER_BUILDKIT=0),偶尔与 Go 的 module cache 权限冲突,报错permission denied: unknown
是否装 Docker,取决于你正在写的 Go 代码要不要和容器 runtime 打交道——写一个解析 JSON 的包?不需要。写一个 Kubernetes Operator?那从第一天起就要和 docker、kind、helm 共处了。










