本地开发环境一键启动:Docker Compose 极简配置

在多服务或包含数据库的工程中,最让人头疼的就是新成员加入时的本地环境配置:安装指定版本的 PostgreSQL、配置 Redis 密码、排查端口冲突、启动本地 MinIO 对象存储……
往往大半天过去了,新电脑上的服务还没完全跑起来。
借助 Docker Compose,把所有基础设施依赖收敛到一个单一的配置文件中,一条 docker compose up -d 命令在 10 秒内拉起全套干净隔离的本地开发环境。
极简设计原则
编写本地 Compose 文件时,我们坚持三条克制原则:
极简 docker-compose.yml 示范
以下是我们团队日常开发必备的精简配置模板:
version: "3.8"
services:
# 关系型主数据库
postgres:
image: postgres:16-alpine
container_name: star-postgres
restart: unless-stopped
environment:
POSTGRES_USER: star_dev
POSTGRES_PASSWORD: star_dev_password
POSTGRES_DB: star_app
ports:
– "5432:5432"
volumes:
– .docker-data/postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U star_dev -d star_app"]
interval: 5s
timeout: 3s
retries: 5
# 轻量缓存服务
redis:
image: redis:7-alpine
container_name: star-redis
restart: unless-stopped
command: redis-server –appendonly yes –requirepass star_redis_pwd
ports:
– "6379:6379"
volumes:
– .docker-data/redis:/data
healthcheck:
test: ["CMD", "redis-cli", "-a", "star_redis_pwd", "ping"]
interval: 5s
timeout: 3s
retries: 3
# 本地轻量 S3 对象存储(可选)
minio:
image: minio/minio:RELEASE.2024-01-18T22-51-28Z
container_name: star-minio
restart: unless-stopped
command: server /data –console-address ":9001"
environment:
MINIO_ROOT_USER: minio_admin
MINIO_ROOT_PASSWORD: minio_password123
ports:
– "9000:9000"
– "9001:9001"
volumes:
– .docker-data/minio:/data
volumes:
star-data:
配合 Makefile 的一键化体验
为了让新成员甚至不需要记忆 Docker 参数,我们在根目录的 Makefile 中封装常用命令:
.PHONY: dev-env-up dev-env-down dev-env-reset dev
# 启动本地所有依赖中间件
dev-env-up:
@echo "正在启动本地基础依赖…"
docker compose up -d
@echo "依赖服务已就绪!"
# 停止本地依赖
dev-env-down:
docker compose down
# 彻底清空本地数据库与缓存(重置环境)
dev-env-reset:
docker compose down -v
rm -rf .docker-data/
@echo "本地环境已彻底重置。"
# 一键启动全套开发环境
dev: dev-env-up
pnpm dev
避坑要点
- 将 .docker-data/ 加入 .gitignore:本地生成的数据文件绝对不要提交到 Git 仓库,避免污染代码库或泄露测试数据。
- 使用 Alpine 精简镜像:选用 postgres:16-alpine 和 redis:7-alpine,总镜像体积不到 100MB,首次拉取镜像仅需几秒钟。
- 避免硬编码随机端口:本地统一使用标准端口(如 5432、6379),团队所有人使用同一套标准的 .env.development 模板,彻底消灭“我本地跑得通,你本地报错”的协作内耗。

