gpt4 book ai didi

php - Symfony 在使用 WSL2 的 Docker 中仍然很慢

转载 作者:行者123 更新时间:2023-12-05 01:07:50 26 4
gpt4 key购买 nike

TL;DR:在我读到 WSL2 即将用于 Windows(和 Docker)的 14 个月后,我尝试了 Symfony 5,但它仍然像巧克力球一样慢。

早在 2020 年第一季度,我读到 Symfony 和 Docker 在简单的设置环境中速度非常慢。我们尝试了又尝试,但无济于事:无论我们多么努力,我们都无法获得低于 4.000 毫秒的 Symfony。其中一种解决方案显然是将供应商文件夹移到由 Docker 和 Window 管理的绑定(bind)挂载之外(可通过 explorer.exe 访问),var 目录(用于日志和缓存)也是如此。

现在是 2021 年第二季度,一年多过去了,我在 PHP 和 .NET 之间轮换,但我仍然想尝试一下。我下载了我能找到的最新版本的 Docker Desktop for Windows,以及 Hyper-V 和 WSL2 支持。我安装了 Microsoft 的支持驱动程序,然后就可以开始了。

一个小时后,在查找了一些有关 Docker 实际工作方式的数据后,我迅速部署了一个 PHP 7.4、NGINX、PostgreSQL、MongoDB 和 Redis 容器/堆栈,并且通过一个简单的 phpinfo() 和一些对上述数据库的随机调用。

我安装了全新的 Symfony 5,但令我惊讶的是,我仍然发现问题仍然存在。甚至没有建立与数据库的连接,并且仍然无法正常工作。自然地,我将我的堆栈简化为 PHP 7.4 和 NGINX 堆栈,希望在某个地方我急切地迷失了方向。不幸的是,我被一个粗鲁的觉醒遇到了 - 它仍然很吸巧克力球。

我的设置

# ./docker-compose.yml
version: '3'

services:
php-fpm:
build:
context: ./php-fpm
volumes:
- ../src:/var/www
networks:
- symfony

nginx:
build:
context: ./nginx
volumes:
- ../src:/var/www
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/sites/:/etc/nginx/sites-available
- ./nginx/conf.d/:/etc/nginx/conf.d
- ./logs:/var/log
depends_on:
- php-fpm
ports:
- "80:80"
networks:
- symfony

networks:
symfony:

PHP-FPM

# ./php-fpm/Dockerfile
FROM php:7-fpm-alpine
RUN apk --update --no-cache add git nano
COPY --from=composer /usr/bin/composer /usr/bin/composer
WORKDIR /var/www
CMD php-fpm
EXPOSE 9000

NGINX

FROM nginx:alpine
WORKDIR /var/www
CMD ["nginx"]
EXPOSE 80

正如你可以从我上面的示例中确定的那样,我有一个 src 文件夹,它简单地保存了一个 symfony new src --full 安装,并提供了所有的花里胡哨通过基本安装 - 仅此而已。

我能找到的唯一解决方案是在 php-fpm 容器中执行以下操作:

cd /var/www
rm -rf var/
mv vendor ..
ln -s /vendor vendor/
mkdir /var-symfony
chmod 777 /var-symfony
ln -s /var-symfony var/

虽然我可以简单地将其放入 Dockerfile 或 compose YAML 中,但它引出了一个问题:为什么这种轻浮的雀斑会像流体的 doo-doo 一样慢?我认为他们可能会在至少一年的大量投诉后修复它。

我还发现了反射(reflect)在我的 YAML 中的 networks 选项。那也没有解决任何问题。也许它会降低 TCP 连接,因为它是 TCP 而不是直接连接到套接字上,但我还没有尝试过。

我阅读了一些使用 docker 创建卷的内容,这在一定程度上解决了问题,但并非完全解决。对于应该开箱即用的东西,它仍然感觉像是拼凑而成。

有没有人有一个实际可行的真实用例?

最佳答案

如果您的绑定(bind)挂载指向 Windows 分区上的文件夹,那么您很可能会获得糟糕的性能。我所做的是在 ~/dev 中克隆 WSL 中的 repo(我放置了所有项目),然后从 WSL 的 shell 运行我的容器(我使用 Ubuntu 20.04)。然后为了能够使用我的 IDE (PhpStorm) 并同步代码,我从 \\wsl$\Ubuntu-20.04\home\julien\dev\my-prohect\ 打开项目.如果您使用的是 VS Code,则有一个扩展名 https://code.visualstudio.com/blogs/2019/09/03/wsl2 .

我确实创建了一个映射驱动器,以使这一切变得更加容易。在 Windows 的 CMD 中:

net use U:\\wsl$\Ubuntu-20.04/PERSISTENT:YES

关于php - Symfony 在使用 WSL2 的 Docker 中仍然很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66923879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com