description: 陀螺匠项目Docker Compose开发环境构建规范与最佳实践
ruleType: manual
globs:
- "docker-compose-dev/*.yml"
alwaysApply: false
Docker Compose 开发环境构建规范(CRMEB项目)
项目概述
- 项目名称: CRMEB 商城系统
- 技术栈: ThinkPHP 6.x + Workerman + PHP 7.4 + MySQL 5.7 + Redis + Nginx
- 架构: 标准接口、前后端分离、微服务容器化
目录结构
docker-compose-dev/
├── mysql/ # MySQL 容器配置
│ ├── data/ # MySQL 数据目录
│ └── my.cnf # MySQL 配置文件
├── nginx/ # Nginx 容器配置
│ └── vhost.conf # Nginx 虚拟主机配置
├── php/ # PHP 容器配置
│ ├── php-ini-overrides.ini # PHP 配置覆盖文件
│ └── supervisord.conf # Supervisor 配置文件
├── redis/ # Redis 容器配置
│ └── redis.conf # Redis 配置文件
├── docker-compose.build.yml # 本地构建环境编排文件
└── README.md # 根目录说明文档
网络配置
yaml
networks:
app_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.10.0/24
服务IP分配:MySQL: 192.168.10.11 | Redis: 192.168.10.10 | PHP: 192.168.10.90 | Nginx: 192.168.10.80
端口映射
| 服务 | 容器端口 | 宿主机端口 | 说明 |
|---|---|---|---|
| Nginx | 80 | 8011 | HTTP访问 |
| MySQL | 3306 | 33061 | 数据库 |
| Redis | 6379 | 63791 | 缓存服务 |
| PHP-FPM | 9000 | 9000 | PHP-FPM 服务 |
| Swoole | 40001, 40002 | 40001, 40002 | Swoole 服务 |
环境变量
MySQL
yaml
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
MYSQL_USER: crmeb
MYSQL_PASSWORD: 123456
MYSQL_DATABASE: crmeb
Redis
yaml
TZ: Asia/Shanghai
REDIS_PASSWORD: 123456
PHP
yaml
TZ: Asia/Shanghai
MYSQL_HOST_IP: crmeb_mysql
MYSQL_PORT: "3306"
MYSQL_USER: crmeb
MYSQL_PASSWORD: 123456
MYSQL_DATABASE: crmeb
REDIS_HOST_IP: crmeb_redis
REDIS_PORT: "6379"
REDIS_DATABASE: "0"
REDIS_PASSWORD: 123456
APP_DEBUG: true
DEFAULT_TIMEZONE: Asia/Shanghai
Nginx
yaml
TZ: Asia/Shanghai
数据持久化
yaml
# MySQL
- ./mysql/data:/var/lib/mysql
- ./mysql/log:/var/log/mysql
- ./mysql/my.cnf:/etc/mysql/my.cnf
# PHP
- ../crmeb:/var/www
- ../crmeb/runtime:/var/www/runtime
# Nginx
- ./nginx/vhost.conf:/etc/nginx/conf.d/default.conf
- ./nginx/log:/etc/nginx/log
健康检查
MySQL
yaml
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 30s
timeout: 10s
retries: 3
Redis
yaml
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 3
PHP
yaml
test: ["CMD", "curl", "-f", "http://localhost:40001"]
interval: 30s
timeout: 10s
retries: 3
Nginx
yaml
test: ["CMD", "nginx", "-t"]
interval: 30s
timeout: 10s
retries: 3
服务依赖
yaml
# 启动顺序: MySQL/Redis -> PHP -> Nginx
phpfpm:
depends_on:
- mysql
- redis
nginx:
depends_on:
- phpfpm
常用命令
bash
# 进入 docker-compose-dev 目录
cd docker-compose-dev
# 启动/停止/重启
docker-compose -f docker-compose.build.yml up -d
docker-compose -f docker-compose.build.yml down
docker-compose -f docker-compose.build.yml restart
# 查看日志
docker-compose -f docker-compose.build.yml logs -f [服务名]
# 单独服务操作
docker-compose -f docker-compose.build.yml up -d mysql
docker-compose -f docker-compose.build.yml stop mysql
docker-compose -f docker-compose.build.yml restart mysql
# 进入容器
docker exec -it crmeb_mysql bash
docker exec -it crmeb_redis redis-cli
docker exec -it crmeb_php bash
docker exec -it crmeb_nginx bash
故障排查
服务无法启动
bash
# 查看容器日志
docker-compose -f docker-compose.build.yml logs -f [服务名]
# 查看容器状态
docker-compose -f docker-compose.build.yml ps
# 检查端口占用
netstat -tlnp | grep [端口号]
# 检查容器状态
docker ps -a
数据库连接失败
bash
# 进入 MySQL 容器
docker exec -it crmeb_mysql bash
# 登录 MySQL
mysql -u root -p
# 检查 PHP 容器中的数据库连接配置
docker exec -it crmeb_php cat /var/www/.env
# 测试 PHP 容器到 MySQL 容器的网络连接
docker exec -it crmeb_php ping crmeb_mysql
权限问题
bash
# 检查目录权限
chmod -R 777 ../crmeb/runtime ../crmeb/public ../crmeb/backup ./mysql/data
# 检查容器内权限
docker exec -it crmeb_php chmod -R 755 /var/www/runtime /var/www/public /var/www/backup
网络问题
bash
# 重启容器
docker-compose -f docker-compose.build.yml down
docker-compose -f docker-compose.build.yml up -d
# 检查容器网络
docker network inspect app_net
# 测试容器间网络连接
docker exec -it crmeb_php ping crmeb_mysql
docker exec -it crmeb_php ping crmeb_redis
docker exec -it crmeb_nginx ping crmeb_php
重构环境须知
重要 :执行 docker-compose-dev/docker-compose.build.yml 重构(重新构建)时,必须先删除以下文件/目录:
- 安装锁文件 :
crmeb/public/install.lock - MySQL数据目录 :
docker-compose-dev/mysql/data/目录下的所有文件
bash
# 重构前清理命令
rm -f ../crmeb/public/install.lock
rm -rf ./mysql/data/*
# 然后执行重构
cd docker-compose-dev
docker-compose -f docker-compose.build.yml down
docker-compose -f docker-compose.build.yml up -d --build
原因:
install.lock文件存在时,安装程序会提示"已安装",无法重新安装mysql/data/目录保留旧数据会导致数据库状态不一致,重构后需要全新安装
开发环境初始化
bash
cd docker-compose-dev
# 创建数据目录
mkdir -p mysql/data mysql/log redis/data redis/log nginx/log php/log
chmod -R 777 mysql/data redis/data
# 构建并启动
docker-compose -f docker-compose.build.yml build
docker-compose -f docker-compose.build.yml up -d
docker-compose -f docker-compose.build.yml ps
Docker Compose 文件说明
项目提供一个 Docker Compose 配置文件,用于本地构建环境的部署:
| 文件 | 用途 | 镜像来源 | 使用场景 |
|---|---|---|---|
docker-compose.build.yml |
本地开发环境 | 本地 Dockerfile 构建 | 开发调试、修改镜像 |
docker-compose.build.yml(本地构建)
bash
# 本地构建镜像(首次或修改 Dockerfile 后)
cd docker-compose-dev
docker-compose -f docker-compose.build.yml up -d --build
特点:
- 使用
build指令从 Dockerfile 构建,方便开发调试 - 每个服务都有独立的容器,便于单独管理和调试
- 支持服务间的依赖关系管理
- 提供完整的开发环境配置
访问地址
- Nginx: http://localhost:8011
- MySQL: localhost:33061
- Redis: localhost:63791
- PHP-FPM: localhost:9000
- Swoole: localhost:40001, localhost:40002
最后更新时间 : 2026-03-25
适用版本: CRMEB 商城系统 v2.0