插件窝 干货文章 使用Docker搭建Symfony开发环境:快速上手

使用Docker搭建Symfony开发环境:快速上手

Symfony Docker Composer php 178    来源:    2025-04-10

使用Docker搭建Symfony开发环境指南

为什么选择Docker搭建Symfony环境

Docker为Symfony开发提供了以下优势: - 一致的开发环境(避免"在我机器上能运行"问题) - 快速配置和启动 - 易于团队共享配置 - 隔离的服务依赖管理

基础环境搭建

1. 创建项目目录结构

mkdir symfony-docker-project
cd symfony-docker-project

2. 创建基础Docker文件

docker-compose.yml

version: '3.8'

services:
  php:
    build:
      context: .
      target: symfony_php
      args:
        SYMFONY_VERSION: 6.3.*
    container_name: symfony_php
    volumes:
      - ./:/srv/app
    working_dir: /srv/app
    networks:
      - symfony-network

  nginx:
    image: nginx:alpine
    container_name: symfony_nginx
    ports:
      - "8080:80"
    volumes:
      - ./:/srv/app
      - ./docker/nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - php
    networks:
      - symfony-network

  mysql:
    image: mysql:8.0
    container_name: symfony_mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: symfony
      MYSQL_USER: symfony
      MYSQL_PASSWORD: symfony
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - symfony-network

  mailhog:
    image: mailhog/mailhog
    container_name: symfony_mailhog
    ports:
      - "8025:8025"
    networks:
      - symfony-network

volumes:
  mysql-data:

networks:
  symfony-network:
    driver: bridge

Dockerfile

# 基础镜像
FROM php:8.2-fpm-alpine AS symfony_php

# 持久化环境变量
ARG SYMFONY_VERSION=6.3.*

# 安装系统依赖
RUN apk add --no-cache \
    acl \
    fcgi \
    file \
    gettext \
    git \
    mysql-client \
    unzip \
    nginx \
    supervisor

# 安装PHP扩展
RUN set -eux; \
    docker-php-ext-install -j$(nproc) \
    pdo \
    pdo_mysql \
    opcache

# 安装Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

# 安装Symfony CLI
RUN wget https://get.symfony.com/cli/installer -O - | bash && \
    mv /root/.symfony5/bin/symfony /usr/local/bin/symfony

# 配置工作目录
WORKDIR /srv/app

# 复制配置文件
COPY docker/php/conf.d/app.ini $PHP_INI_DIR/conf.d/
COPY docker/php/php-fpm.d/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf
COPY docker/supervisor/conf.d/supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# 暴露端口
EXPOSE 9000

# 启动命令
CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

3. 创建必要的配置文件

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 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/php/conf.d/app.ini

date.timezone = "UTC"

[opcache]
opcache.enable=1
opcache.optimization_level=-1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
opcache.save_comments=1
opcache.enable_file_override=1

4. 启动容器

docker-compose up -d

创建Symfony项目

1. 进入PHP容器

docker exec -it symfony_php sh

2. 创建新Symfony项目

symfony new . --version=6.3 --webapp

或者使用Composer:

composer create-project symfony/website-skeleton:"6.3.*" .

3. 安装常用依赖

composer require symfony/maker-bundle --dev
composer require annotations
composer require twig
composer require symfony/orm-pack
composer require --dev symfony/profiler-pack

4. 配置数据库连接

编辑.env文件:

DATABASE_URL="mysql://symfony:symfony@mysql:3306/symfony?serverVersion=8.0"

常用开发命令

启动/停止服务

# 启动服务
docker-compose up -d

# 停止服务
docker-compose down

# 查看日志
docker-compose logs -f

进入容器

# 进入PHP容器
docker exec -it symfony_php sh

# 进入MySQL容器
docker exec -it symfony_mysql mysql -usymfony -psymfony

开发工具

  • Symfony本地服务器: symfony serve -d
  • Mailhog界面: http://localhost:8025
  • Nginx服务: http://localhost:8080

高级配置

Xdebug配置

在Dockerfile中添加:

RUN apk add --no-cache $PHPIZE_DEPS \
    && pecl install xdebug \
    && docker-php-ext-enable xdebug

创建docker/php/conf.d/xdebug.ini:

zend_extension=xdebug.so
xdebug.mode=develop,debug
xdebug.start_with_request=yes
xdebug.client_port=9003
xdebug.client_host=host.docker.internal
xdebug.idekey=PHPSTORM

使用Redis

docker-compose.yml中添加:

redis:
  image: redis:alpine
  container_name: symfony_redis
  ports:
    - "6379:6379"
  networks:
    - symfony-network

然后安装Redis扩展:

RUN apk add --no-cache pcre-dev $PHPIZE_DEPS \
    && pecl install redis \
    && docker-php-ext-enable redis

常见问题解决

  1. 权限问题:

    sudo chown -R $USER:$USER .
    
  2. 端口冲突:

    • 修改docker-compose.yml中的端口映射
  3. 数据库连接失败:

    • 确保MySQL服务已启动
    • 检查.env中的连接字符串
  4. 缓存问题:

    php bin/console cache:clear
    
  5. Composer速度慢:

    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
    

通过以上步骤,你已经建立了一个完整的Symfony Docker开发环境,可以开始高效开发了!