插件窝 干货文章 Docker如何安装Symfony框架

Docker如何安装Symfony框架

Symfony Docker PHP Composer 175    来源:    2025-04-10

使用Docker安装Symfony框架指南

Symfony是一个流行的PHP框架,使用Docker可以方便地搭建Symfony开发环境。以下是详细安装步骤:

1. 准备工作

确保已安装: - Docker - Docker Compose

2. 创建Symfony项目

方法一:使用Symfony CLI

# 安装Symfony CLI (如果尚未安装)
curl -sS https://get.symfony.com/cli/installer | bash
mv ~/.symfony5/bin/symfony /usr/local/bin/symfony

# 创建新项目
symfony new my_project --full
cd my_project

方法二:使用Composer

docker run --rm -v $(pwd):/app composer create-project symfony/website-skeleton my_project
cd my_project

3. 创建Docker配置文件

docker-compose.yml

version: '3.8'

services:
  app:
    build:
      context: .
      target: symfony_php
      args:
        SYMFONY_VERSION: ${SYMFONY_VERSION:-}
    restart: unless-stopped
    volumes:
      - ./:/srv/app:rw,cached
    working_dir: /srv/app
    environment:
      - APP_ENV=dev
    depends_on:
      - db
      - redis

  nginx:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - ./:/srv/app:ro
      - ./docker/nginx/conf.d:/etc/nginx/conf.d:ro
    depends_on:
      - app

  db:
    image: mysql:5.7
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: symfony
      MYSQL_USER: symfony
      MYSQL_PASSWORD: symfony
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - db_data:/var/lib/mysql:rw
    ports:
      - "3306:3306"

  redis:
    image: redis:alpine
    restart: unless-stopped
    ports:
      - "6379:6379"

  mailer:
    image: maildev/maildev
    restart: unless-stopped
    ports:
      - "1080:1080"
      - "1025:1025"

volumes:
  db_data:

Dockerfile

# 多阶段构建 - 第一阶段:Composer
FROM composer:2 as symfony_php_composer

WORKDIR /app

# 安装Composer依赖
COPY composer.* symfony.lock ./
RUN composer install --prefer-dist --no-dev --no-scripts --no-progress --no-interaction

# 复制应用代码
COPY . .
RUN composer dump-autoload --optimize

# 多阶段构建 - 第二阶段:PHP
FROM php:8.1-fpm-alpine as symfony_php

# 安装PHP扩展和系统依赖
RUN apk add --no-cache \
        acl \
        fcgi \
        file \
        gettext \
        git \
        gnupg \
    ;

RUN set -eux; \
    apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        icu-dev \
        libzip-dev \
        zlib-dev \
    ; \
    \
    docker-php-ext-configure zip; \
    docker-php-ext-install -j$(nproc) \
        intl \
        zip \
        pdo_mysql \
    ; \
    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

COPY --from=symfony_php_composer /app /srv/app

WORKDIR /srv/app

RUN set -eux; \
    mkdir -p var/cache var/log; \
    chmod -R 777 var

COPY docker/php/php.ini /usr/local/etc/php/conf.d/symfony.ini
COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint

ENTRYPOINT ["docker-entrypoint"]
CMD ["php-fpm"]

创建必要的目录和文件

mkdir -p docker/nginx/conf.d docker/php
touch docker/php/php.ini docker/php/docker-entrypoint.sh

4. 配置Nginx

docker/nginx/conf.d/default.conf中添加:

server {
    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/project_error.log;
    access_log /var/log/nginx/project_access.log;
}

5. 启动容器

docker-compose up -d

6. 访问应用

打开浏览器访问:http://localhost:8080

7. 常用命令

  • 进入PHP容器:

    docker-compose exec app bash
    
  • 查看运行中的容器:

    docker-compose ps
    
  • 停止容器:

    docker-compose down
    
  • 重建容器(修改配置后):

    docker-compose up -d --build
    

8. 配置数据库

.env文件中配置数据库连接:

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

9. 可选组件

如果需要使用RabbitMQ、Elasticsearch等其他服务,可以在docker-compose.yml中添加相应配置。

这样你就拥有了一个完整的Symfony开发环境,包含了PHP、Nginx、MySQL和Redis等服务。