# 使用Composer创建新项目
docker run --rm -it -v $(pwd):/app composer create-project symfony/skeleton symfony-docker
# 进入项目目录
cd symfony-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:
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
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;
}
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
docker-compose up -d --build
docker-compose exec php composer install
编辑.env
文件:
DATABASE_URL="mysql://symfony:symfony@db:3306/symfony?serverVersion=5.7"
docker-compose exec php bin/console doctrine:database:create
docker-compose exec php bin/console doctrine:migrations:migrate
# 进入PHP容器
docker-compose exec php bash
# 停止容器
docker-compose down
# 查看日志
docker-compose logs -f
# 运行Symfony命令
docker-compose exec php bin/console [command]
.env
文件中的数据库配置与docker-compose.yml
中的一致这个配置提供了Symfony开发所需的基本服务:PHP-FPM、Nginx、MySQL、Redis和邮件测试服务。根据项目需求,可以添加或移除服务。