M1 Pro芯片MacBook Pro上Symfony 6.0 Docker项目卡顿优化咨询
M1 Pro MacBook Pro 上 Symfony 6.0 Docker 项目卡顿优化求助
我在搭载M1 Pro芯片的MacBook Pro上运行Symfony 6.0 Docker项目,此前在Ubuntu系统中运行一切正常,但现在即使使用arm64v8镜像,项目仍存在严重卡顿问题。以下是我的Docker配置文件,恳请提供优化建议:
docker-compose.yml
version: '3' services: php: build: ./docker/php container_name: {PROJECT_NAME}_php environment: TZ: Europe/Vilnius volumes: - ./docker/php/config/www.conf:/usr/local/etc/php-fpm.d/www.conf:ro - ./docker/php/config/php.ini:/usr/local/etc/php/php.ini:ro web: build: ./docker/web environment: APP_PROJECT_DIR: {PATH_TO_PROJECT} volumes: - ./docker/web/config:/etc/nginx/config:ro - ./docker/web/nginx.conf:/etc/nginx/nginx.conf:ro mysql: image: arm64v8/mariadb:10.6.4 build: ./docker/mysql
docker-compose.override.yml
version: '3' services: php: hostname: {USER_NAME}-{PROJECT_NAME}-php working_dir: {PATH_TO_PROJECT} volumes: - {PATH_TO_PROJECT}:{PATH_TO_PROJECT} - ./docker/php/composer/:/var/www/.composer/ - ./docker/php/composer/auth.json:/var/www/.composer/auth.json - {PATH_TO_PROJECT}/node_modules web: environment: APP_PROJECT_DIR: {PATH_TO_PROJECT} APP_HOST: {PROJECT_HOST} extra_hosts: - "{PROJECT_HOST}:host-gateway" volumes: - {PATH_TO_PROJECT}:{PATH_TO_PROJECT}/public networks: default: ipv4_address: 172.12.16.10 ports: - 98:80 depends_on: - php - mysql mysql: image: arm64v8/mariadb:10.6.4 ports: - 4306:3306 expose: - 3306 environment: MYSQL_ROOT_PASSWORD: qwerty networks: default: ipv4_address: 172.12.16.30 networks: default: name: {PROJECT_NAME} driver: bridge ipam: driver: default config: - subnet: 172.12.16.0/24
PHP Dockerfile
FROM arm64v8/php:8.0-fpm USER root # change user and groups ids RUN usermod --uid=1000 www-data && \ groupmod --gid=1000 www-data && \ # fix permissions chown -R www-data:www-data /var/www/ # enable extensions RUN echo 'START' && \ docker-php-ext-install mysqli && \ docker-php-ext-install bcmath && \ docker-php-ext-install pdo_mysql && \ docker-php-ext-enable opcache && \ docker-php-source delete RUN docker-php-ext-configure pcntl --enable-pcntl RUN docker-php-ext-install pcntl RUN apt-get update && \ apt-get install -y libzip-dev && \ docker-php-ext-install zip && \ apt-get install -y libxml2-dev && \ docker-php-ext-install soap && \ apt-get install -y libicu-dev && \ docker-php-ext-install intl && \ apt-get install -y libgmp-dev && \ docker-php-ext-install gmp && \ apt-get install -y libcurl4 libcurl4-openssl-dev && \ docker-php-ext-install -j$(nproc) curl && \ apt-get install -y libpq-dev && \ docker-php-ext-install pdo_pgsql && \ apt-get install -y libpng-dev libfreetype6-dev libjpeg62-turbo-dev && \ docker-php-ext-install gd && \ rm -r /var/lib/apt/lists/* && \ docker-php-source delete RUN apt-get update && \ apt-get install -y git zip gnupg && \ rm -r /var/lib/apt/lists/* && \ docker-php-source delete RUN apt-get update && \ apt-get install -y wget && \ rm -r /var/lib/apt/lists/* && \ docker-php-source delete RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt update && apt install -y yarn && \ rm -r /var/lib/apt/lists/* && \ docker-php-source delete RUN apt update && apt install -y libxrender1 && apt install -y libfontconfig1 && apt install -y libfontconfig RUN apt install -y wget fontconfig fontconfig-config xfonts-75dpi xfonts-base RUN wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.buster_arm64.deb RUN dpkg -i wkhtmltox_0.12.6-1.buster_arm64.deb ADD ./includes/install-composer.sh /usr/bin RUN /usr/bin/install-composer.sh && \ mv composer.phar /usr/bin/composer RUN apt-get update && \ ## zip apt-get install -y iputils-ping && \ ## cleanup rm -r /var/lib/apt/lists/* && \ docker-php-source delete USER www-data
MySQL Dockerfile
FROM arm64v8/mariadb:10.6.4 COPY ./config/my.cnf /etc/mysql/conf.d/my.cnf ENV TZ=Europe/Vilnius
Web Dockerfile
FROM nginx:1.11.0-alpine COPY docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["nginx", "-g", "daemon off;"]
优化建议
1. 优化文件系统挂载性能
- 替换本地目录挂载为Docker卷,避免macOS文件系统的性能瓶颈:将
{PATH_TO_PROJECT}:{PATH_TO_PROJECT}替换为命名卷,仅挂载需要实时同步的目录(如src/、templates/)到容器,而非整个项目目录;node_modules直接用卷挂载,避免宿主机与容器间的文件频繁同步:volumes: - symfony_project:{PATH_TO_PROJECT} - symfony_node_modules:{PATH_TO_PROJECT}/node_modules - 启用Docker Desktop的VirtioFS(设置>Features in development>启用VirtioFS),这是针对Apple Silicon优化的文件系统,能大幅提升挂载性能。
2. 优化PHP配置
- 调整
php.ini中的OPcache参数,提升代码缓存效率:opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=256 opcache.max_accelerated_files=20000 opcache.revalidate_freq=60 opcache.validate_timestamps=0 ; 开发环境可设为1,生产环境设为0 - 调整
www.conf中的PHP-FPM进程数,匹配M1 Pro的核心数:pm = dynamic pm.max_children = 16 ; M1 Pro有10核,可设为12-16 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 8
3. 优化MySQL性能
- 修改
my.cnf,针对ARM架构和Docker环境调整参数:[mysqld] innodb_buffer_pool_size=512M ; 根据可用内存调整,M1 Pro至少分配512M innodb_log_file_size=128M innodb_flush_log_at_trx_commit=2 ; 提升写入性能,生产环境需权衡一致性 query_cache_type=1 query_cache_size=64M - 将MySQL数据目录挂载为Docker卷,而非本地目录:
volumes: - mariadb_data:/var/lib/mysql
4. 调整Docker设置
- 分配足够的资源给Docker Desktop:设置>Resources>Advanced,CPU分配8核以上,内存分配8GB以上,避免资源不足导致卡顿。
- 移除固定IP设置,使用Docker默认网络模式,减少网络开销:删除
networks.default.ipv4_address配置。
5. 优化镜像构建
- 合并PHP Dockerfile中的
apt-get update命令,减少镜像层数,提升构建速度和运行效率:RUN apt-get update && \ apt-get install -y libzip-dev libxml2-dev libicu-dev libgmp-dev libcurl4-openssl-dev libpq-dev libpng-dev libfreetype6-dev libjpeg62-turbo-dev git zip gnupg wget libxrender1 libfontconfig1 fontconfig-config xfonts-75dpi xfonts-base iputils-ping && \ rm -r /var/lib/apt/lists/* - 使用最新的arm64镜像,比如
arm64v8/php:8.0-fpm-bookworm而非旧版本,获得更好的兼容性和性能。
内容的提问来源于stack exchange,提问作者Scorpioniz
相关产品推荐
相关产品推荐

