用于本地开发的 Docker Compose
连接 Go 服务、PostgreSQL 与 Redis
用于本地开发的 Docker Compose 是 CoddyKit 上的免费 Go Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。
为什么使用 Docker Compose?
Docker Compose 可编排多个容器(应用、数据库、缓存、消息代理)用于本地开发,无需手动设置各项服务即可重现类似生产环境的环境。
docker-compose.yml 结构
在 YAML 文件中定义服务、网络和卷:
services:
app:
build: .
ports: ["8080:8080"]
environment:
- DATABASE_URL=postgres://app:pass@db/mydb
depends_on: [db]
db:
image: postgres:15
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:使用 Air 实时重新加载
开发期间使用 github.com/air-verse/air 实现实时重新加载。将源代码挂载到容器中,并运行 air 而不是二进制文件:
app:
volumes:
- .:/app
command: air健康检查
定义健康检查,使 depends_on 等待数据库真正就绪,而不只是等待数据库启动:
db:
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app"]
interval: 5s
timeout: 3s
retries: 5
app:
depends_on:
db:
condition: service_healthy环境覆盖配置
使用 docker-compose.override.yml(会自动合并)存放仅限本地的设置,同时保持基础文件整洁,以便用于持续集成:
# docker-compose.override.yml
services:
app:
volumes: [".:/app"] # source mount for live reload命名网络
将服务放在共享的自定义网络中,以便通过基于 DNS 的服务名称发现服务:
networks:
backend:
driver: bridge
services:
app:
networks: [backend]
db:
networks: [backend]环境文件
使用 env_file 键将 .env 文件加载到容器中,从而避免将机密信息写入 YAML:
app:
env_file: .env.local运行命令
常用的 Compose 命令:
docker compose up -d # start in background
docker compose down -v # stop and remove volumes
docker compose logs -f app # stream app logs
docker compose exec db psql -U app mydb # run in container初始化数据库
将 SQL 初始化文件挂载到 postgres 镜像的 /docker-entrypoint-initdb.d 目录中——这些文件会在首次创建容器时执行:
db:
volumes:
- ./migrations:/docker-entrypoint-initdb.d配置组
使用 Compose 配置组,仅在需要时启动可选服务(例如监控服务栈):
services:
grafana:
profiles: ["monitoring"]持续集成中的 Compose
在持续集成中使用 Compose 针对真实服务运行集成测试。GitHub Actions 原生支持 Docker Compose;使用健康检查等待服务就绪。
快速检查
在 Docker Compose 中,如何确保应用容器等待数据库就绪?
回顾:Docker Compose
要点:
- docker-compose.yml 定义所有服务、网络和卷
- 使用 depends_on 加 healthcheck 确保服务就绪
- 使用覆盖配置文件设置本地开发选项;使用 env_file 管理机密信息
- 使用 Air 实现实时重新加载;将源代码挂载为卷
常见问题解答
「用于本地开发的 Docker Compose」课时是免费的吗?
是的 — 「用于本地开发的 Docker Compose」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。
「用于本地开发的 Docker Compose」这节课中我会学到什么?
连接 Go 服务、PostgreSQL 与 Redis 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Go Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「用于本地开发的 Docker Compose」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Go Academy 课中编写并运行代码吗?
能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Go 的多阶段 Docker 构建
- 环境配置与密钥
- 用于本地开发的 Docker Compose
- 健康检查与生产环境调优