在日常开发中,我们经常需要在本地搭建各种服务:MySQL、Redis、Nginx、应用服务等。一个个安装配置既繁琐又容易出错。Docker Compose 让这一切变得简单——一个 YAML 文件,一条命令,完整环境即刻就绪。
为什么选择 Docker Compose?
传统开发环境面临的问题:
- 环境不一致:开发、测试、生产环境差异导致的「在我电脑上能跑」问题
- 配置繁琐:每个服务都要单独安装、配置、启动
- 版本冲突:不同项目需要不同版本的服务
- 团队协作困难:新成员搭建环境需要大半天
Docker Compose 通过容器化解决了这些问题。每个服务运行在独立容器中,版本隔离、配置即代码、一键启停。
实战案例:Spring Boot + MySQL + Redis
假设我们有一个 Spring Boot 项目,依赖 MySQL 和 Redis。传统方式需要分别安装配置,现在用 Docker Compose 只需一个文件:
version: "3.8"
services:
app:
build: .
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mydb
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: secret
SPRING_REDIS_HOST: redis
depends_on:
- db
- redis
db:
image: mysql:8.0
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: mydb
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
volumes:
mysql_data:
redis_data:
一键启动:docker-compose up -d,所有服务就绪。新成员克隆项目后,只需安装 Docker,执行这一条命令即可开始开发。
开发环境 vs 生产环境
Docker Compose 的强大之处在于,同一套配置可以适配不同环境。我们通过多个 compose 文件实现:
开发环境 (docker-compose.yml):
- 暴露所有端口,方便调试
- 挂载本地代码目录,实时热重载
- 使用轻量级镜像
生产环境 (docker-compose.prod.yml):
- 只暴露必要端口
- 使用命名卷持久化数据
- 配置资源限制
- 启用健康检查
启动生产环境:docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
常用命令速查
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f app
# 进入容器
docker-compose exec app bash
# 停止并删除容器
docker-compose down
# 停止并删除容器+数据卷
docker-compose down -v
最佳实践建议
- 使用 .env 文件管理敏感配置:数据库密码、API Key 等不要硬编码在 compose 文件中
- 合理命名服务:服务名即为主机名,应用中直接使用服务名连接
- 数据持久化:重要数据必须挂载卷,避免容器删除后数据丢失
- 健康检查:生产环境配置 healthcheck,让容器自动恢复
- 版本锁定:镜像指定具体版本号,避免 latest 带来的不确定性
总结
Docker Compose 让「环境即代码」成为现实。一个 YAML 文件定义了完整的基础设施,版本控制、团队共享、一键部署都变得简单。对于中小型项目,它是最实用的容器编排工具。当你需要管理更多容器时,再平滑迁移到 Kubernetes。
从今天开始,把你的开发环境容器化吧。你会发现,再也没有「环境配置」这个烦恼了。
觉得有用就点个赞吧~