外观
练习 — Docker 与 docker-compose
对应知识点:
Docker·docker-compose· 多服务编排 对应文档:docs/phase-07-engineering/docker-compose.md代码目录:workspace/phase-07/docker-compose/
前置条件:安装 Docker Desktop 或 Docker Engine + Compose。
Level 1 — 基础
练习 1.1 · 编写 Dockerfile
在 workspace/phase-07/docker-compose/ 为 Go API 编写多阶段 Dockerfile:
要求:
- 构建阶段:
golang:1.22-alpine,go build -o server ./cmd/server - 运行阶段:
alpine或distroless,只复制二进制 - 暴露 8080,CMD 启动 server
.dockerignore排除.git、workspace无关目录
练习 1.2 · 构建与运行
要求:
docker build -t twin-api:dev .docker run -p 8080:8080 twin-api:dev- curl 验证
/health
练习 1.3 · 环境变量注入
要求:
- Dockerfile 不硬编码 secret
docker run -e DATABASE_URL=... -e REDIS_ADDR=...传入配置- 文档说明 12-factor 配置原则
Level 2 — 应用
练习 2.1 · docker-compose 双服务
创建 docker-compose.yml:
要求:
- 服务:
app(Go API)、postgres(postgres:16) - app 依赖 postgres,
depends_on+ healthcheck - 卷持久化 postgres 数据
- 网络内 app 通过服务名
postgres:5432连接
练习 2.2 · 加入 Redis
要求:
- 新增
redis:7服务 - app 环境变量
REDIS_ADDR=redis:6379 - 三台服务同一 compose 网络
练习 2.3 · 初始化 SQL
要求:
- 挂载
./migrations:/docker-entrypoint-initdb.d - postgres 首次启动自动执行 schema.sql
- 文档说明 init 脚本仅首次生效
Level 3 — 综合
练习 3.1 · 开发 vs 生产 compose
要求:
docker-compose.yml— 开发(挂载源码热重载可选,或 rebuild)docker-compose.prod.yml— 生产(资源限制、restart policy)docker compose -f docker-compose.yml -f docker-compose.prod.yml up
练习 3.2 · 健康检查
要求:
- app 服务 healthcheck:
curl -f http://localhost:8080/health - postgres:
pg_isready - redis:
redis-cli ping - depends_on 使用
condition: service_healthy(Compose v2 语法)
Level 4 — 项目实践
练习 4.1 · Project 03 完整 compose 栈
在 workspace/phase-07/docker-compose/ 编排数字孪生后端:
服务:
api— Go REST + WebSocketpostgres— 持久化redis— 缓存 / Pub/Subnginx(可选)— 反向代理占位
要求:
- 一条命令
docker compose up --build启动全栈 .env.example列出所有变量- README:本地开发流程、常用命令、端口表
- 验证:REST API + Redis 缓存 + WS 连接(可与 Phase 06 代码合并)
学习检查
- [ ] 多阶段构建的优势?
- [ ]
depends_on是否等待服务就绪? - [ ] 容器内 localhost 与宿主机 localhost 的区别?
- [ ] 数据卷 vs bind mount 的使用场景?
提交方式
检查答案 — docker compose 练习 X.X