如何使用Docker容器化我的Symfony应用?
Symfony 7 + Docker 学习阶段实操指引
一、Docker Compose 配置优化
- 拆分独立服务:将Web(PHP-FPM+Nginx)、数据库、Node.js(处理Webpack Encore)拆分为单独服务,避免单容器负载过高
示例核心配置片段:services: php: build: ./docker/php volumes: - .:/var/www/html environment: - APP_ENV=dev nginx: image: nginx:alpine ports: - "8000:80" volumes: - .:/var/www/html - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php node: image: node:20-alpine volumes: - .:/app working_dir: /app command: tail -f /dev/null # 保持容器运行,方便临时执行命令 db: image: mysql:8.0 environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=symfony_dev volumes: - db_data:/var/lib/mysql volumes: db_data: - 缓存目录挂载:将
vendor/、node_modules/、var/cache/设为Docker卷或本地挂载,避免容器重建时重复安装依赖 - 环境变量统一:将Symfony核心配置(如
DATABASE_URL)写入.env.local,Docker Compose通过env_file引用该文件
二、依赖管理规范
- Composer:用
composer require添加依赖时优先选择Symfony官方推荐的稳定包,学习阶段避免冗余依赖,定期用composer show --unused清理未使用的包 - Node.js:用
npm install --save-dev安装Webpack Encore、Bootstrap等,将node_modules/加入.dockerignore,优先在容器内执行安装命令(或挂载本地目录加速) - 版本锁定:提交
composer.lock和package-lock.json到版本库,确保不同环境依赖版本一致
三、Webpack Encore 前端调试
- 容器内实时编译:进入Node容器执行命令监听文件变化
docker-compose exec node npm run watch - 静态资源引用:Twig模板中统一用
{{ asset('build/app.css') }}引用编译后的资源,依赖Symfony Asset组件自动处理路径 - Bootstrap集成示例:
在assets/app.js中导入JS:
在import '../styles/app.scss'; import 'bootstrap';assets/styles/app.scss中导入样式:@import "bootstrap/scss/bootstrap";
四、Doctrine 数据库操作
- 容器内执行迁移:
docker-compose exec php bin/console doctrine:migrations:migrate - 数据库连接配置:
.env.local中DATABASE_URL需指向Docker内的数据库服务,示例:mysql://root:root@db:3306/symfony_dev - 实体同步:学习阶段可使用
bin/console doctrine:schema:update --force快速同步实体到数据库,生产环境建议用迁移脚本
五、日常开发技巧
- 容器内执行Symfony命令:常用操作直接在PHP容器内运行,如
docker-compose exec php bin/console cache:clear - Xdebug调试:在PHP的Dockerfile中安装Xdebug,配置远程调试端口,对应IDE设置断点即可调试代码
- 日志排查:用
docker-compose logs -f php或docker-compose logs -f nginx实时查看服务日志定位问题
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

