Docker为Symfony开发提供了以下优势: - 一致的开发环境 - 快速设置和配置 - 隔离的服务依赖 - 易于团队协作 - 接近生产环境的配置
确保已安装: - Docker Desktop (或Docker Engine + Docker Compose) - Git
# 使用官方Symfony Docker镜像创建新项目
docker run --rm -v $(pwd):/app composer create-project symfony/skeleton:"6.4.*" my_project
或者使用Symfony CLI:
symfony new my_project --version="6.4.*"
在项目根目录创建docker-compose.yaml
文件:
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000"
volumes:
- .:/srv/app
depends_on:
- db
- redis
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: symfony
MYSQL_USER: symfony
MYSQL_PASSWORD: symfony
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
mysql_data:
创建Dockerfile
:
FROM php:8.2-fpm
# 安装系统依赖
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip \
libzip-dev
# 安装PHP扩展
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip
# 安装Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# 设置工作目录
WORKDIR /srv/app
# 复制项目文件
COPY . .
# 安装项目依赖
RUN composer install
docker-compose up -d
应用将在http://localhost:8000
可用
docker-compose exec app php bin/console [command]
docker-compose exec app composer require [package]
docker-compose logs -f
docker-compose down
修改Dockerfile
添加:
RUN pecl install xdebug && docker-php-ext-enable xdebug
添加docker/php/conf.d/xdebug.ini
:
zend_extension=xdebug
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.start_with_request=yes
在docker-compose.yaml
中添加:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./docker/nginx/conf.d:/etc/nginx/conf.d
- .:/srv/app
depends_on:
- app
创建docker/nginx/conf.d/symfony.conf
:
server {
listen 80;
server_name localhost;
root /srv/app/public;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass app:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/symfony_error.log;
access_log /var/log/nginx/symfony_access.log;
}
问题1: 权限问题导致无法写入缓存 解决方案: 在Dockerfile中添加:
RUN chown -R www-data:www-data /srv/app/var
问题2: 数据库连接失败
解决方案: 确保.env
中配置正确:
DATABASE_URL="mysql://symfony:symfony@db:3306/symfony?serverVersion=8.0"
问题3: 性能缓慢
解决方案:
- 启用OPcache
- 使用APP_ENV=prod
- 优化Composer自动加载
通过以上配置,你可以快速开始Symfony项目的Docker化开发,享受容器化带来的便利和一致性。