0Pricing
Go Academy · 课时

用于本地开发的 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Go 的多阶段 Docker 构建
  2. 环境配置与密钥
  3. 用于本地开发的 Docker Compose
  4. 健康检查与生产环境调优
← 返回 Go Academy