别再手动配置了!用Docker Compose一键部署你的第一个Web应用(附完整YAML文件)
·
别再手动配置了!用Docker Compose一键部署你的第一个Web应用(附完整YAML文件)
每次搭建开发环境都要重复安装依赖、配置服务端口、处理数据库连接?这种低效操作早该被淘汰了。今天我要分享的是现代Web开发的正确打开方式——用Docker Compose实现一键环境部署。看完这篇,你会发现自己过去浪费了多少时间在环境配置上。
1. 为什么你需要Docker Compose
还记得第一次配置LNMP环境时的手忙脚乱吗?安装Nginx、配置PHP-FPM、设置MySQL权限...每个环节都可能出错。更糟的是,当项目需要迁移或团队协作时,环境差异导致的"在我机器上能跑"问题简直让人抓狂。
Docker Compose解决了三个核心痛点:
- 环境一致性:相同的配置在任何机器上运行结果一致
- 依赖隔离:不同项目的服务完全独立,不会互相干扰
- 配置即代码:
docker-compose.yml文件记录全部环境配置,可版本控制
对比传统方式,使用Compose部署的优势显而易见:
| 对比项 | 传统方式 | Docker Compose |
|---|---|---|
| 部署时间 | 30min+ | 1分钟 |
| 环境还原 | 靠文档记忆 | 一个命令 |
| 多项目隔离 | 需要手动处理 | 自动隔离 |
| 团队协作 | 容易出错 | 完全一致 |
2. 准备你的第一个Compose项目
2.1 环境准备
确保已安装:
- Docker Engine 20.10+
- Docker Compose v2.2+
检查版本:
docker --version
docker compose version
2.2 项目结构设计
推荐的基础目录结构:
/my-webapp
├── docker-compose.yml
├── nginx/
│ └── nginx.conf
├── app/
│ └── (你的应用代码)
└── mysql/
└── init.sql
提示:这种结构将配置、代码和数据分离,方便管理和扩展
3. 编写完整的docker-compose.yml
下面是一个支持PHP+MySQL+Nginx的完整配置示例:
version: '3.8'
services:
app:
build: ./app
volumes:
- ./app:/var/www/html
environment:
- DB_HOST=db
- DB_USER=root
- DB_PASSWORD=secret
db:
image: mysql:5.7
volumes:
- mysql_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=myapp
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
- ./app:/var/www/html
depends_on:
- app
volumes:
mysql_data:
关键配置解析:
- volumes:实现宿主机与容器间的文件同步
- depends_on:控制服务启动顺序
- environment:设置容器内环境变量
4. 实战操作与技巧
4.1 启动与停止
启动所有服务:
docker compose up -d
停止并清理:
docker compose down --volumes
4.2 常见问题排查
问题1:端口冲突
解决方案:修改
ports映射,如"8081:80"
问题2:服务启动顺序
注意:
depends_on只控制启动顺序,不保证服务就绪
问题3:文件权限
# 查看容器日志
docker compose logs app
# 进入容器检查
docker compose exec app bash
4.3 性能优化技巧
- 开发环境使用
bind mount实现代码热更新:
volumes:
- ./app:/var/www/html:cached
- 生产环境建议:
- 使用
.dockerignore减少构建上下文 - 配置资源限制:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
5. 进阶:扩展到Node.js应用
只需修改app服务配置:
app:
image: node:16
working_dir: /usr/src/app
volumes:
- ./app:/usr/src/app
ports:
- "3000:3000"
command: npm start
配套的Nginx配置需要添加反向代理:
location / {
proxy_pass http://app:3000;
}
6. 最佳实践与经验分享
在实际项目中,我总结了这些经验教训:
- 版本控制:将
docker-compose.yml和所有配置文件纳入Git管理 - 环境分离:使用
docker-compose.override.yml实现开发/生产配置 - 敏感信息:用
.env文件管理密码等机密:
DB_PASSWORD=real_secret
然后在Compose文件中引用:
environment:
- DB_PASSWORD=${DB_PASSWORD}
- 健康检查:确保服务真正就绪:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
最后一个小技巧:在团队中,可以把常用命令写成Makefile:
up:
docker compose up -d
logs:
docker compose logs -f
down:
docker compose down
更多推荐
所有评论(0)