Docker Compose 开发环境的终极配置:一键启动所有依赖

Mei Lin | 2026-09-10T19:01:00 | DevOps

每次新同事入职都要花半天配开发环境,受不了了。用 Docker Compose 搞了一套一键启动的方案,MySQL、Redis、MinIO 全包了。

新同事入职的第一天通常是这样的:装 MySQL → 配数据库 → 装 Redis → 改配置 → 装 MinIO → 导入测试数据……半天就这么过去了。后来我用 Docker Compose 搞了一套一键启动的方案。 ## compose.yml ```yaml services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: myapp ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql - ./init-scripts:/docker-entrypoint-initdb.d healthcheck: test: mysqladmin ping -h localhost interval: 10s timeout: 5s retries: 3 redis: image: redis:7-alpine ports: - "6379:6379" healthcheck: test: redis-cli ping interval: 10s minio: image: minio/minio command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: admin MINIO_ROOT_PASSWORD: admin123 ports: - "9000:9000" - "9001:9001" volumes: - minio-data:/data mailhog: image: mailhog/mailhog ports: - "1025:1025" # SMTP - "8025:8025" # Web UI volumes: mysql-data: minio-data: ``` ## 几个关键细节 ### 1. 数据库初始化脚本 把建表语句和测试数据放在 `init-scripts/` 目录下,MySQL 容器第一次启动时会自动执行。 ### 2. healthcheck 加了健康检查后,可以确保依赖的服务真正就绪了再启动应用: ```yaml app: depends_on: mysql: condition: service_healthy redis: condition: service_healthy ``` ### 3. MailHog 替代真实邮件 开发环境发邮件用 MailHog 拦截,所有邮件都在 Web UI 里看,不用担心误发给真实用户。 ### 4. 数据持久化 用 named volumes 持久化数据,`docker compose down` 不会丢数据。想重置就 `docker compose down -v`。 ## 使用方式 新同事入职只需要: 1. 装 Docker Desktop 2. `git clone` 项目 3. `docker compose up -d` 4. 开始写代码 从半天缩短到了 5 分钟。

← Back to Blog