Docker为Symfony开发提供了以下优势: - 环境一致性:确保开发、测试和生产环境一致 - 快速配置:无需手动安装PHP、MySQL等组件 - 隔离性:不同项目可以使用不同版本的依赖而不冲突 - 便携性:团队新成员可以快速搭建开发环境
symfony-docker/
├── docker/
│ ├── php/
│ │ └── Dockerfile
│ └── nginx/
│ └── default.conf
├── docker-compose.yml
└── symfony/ (将在之后创建)
创建docker-compose.yml
文件:
version: '3.8'
services:
php:
build:
context: ./docker/php
volumes:
- ./symfony:/var/www/symfony
depends_on:
- mysql
- redis
nginx:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./symfony:/var/www/symfony
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
mysql:
image: mysql:5.7
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"
mailhog:
image: mailhog/mailhog
ports:
- "1025:1025" # SMTP server
- "8025:8025" # Web UI
volumes:
mysql_data:
创建docker/php/Dockerfile
:
FROM php:8.1-fpm
# 安装系统依赖
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip \
libzip-dev
# 清除缓存
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# 安装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 /var/www/symfony
# 创建非root用户并设置权限
RUN useradd -G www-data,root -d /home/symfony symfony \
&& mkdir -p /home/symfony \
&& chown -R symfony:symfony /home/symfony \
&& chown -R symfony:symfony /var/www/symfony
USER symfony
# 设置PATH
ENV PATH="/home/symfony/.composer/vendor/bin:${PATH}"
创建docker/nginx/default.conf
:
server {
listen 80;
server_name localhost;
root /var/www/symfony/public;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass php: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;
}
docker-compose up -d mysql redis nginx mailhog
docker-compose run --rm php composer create-project symfony/website-skeleton symfony
docker-compose up -d
现在可以通过 http://localhost:8080 访问Symfony应用。
修改docker/php/Dockerfile
,在安装PHP扩展后添加:
# 安装Xdebug
RUN pecl install xdebug && docker-php-ext-enable xdebug
# 配置Xdebug
RUN echo "xdebug.mode=develop,debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
在Symfony项目中配置.env
文件:
DATABASE_URL="mysql://symfony:symfony@mysql:3306/symfony?serverVersion=5.7"
进入PHP容器:
docker-compose exec php bash
运行Symfony命令:
docker-compose exec php bin/console [command]
查看日志:
docker-compose logs -f [service]
权限问题:
chmod -R a+rw symfony/var
解决缓存目录权限问题端口冲突:
docker-compose.yml
中的端口映射数据库连接问题:
.env
文件中的数据库配置性能问题:
cached
卷模式提高性能:
```yaml
volumes:
docker-compose.prod.yml
)通过以上配置,你已经拥有了一个功能完善的Symfony Docker开发环境,包含了PHP、Nginx、MySQL、Redis和Mailhog等服务,可以满足大多数Symfony项目的开发需求。