用Docker搭Yii2开发环境的核心是配得稳、改得顺、换得灵,推荐使用Yii2 Starter Kit模板,它预集成前后端分离、RBAC、Mailcatcher、Webpack和.env管理,通过docker-compose.yml一键构建启动,并支持代码热更新、容器内数据库连接及本地hosts域名解析。

用 Docker 搭 Yii2 开发环境,核心不是“装得快”,而是“配得稳、改得顺、换得灵”。真正省时间的,不是跳过配置,而是把配置变成可复用、可验证、可共享的代码。
选对模板:Yii2 Starter Kit 是当前最成熟的起点
别从 yii2-app-basic 或 yii2-app-advanced 从头折腾。Yii2 Starter Kit 已预集成前后端分离结构、RBAC 权限、邮件测试(Mailcatcher)、Webpack 构建链和 .env 环境管理,开箱即用。它不是玩具项目,而是按企业级标准组织的脚手架。
- GitHub 镜像推荐走 Gitee(国内访问快):
git clone https://gitee.com/lvzmen_github/yii2-starter-kit - 项目根目录自带
docker-compose.yml和.env.example,无需自己写编排文件 - 服务命名清晰:frontend、backend、api、console、mysql、nginx、mailcatcher——每个容器职责单一
三步启动:命令少,但每步有讲究
执行前确认 Docker Desktop 或 Docker Engine + Docker Compose 已就绪(v2.20+ 更稳)。不建议用 docker-compose up -d 直接跑,容易因构建缓存或依赖顺序失败。
- 先构建镜像:
composer run-script docker:build(自动触发docker-compose build,含 PHP 扩展校验) - 再启动服务:
docker-compose up -d(后台运行,日志可用docker-compose logs -f实时跟踪) - 首次启动后必须初始化数据库:
docker-compose exec app console/yii migrate --interactive=0,否则前端报 500
开发时真实要改的,其实是这三处
Docker 让环境一致,但业务开发仍需本地介入。关键修改点不在容器里,而在挂载映射和配置联动上:
-
代码热更新:默认已通过
volumes: ["./:/app"]挂载整个项目目录,改 PHP 或 JS 文件无需重启容器 -
数据库连接指向容器内:
.env中DB_DSN=mysql:host=mysql;port=3306;dbname=yii2st—— host 必须填服务名mysql,不是127.0.0.1 -
域名解析要配本地 hosts:在
/etc/hosts(macOS/Linux)或C:\Windows\System32\drivers\etc\hosts(Windows)加两行:127.0.0.1 yii2-starter-kit.localhost127.0.0.1 backend.yii2-starter-kit.localhost
调试与日常维护:几个高频命令就够了
不用记一堆命令,掌握这五个就能覆盖 90% 场景:
- 看服务状态:
docker-compose ps(检查 mysql、nginx 是否是 Up 状态) - 进 PHP 容器执行命令:
docker-compose exec app bash(然后可跑yii rbac-migrate或phpunit) - 查 Nginx 日志:
docker-compose logs nginx(404 或 502 时必看) - 清缓存重跑:
docker-compose down -v && docker-compose up -d(-v删除 volume,彻底清空 MySQL 数据) - 前端资源重编译:
docker-compose exec app npm run build(非npm install,后者已在构建阶段完成)


















