🚫 "在我机器上能跑":本地环境与线上不一致
🚫 新人入职:配环境耗时3天+
🚫 多服务管理:启动命令复杂易错
✅ 应用+依赖打包成标准容器
✅ 任何地方运行结果一致
# 单个服务示例:启动MySQLdocker run -d \ --name mydb \ -v ./data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:8.0
🚫 手动启动多个容器的问题:
命令冗长重复
服务依赖需手动管理
网络配置复杂
修改需重敲所有命令
✅ 单一配置文件定义所有服务 ✅ 一键启动/停止整个应用栈 ✅ 自动处理网络和依赖关系
# docker-compose.yml 示例 services: db: image: mysql:8.0 volumes: - ./data:/var/lib/mysql env_file: .env backend: build: ./backend depends_on: - db environment: DB_HOST: db
痛点场景 | Docker Run (手动) | Docker Compose | 优势 |
---|---|---|---|
启动多服务 | 多条独立命令 | docker compose up -d | ⚡ 一键启动 |
服务间通信 | 需手动配–link或网络 | 自动网络,服务名直连 | 📡 免配置通信 |
修改配置 | 所有命令需重敲 | 改YAML文件+重启 | ✏️ 配置即代码 |
团队协作 | 需文档指导,易出错 | 共享docker-compose.yml文件 | 👥 新人5分钟上手 |
敏感信息管理 | 暴露在命令历史中 | 使用.env文件隔离 | 🔒 安全可靠 |
前端:Vue.js
后端:Spring Boot
数据库:MySQL
网关:Nginx
启动数据库:长命令(含卷、密码等)
启动后端:长命令(含数据库链接)
启动前端:长命令(含端口映射)
启动Nginx:长命令(含代理配置)
⌛ 耗时:30分钟+ 💥 风险:任一命令错误导致失败
创建docker-compose.yml:
version: '3.8' services: db: # 数据库 image: mysql:8.0 env_file: .env volumes: - db_data:/var/lib/mysql backend: # SpringBoot后端 build: ./backend depends_on: db: condition: service_healthy environment: DB_URL: jdbc:mysql://db:3306/app frontend: # Vue前端 build: ./frontend ports: - "8080:8080" nginx: # 反向代理 image: nginx:alpine volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf ports: - "80:80" - "443:443" volumes: db_data:
创建.env文件:
MYSQL_ROOT_PASSWORD=secure_password MYSQL_DATABASE=appdb
启动命令:
docker compose up -d --build
⏱️ 耗时:30秒 ✅ 结果:完整环境一键启动
环境不一致问题
"在我机器上能跑"的尴尬
依赖冲突难题
多服务协同管理
复杂启动流程简化
团队环境标准化
配置版本控制
> 💡 终极价值:让开发者专注业务代码,而非环境配置!
后面将通过案例讲解docker compose配置