用 Docker Compose 编排本地开发环境 2026-06-15
·
1 分钟阅读
·
132 字
团队里每个人本地配环境的痛苦大家都懂:版本不一致、依赖冲突、装了卸卸了装。自从用 Docker Compose 统一开发环境后,新人入职第一天就能跑起来项目。分享一套我用了两年的实践。
核心思路 一个 docker-compose.yml 定义所有依赖服务(数据库、缓存、队列),应用代码本身在容器外用 IDE 跑,通过 Docker 网络访问容器内的服务。这样既保证了依赖统一,又不影响调试体验。
一个典型配置 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version : "3.9"
services :
postgres :
image : postgres:16
ports : ["5432:5432" ]
environment :
POSTGRES_PASSWORD : dev123
volumes :
- pgdata:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
redis :
image : redis:7-alpine
ports : ["6379:6379" ]
mailhog :
image : mailhog/mailhog
ports : ["1025:1025" , "8025:8025" ]
volumes :
pgdata :
几个要点:
数据卷持久化 :pgdata 卷保证容器重建后数据还在初始化脚本 :init.sql 挂到 docker-entrypoint-initdb.d/,首次启动自动执行邮件测试 :Mailhog 拦截所有发信,UI 在 8025 端口查看一组好用的 Makefile 命令 1
2
3
4
5
6
7
8
9
.PHONY : up down logs reset
up :
docker compose up -d
down :
docker compose down
logs :
docker compose logs -f --tail= 100
reset :
docker compose down -v && docker compose up -d
新人 clone 下来,make up 就齐活了。
性能小坑 macOS 上挂载代码到容器内会很慢,但我们的方案是应用不进容器,所以没这个问题。如果非要把代码也挂进容器,建议用命名卷或者 :cached 选项。
写在最后 这套方案最大的好处是确定性 —— 在我机器上能跑,在你机器上也一定能跑。节省下来的扯皮时间,足够多写几个 feature 了。