插件窝 干货文章 Symfony框架的Docker安装方法与步骤

Symfony框架的Docker安装方法与步骤

Docker Symfony php Compose 418    来源:    2025-04-10

Symfony框架的Docker安装指南

前置要求

  • 已安装Docker和Docker Compose
  • 基本的Symfony框架知识

安装步骤

1. 创建Symfony项目

# 使用Composer创建新项目
docker run --rm -it -v $(pwd):/app composer create-project symfony/skeleton symfony-docker

# 进入项目目录
cd symfony-docker

2. 创建Docker配置文件

创建docker-compose.yml文件

version: '3.8'

services:
  php:
    build:
      context: .
      dockerfile: docker/php/Dockerfile
    volumes:
      - .:/srv/app
    depends_on:
      - db
      - redis

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

  db:
    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"

  mailer:
    image: maildev/maildev
    ports:
      - "1080:80"
      - "1025:25"

volumes:
  mysql_data:

创建PHP Dockerfile (docker/php/Dockerfile)

FROM php:8.1-fpm-alpine

WORKDIR /srv/app

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

# 安装PHP扩展
RUN set -eux; \
    apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        icu-dev \
        libzip-dev \
        mysql-dev \
        zlib-dev \
    ; \
    \
    docker-php-ext-configure zip; \
    docker-php-ext-install -j$(nproc) \
        intl \
        pdo_mysql \
        zip \
    ; \
    pecl install \
        apcu \
        redis \
    ; \
    docker-php-ext-enable \
        apcu \
        opcache \
        redis \
    ; \
    \
    runDeps="$( \
        scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
            | tr ',' '\n' \
            | sort -u \
            | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
    )"; \
    apk add --no-cache --virtual .phpexts-rundeps $runDeps; \
    apk del .build-deps

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

# 配置PHP-FPM
COPY docker/php/php.ini /usr/local/etc/php/php.ini
COPY docker/php/php-fpm.d/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf

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

# 修复权限
RUN chown -R www-data:www-data /srv/app

创建Nginx配置 (docker/nginx/conf.d/symfony.conf)

server {
    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;
}

创建PHP配置文件 (docker/php/php.ini)

[PHP]
expose_php = Off
date.timezone = UTC
short_open_tag = Off
session.auto_start = Off
upload_max_filesize = 10M
post_max_size = 10M
memory_limit = 256M

[opcache]
opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 20000

3. 构建并启动容器

docker-compose up -d --build

4. 安装Symfony依赖

docker-compose exec php composer install

5. 配置数据库连接

编辑.env文件:

DATABASE_URL="mysql://symfony:symfony@db:3306/symfony?serverVersion=5.7"

6. 创建数据库

docker-compose exec php bin/console doctrine:database:create
docker-compose exec php bin/console doctrine:migrations:migrate

访问应用

  • 应用: http://localhost:8080
  • MailDev: http://localhost:1080

常用命令

# 进入PHP容器
docker-compose exec php bash

# 停止容器
docker-compose down

# 查看日志
docker-compose logs -f

# 运行Symfony命令
docker-compose exec php bin/console [command]

注意事项

  1. 确保.env文件中的数据库配置与docker-compose.yml中的一致
  2. 首次启动可能需要等待数据库容器完全初始化
  3. 如果需要Xdebug调试,可以在PHP Dockerfile中添加相关扩展
  4. 生产环境需要调整安全配置和性能参数

这个配置提供了Symfony开发所需的基本服务:PHP-FPM、Nginx、MySQL、Redis和邮件测试服务。根据项目需求,可以添加或移除服务。